Per i nostri scopi, adotteremo come sistema operativo una distribuzione Linux fra le più diffuse, nello specifico Ubuntu, ma le istruzioni che andremo a presentare nelle prossime lezioni hanno valore esemplificativo e sono valide in generale a prescindere da piccole differenze fra distribuzioni. Sfrutteremo, inoltre, l’interfaccia a riga di comando del terminale, che è disponibile per tutte le distribuzioni ed è comodamente utilizzabile via ssh.
Andiamo quindi, a presentare alcune conoscenze di base che saranno utili in qualsiasi contesto. Quale prerequisito, sarà utile aggiornare il sistema operativo secondo le più comuni procedure ampiamente documentate online.
Utenti
Linux è un sistema operativo multiutente, ed è per questo che occorre adottare strategie per disciplinare le azioni che possono essere effettuate o meno dai singoli utenti. Occorrerà altresì inibire a determinati utenti la possibilità di accedere a specifici contenuti ospitati nel filesystem.
L’utente principale per l'amministrazione del sistema è root. Nessuna azione gli è preclusa, anche la più distruttiva, ed occorrerà prestare particolare attenzione nell’adoperarlo.
Esistono svariate tecnologie per gestire gli utenti, la più comune sfrutta il filesystem locale,
memorizzando le principali informazioni nei tre file seguenti:
File | Descrizione |
---|---|
/etc/passwd | Ospita informazioni per gestire i singoli utenti dal punto di vista del Sistema Operativo. |
/etc/shadow | Contiene le password criptate che possono adoperare gli utenti per presentarsi al Sistema Operativo. |
/etc/group | Raggruppa gli utenti in insiemi di utenti. |
Questi file sono “testuali”, ma realizzati sfruttando una struttura tabellare in cui ogni riga è una entità e le posizioni in colonna rappresentano, in relazione a quella entità, un determinato valore assegnato a uno specifico attributo. Per approfondire questo aspetto, rimandiamo a questa lezione su HMTL.it.
I comandi più comuni adoperati per gestire la creazione di utenti sono riportati nella tabella seguente.
Comando | Descrizione |
---|---|
useradd |
Consente di aggiungere un utente, l’argomento principale è il nome utente. I flag maggiormente adoperati sono -d per specificare la directory home, -g e -G rispettivamente per il gruppo primario e secondario. |
userdel |
Elimina l’utente passato al comando come argomento. |
groupadd |
Crea il gruppo passato al comando come argomento. |
groupdel |
Elimina il gruppo passato al comando come argomento. |
passwd |
Assegna una password all’utente passato come argomento. |
Di seguito riportiamo un esempio di esecuzione dei comandi precedenti:
root@t1:~# groupadd localusers
root@t1:~# useradd test1 -d /home/test1 -g users -G localusers
root@t1:~# useradd test2 -d /home/test2 -g users -G localusers
root@t1:~# passwd test1
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@t1:~# passwd test2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@t1:~# tail -n 1 /etc/group
localusers:x:1000:test1,test2
root@t1:~# tail -n 2 /etc/passwd
test1:x:1000:100::/home/test1:/bin/sh
test2:x:1001:100::/home/test2:/bin/sh
In questo esempio, abbiamo creato, quale prima azione, il gruppo localusers, quindi abbiamo intrapreso la stessa azione per due utenti assegnandoli entrambi, come gruppo primario, a users e come gruppo secondario a localusers. Abbiamo, inoltre, provveduto ad assegnare ai due utenti in questione una password attraverso l’omonimo comando.
Ulteriori informazioni su questi argomenti sono disponibili su HTML.it, in una lezione di approfondimento dedicata all’argomento.
Sudo
Il comando sudo consente di eseguire un processo lanciato da un utente con i privilegi di un altro utente (con tutte le implicazioni di sicurezza che ciò comporta).
Le configurazioni del comando sudo sono registrate in /etc/sudousers e sono modificabili su Ubuntu tramite il comando visudo
:
root@t1:~# tail -n 3 /etc/sudoers
User_Alias ADMINS = test1, test2
Cmnd_Alias STOP = /sbin/reboot, /sbin/shutdown
ADMINS ALL = STOP
root@t1:~# su test1
$ sudo -l
Matching Defaults entries for test1 on t1:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User test1 may run the following commands on t1:
(root) /sbin/reboot, /sbin/shutdown
$ sudo reboot
Connection to 94.177.188.152 closed by remote host.
Connection to 94.177.188.152 closed.
fprincipe@DC:~$ ssh root@94.177.188.152 -X
root@94.177.188.152's password:
Nell’esempio qui riportato abbiamo definito alcuni alias che consento di assegnare ai due utenti raggruppati in ADMINS la possibilità di eseguire i comandi reboot
e shutdown
.
Il comando sudo
è quindi molto semplice e, al tempo stesso, estremamente potente. Una volta configurato sudo
come nell’esempio, da entrambi gli utenti potremo ad esempio lanciare il comando shutdown
semplificante passandolo come argomento a sudo
.
Di seguito riportiamo le principali opzioni (o flag) di sudo
che vanno a estenderne il funzionamento.
Flag | Descrizione |
---|---|
-b |
Per eseguire il comando in background. |
-i |
Apre una console per l’utente passato in argomento. |
-l |
Riporta a video la lista dei comandi che risultano autorizzati. |
-u |
Specifica come argomento l’utente che dovrà essere assegnato al processo. |
-H |
La home directory sarà quella dell’utente di esecuzione del processo. |