Questo articolo illustra il mio percorso di apprendimento dell'architettura del filesystem Linux e l'utilizzo delle mie conoscenze per scrivere uno script di shell per creare utenti Linux. Nel mio secondo anno di college, ho imparato a conoscere il filesystem Linux quando mi è venuto in mente il concetto di utenti. Ho provato a creare utenti in sistemi operativi basati su Linux.
Lo script è progettato per i sistemi operativi basati su Red Hat e può essere utilizzato anche per altre distribuzioni Linux con alcune lievi modifiche. Nota che usa ksh
.
[ Potrebbe interessarti anche: Nozioni di base sull'amministratore di sistema Linux:Gestione dell'account utente ]
Il focus è sui file che si trovano in /etc
directory, che memorizza le informazioni di configurazione del sistema. Mostro come lavorare con i file di sistema e come creare un nuovo utente. L'accesso come root è un requisito.
Ecco i file che vengono modificati durante la creazione di un nuovo utente in Linux:
- /etc/passwd
- /etc/shadow
- /etc/gruppo
- /etc/gshadow
- /home/UTENTE
- /var/spool/mail/USER
Il sistema aggiunge sicurezza alla home directory e alla casella di posta dell'utente (USER) impostando la proprietà dell'utente e del gruppo dell'utente.
/etc/passwd
Questo file memorizza informazioni sull'utente, come nome utente, ID utente, ID gruppo, nome completo (commento) e shell. I dati vengono archiviati nel seguente formato: UserName:Link:UserID:GroupID:Comment:HomeDirectory:Shell
Ogni riga del file contiene le seguenti informazioni sugli utenti:
- Nome utente:indica il nome utente fornito all'utente per un facile accesso.
- Link:rappresenta la password dell'utente memorizzata nel
/etc/shadow
file. Se x viene rimosso, la password non verrà verificata e l'utente non potrà accedere. - UserID:comunemente noto come UID e utilizzato per rappresentare in modo univoco un utente. Va da 0 a 65.535.
- UID =0 -> account utente root
- UID =da 1.000 a 60.000 -> Account non root/generali
- UID =da 1 a 999 e da 60.001 a 65.535 -> Utenti del sistema
- GroupID:uguale a UserID ma utilizzato per rappresentare un gruppo in modo univoco.
- Commento:informazioni aggiuntive sull'utente. In genere, il nome completo dell'utente.
- HomeDirectory:posizione della home directory dell'utente.
- Shell:shell predefinita dell'utente.
/etc/shadow
Questo file memorizza le informazioni sulla password dell'utente e contiene la password in forma crittografata.
I dati vengono memorizzati nel seguente formato:
UserName:EncryptedPassword:LastPasswordChange:MinPwdAge:MaxPwdAge:WarningPeriod:InactivityPeriod:ExpirationDate:Unused
- Nome utente:indica il nome utente fornito all'utente.
- Password crittografata:la password viene crittografata utilizzando algoritmi di hashing come sha256, sha512, md5, ecc. e archiviata nel file.
- Ultima modifica password:memorizza la data di epoca dall'ultima modifica della password.
- Età minima password:memorizza il numero di giorni fino alla successiva modifica della password.
- Per impostazione predefinita, 0 -> Nessuna età minima
- Età massima password:memorizza il numero massimo di giorni dopo i quali l'utente deve modificare la password.
- Per impostazione predefinita, 99.999 -> Nessuna età massima
- Periodo di avviso:numero di giorni dopo i quali viene visualizzato l'avviso per modificare la password.
- Per impostazione predefinita, NULL
- Periodo di inattività:specifica il numero di giorni dopo la scadenza della password utente prima che l'account venga disattivato.
- Data di scadenza:data di epoca fino alla disattivazione dell'account.
- Non utilizzato:riservato per uso futuro.
Altri file
/etc/group
e/etc/gshadow
i file sono per i gruppi in Linux e memorizzano i dati nel formato GroupName:Link:GroupID:MemberList e GroupName:Password:Reserved:MemberList rispettivamente.- La directory home dell'utente deve essere creata in
/home
directory con i dati da/etc/skel
cartella. - Casella di posta creata nel
/var/spool/mail
directory.
Il copione
Quello che segue è lo script della shell che ho scritto per creare nuovi utenti suddiviso in parti:
uname=$1
id -u $uname&>/dev/null
Innanzitutto, verifica se l'utente esiste già:
if [ $? -ne 0 ]
then
for i in {1000..60000}
do
id -u $i&>/dev/null & id -g $i&>/dev/null
if [ $? -ne 0 ]
then
break
fi
done
uid=$i
echo "$uname:x:$uid:$uid::/home/$uname:/bin/bash">>/etc/passwd
lastpwdchange=$(datediff 1970-01-01 `date +"%Y-%m-%d"`)
echo "$uname::$lastpwdchange:0:99999:7:::">>/etc/shadow
echo "$uname:x:$uid:">>/etc/group
echo "$uname:!::">>/etc/gshadow
mkdir /home/$uname
cp -a /etc/skel/. /home/$uname/
chown $uname:$uname /home/$uname/ -R
chmod 0700 /home/$uname/ -R
touch /var/spool/mail/$uname
chown $uname:$uname /var/spool/mail/$uname
echo "User successfully created"
else
echo "User already exists : try using a unique username">&2
fi
Se l'utente esiste già, esci dal programma o crea l'utente.
Il codice completo è disponibile pubblicamente su GitHub.
Esegui lo script della shell
[ Nota del redattore:anche se questo script può sembrare abbastanza semplice, assicurati sempre di comprendere e di considerare attendibile tutti gli script che trovi prima di installarli o di aumentare le loro autorizzazioni sul tuo sistema. ]
1) Posiziona lo script della shell nella directory /usr/bin/
per renderlo accessibile come comando.
2) Aggiungi l'autorizzazione di esecuzione per l'utente root:
# chmod u+x /usr/bin/ksh_useradd
3) Eseguire il comando con il nome utente come argomento:
ksh_useradd USERNAME
4) Lo script crea l'account utente. È necessario impostare una password per il nuovo utente prima del primo accesso.
[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]
Concludi
Questo script può rendere il processo di creazione degli utenti un po' più semplice rispetto al ricordare le opzioni per useradd
comando. Certo, puoi usare useradd
comando per creare utenti, impostare autorizzazioni e creare la casella di posta dell'utente, ma questo script esegue le stesse azioni di useradd
e ti aiuta a imparare cosa succede dietro le quinte con il tuo filesystem. Spero che le spiegazioni precedenti ti aiutino a comprendere un po' più chiaramente i file di configurazione relativi alla creazione dell'utente e i relativi campi.