Come abilitare gli account utente in Linux utilizzando uno script Bash automatico

La gestione efficiente degli account utente è un compito cruciale per i professionisti IT e i Managed Service Provider (MSP). Una parte significativa di questa attività consiste nell’abilitare e disabilitare gli account utente secondo le necessità. In questo articolo si parlerà di uno script Bash che semplifica il processo per abilitare gli account utente in Linux. Comprendendo e utilizzando questo script, i professionisti IT possono semplificare la gestione degli utenti, migliorare la sicurezza del sistema e garantire un funzionamento corretto.

Background

La gestione degli account utente in Linux è una responsabilità fondamentale per gli amministratori di sistema. Garantire che solo gli utenti autorizzati abbiano accesso alle risorse del sistema è essenziale per mantenere la sicurezza e l’integrità operativa. Questo script Bash è progettato per abilitare gli account utente cambiando la loro shell di accesso in /bin/bash e sbloccando l’account. Questa automazione può far risparmiare tempo, ridurre gli errori umani e applicare pratiche di sicurezza coerenti su più sistemi.

Lo script per abilitare gli account utente in Linux:

#!/usr/bin/env bash

# Description: Enables a user account by changing its shell to /bin/bash and unlocking the account.
#
# Release Notes: Initial Release
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#
# Below are all the valid parameters for this script.
#
# Preset Parameter: "ReplaceMeWithUsernameToEnable"
#   Username of the user you would like to enable.
#

# Help text function for when invalid input is encountered
print_help() {
  printf '\n### Below are all the valid parameters for this script. ###\n'
  printf '\nPreset Parameter: "ReplaceMeWithUsernameToEnable" \n'
  printf '\t%s\n' "Username of the user you would like to enable."
}

# Determines whether or not help text is nessessary and routes the output to stderr
die() {
  local _ret="${2:-1}"
  echo "$1" >&2
  test "${_PRINT_HELP:-no}" = yes && print_help >&2
  exit "${_ret}"
}

_arg_userToEnable=

# Grabbing the parameters and parsing through them.
parse_commandline() {
  while test $# -gt 0; do
    _key="$1"
    case "$_key" in
    --help | -h)
      _PRINT_HELP=yes die 0
      ;;
    --*)
      _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
      ;;
    *)
      if [[ -z $_arg_userToEnable ]]; then
        _arg_userToEnable=$1
      else
        _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1' but user '$_arg_userToEnable' was already specified!" 1
      fi
      ;;
    esac
    shift
  done
}

# Parse the command-line arguments passed to the script.
parse_commandline "$@"

if [[ -n $usernameToEnable ]]; then
  _arg_userToEnable="$usernameToEnable"
fi

# Check if the username to disable is empty and display an error if it is.
if [[ -z $_arg_userToEnable ]]; then
  _PRINT_HELP=yes die "[Error] The username of the user you would like to disable is required!'" 1
fi

# Validate the username to ensure it only contains lowercase letters, digits, hyphens, and underscores.
if [[ ! $_arg_userToEnable =~ ^[a-z0-9_-]+$ ]]; then
  _PRINT_HELP=no die "[Error] Invalid characters detected in '$_arg_userToEnable' usernames can only have a-z, 0-9 or -, _ characters!" 1
fi

# Search for the user in the /etc/passwd file.
passwdEntry=$(grep -w "$_arg_userToEnable" /etc/passwd)
if [[ -z $passwdEntry ]]; then
  _PRINT_HELP=no die "[Error] User '$_arg_userToEnable' does not exist." 1
fi

# Check to see if account is expired
accountExpiration=$(chage -l "$_arg_userToEnable" | grep "Account expires" | grep -v 'never' | cut -d ":" -f2 | xargs)
if [[ -n $accountExpiration ]]; then
  accountExpirationSeconds=$(date -d "$accountExpiration" +"%s")
  
  currentTime=$(date +"%s")
  # Warn if account is expired
  if [[ $accountExpirationSeconds -le $currentTime ]]; then
    echo "WARNING: The account for '$_arg_userToEnable' is currently expired as of '$accountExpiration'. You may need to set a new expiration date."
  fi
fi

noLogin=$(grep -w "$_arg_userToEnable" /etc/passwd | grep "nologin")
unlockedaccount=$(passwd -S "$_arg_userToEnable" | cut -f2 -d " " | grep -v "L")
if [[ -z $noLogin && -n $unlockedaccount ]]; then
  _PRINT_HELP=no die "[Error] User '$_arg_userToEnable' is already enabled." 1
fi

if [[ -f /bin/bash ]]; then
  preferredShell="/bin/bash"
elif [[ -f /bin/sh ]]; then
  preferredShell="/bin/sh"
fi

# Attempt to change the shell of the user to /bin/bash to enable login capabilities.
if ! usermod "$_arg_userToEnable" -s "$preferredShell"; then
  _PRINT_HELP=no die "[Error] Failed to change the shell for '$_arg_userToEnable' to '$preferredShell'." 1
fi

# Attempt to unlock the user account using usermod.
if ! usermod -U "$_arg_userToEnable"; then
  _PRINT_HELP=no die "[Error] Failed to unlock '$_arg_userToEnable' using usermod." 1
fi

# Check if the user has been successfully enabled by confirming 'nologin' is no longer set.
enabledUser=$(grep -w "$_arg_userToEnable" /etc/passwd | grep -v "nologin")
if [[ -n $enabledUser ]]; then
  echo "Successfully enabled '$_arg_userToEnable'."
else
  _PRINT_HELP=no die "[Error] Failed to enable '$_arg_userToEnable'." 1
fi

 

Analisi dettagliata

Lo script Bash fornito svolge il suo compito attraverso diversi passaggi ben definiti. Analizziamo ogni parte dello script per comprenderne la funzionalità:

1. Funzioni di gestione del testo di aiuto e degli errori:

  • Lo script inizia definendo le funzioni per visualizzare il testo di aiuto (print_help) e gestire gli errori (die). Queste funzioni assicurano che l’utente sia informato sul corretto utilizzo dello script e possa risolvere efficacemente i problemi.

2. Parsing dei parametri:

  • La funzione parse_commandline analizza gli argomenti della riga di comando dello script. Controlla la presenza del flag –help, di argomenti insoliti e si assicura che venga fornito un solo nome utente.

3. Convalida del nome utente:

  • Lo script convalida il nome utente fornito per assicurarsi che contenga solo lettere minuscole, cifre, trattini e trattini bassi. Questo passaggio evita potenziali problemi di sicurezza derivanti da caratteri non validi.

4. Controllo dell’esistenza utente:

  • Lo script controlla se l’utente esiste nel file /etc/passwd. Se l’utente non esiste, mostra un messaggio di errore.

5. Controllo della scadenza dell’account:

  • Lo script utilizza il comando chage per determinare se l’account è scaduto. Se è scaduto, avverte l’utente, ma continua a tentare di abilitare l’account.

6. Controllo della shell di accesso e dello stato dell’account:

  • Verifica se la shell di login dell’utente è impostata su nologin e se l’account è già sbloccato. Se l’utente è già abilitato, mostra un errore.

7. Selezione della shell:

  • Lo script controlla l’esistenza di /bin/bash e /bin/sh, preferendo /bin/bash se disponibile.

8. Modifica della shell e sblocco dell’account:

  • Lo script tenta di cambiare la shell di accesso dell’utente con quella preferita e di sbloccare l’account utilizzando il comando usermod.

9. Verifica finale:

  • Verifica se l’utente è stato abilitato con successo, controllando che nologin non sia più impostato. In caso di successo, viene mostrato un messaggio di conferma.

Casi d’uso potenziali

Immagina uno scenario in cui un professionista IT gestisce un team di grandi dimensioni con frequenti cambiamenti di personale. Un dipendente che rientra da un congedo prolungato ha bisogno di riabilitare il proprio account. Utilizzando questo script, il professionista IT può abilitare rapidamente l’account senza dover navigare manualmente tra i vari comandi, garantendo un processo rapido e privo di errori.

Confronti

Lo script fornisce un approccio semplificato e automatico all’abilitazione degli account utente rispetto ai metodi manuali. L’abilitazione manuale di un utente comporta diversi passaggi: la modifica di /etc/passwd, la modifica della shell e lo sblocco dell’account. Ogni fase è soggetta a errori umani. Lo script, invece, racchiude tutte le fasi in un unico processo ripetibile, migliorando l’affidabilità e l’efficienza.

Domande frequenti

1) Cosa succede se il nome utente non è valido?

Lo script mostra un messaggio di errore che indica che il nome utente contiene caratteri non validi.

2) Lo script può essere utilizzato per abilitare più utenti contemporaneamente?

No, lo script è progettato per abilitare un utente alla volta per garantire precisione e sicurezza.

3) Cosa succede se la shell preferita /bin/bash non è disponibile?

Lo script torna a utilizzare /bin/sh se /bin/bash non viene trovato.

4) Lo script gestisce tutti gli errori relativi all’account?

Lo script gestisce errori comuni come nomi utente non validi, utenti inesistenti e account già abilitati.

Implicazioni

L’abilitazione degli account utente in modo sicuro è fondamentale per mantenere l’integrità del sistema. Script automatizzati come questo riducono il rischio di errore umano, assicurando che gli account siano abilitati correttamente e tempestivamente. Ciò contribuisce alla sicurezza generale del sistema e all’efficienza operativa, elementi fondamentali in qualsiasi ambiente IT.

Raccomandazioni

Quando utilizzi questo script, rispetta le seguenti best practice:

  • Testa in ambiente controllato: Prima di distribuire lo script in un ambiente di produzione, testalo in un ambiente di staging per assicurarti che si comporti come previsto.
  • Effettua audit regolari: Esamina periodicamente gli account utente e le funzionalità dello script per garantire la conformità ai criteri di sicurezza.
  • Documentazione: Conserva una documentazione dettagliata di tutte le personalizzazioni apportate allo script per facilitare la manutenzione futura.

Considerazioni finali

Una gestione efficace degli account utente è essenziale per mantenere un ambiente IT sicuro ed efficiente. Questo script Bash offre una soluzione affidabile e automatizzata per abilitare gli account utente in Linux. Per le organizzazioni che desiderano ottimizzare ulteriormente le operazioni IT, strumenti come NinjaOne possono fornire soluzioni di gestione complete, migliorando l’efficienza e la sicurezza in generale.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.