SUID e SGID in Linux spiegati con esempi
Il Ottobre 1, 2021 da adminImmaginate una situazione in cui avete uno script o un file eseguibile che ha sempre bisogno di essere eseguito da un particolare utente, semplicemente perché quell’utente ha i diritti di accesso adeguati per le azioni intraprese dallo script. Anche voi volete che altri utenti siano in grado di eseguire quello script, ma alla fine deve essere eseguito dall’utente originale dello script (poiché quell’utente ha solo i set di permessi richiesti per le azioni intraprese).
Per default le applicazioni e i programmi Linux vengono eseguiti con gli stessi identici permessi dell’utente che li esegue. A causa di questo motivo, abbiamo bisogno di una buona soluzione per la situazione di cui sopra (cioè: tutti gli utenti dovrebbero essere in grado di eseguire un programma di proprietà di un particolare utente come se il proprietario stesso lo eseguisse).
Ecco dove entra in scena SUID. SUID non è altro che uno speciale bit di autorizzazione disponibile in Linux, che raggiunge questo obiettivo con molta facilità.
Se sei il proprietario di un file eseguibile, con l’aiuto del permesso SUID impostato, gli altri utenti eseguiranno l’eseguibile con il tuo permesso e non con il loro.
SUID è normalmente usato in Linux, per fornire privilegi elevati temporaneamente durante l’esecuzione. Questa elevazione di privilegi non è affatto permanente. È un’elevazione temporanea solo quando il programma/script viene eseguito.
Esempi di file eseguibili in Linux che hanno il bit di autorizzazione SUID impostato
Comprendiamo questo considerando un esempio. Dalla precedente lista di eseguibili, /usr/bin/passwd è qualcosa che dovrebbe essere eseguibile da tutti gli utenti del sistema (questo perché tutti gli utenti dovrebbero essere in grado di cambiare la propria password). Se non sapete come funzionano le password in linux, vi consiglio di leggere l’articolo seguente.
Leggi: Come funzionano le password in Linux
L’aggiornamento della password di un utente richiede all’utente di modificare il file /etc/passwd, /etc/shadow in linux. Tuttavia, questo è permesso solo all’utente root. Questa è la ragione per cui il bit SUID è applicato al file /usr/bin/passwd. Dato che root è il proprietario di quel file, ed essendo SUID impostato su quel file, qualsiasi utente che esegua il comando /usr/bin/passwd lo eseguirà come utente root. Vediamo questo praticamente.
Di seguito è mostrato il comando passwd lanciato dall’utente sarath. Vediamo se il processo del comando passwd viene eseguito come utente root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Apriamo un altro terminale, accendiamo ps aux commad e vediamo se il processo del comando passwd viene eseguito con l’utente root. Questo può essere fatto come mostrato qui sotto.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Si può vedere chiaramente che il processo del comando passwd è in esecuzione con l’utente root (visibile dal primo campo dell’output sopra). Simile al comando passwd, qualsiasi comando dalla lista precedentemente mostrata di file applicati SUID, verrà sempre eseguito con il permesso del proprietario del file, indipendentemente dall’utente che lo sta eseguendo.
Nota anche il fatto che anche il comando ping è SUID (vedi la lista iniziale data sopra), questo perché l’esecuzione di PING richiede diverse operazioni di rete, che possono essere eseguite solo da root.
Come configurare SUID in Linux?
Configurare SUID sui tuoi file/script necessari è un singolo comando CHMOD.
$ chmod u+s /path/to/file/or/executable
Sostituite “/path/to/file/or/executable”, nel comando precedente, con il percorso assoluto dello script su cui avete bisogno del bit SUID. Questo può essere ottenuto anche usando il metodo numerico di chmod.
$ chmod 4755 /path/to/file/or/executable
Il primo “4” in “4755” indica SUID. Un altro esempio di metodo numerico è mostrato qui sotto.
$ chmod 4750 /path/to/file/or/executable
Fondamentalmente, nel metodo numerico, basta anteporre 4 agli altri set di permessi necessari su quel file.
Come verificare se SUID è applicato su un file o no?
Puoi verificare se il bit SUID è applicato su un file o no usando il comando ls come mostrato sotto.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Il comando ls -l dovrebbe mostrare se SUID è applicato o meno. Guarda semplicemente il primo campo dell’output di ls -l. La s in -rwsr-xr-x indica il bit SUID. In alcuni casi vedrai una S maiuscola invece della piccola s che abbiamo visto sopra. La S maiuscola indica che non ci sono permessi eseguibili applicati a quel file o script.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Si può chiaramente vedere dall’output di cui sopra che, rimuovendo il permesso eseguibile dal file /usr/bin/passwd, l’output di ls -l è diventato una S maiuscola.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Come trovare tutti i file che hanno il bit SUID abilitato in linux?
Puoi usare il seguente comando find per cercare tutti i file nel sistema che hanno il bit SUID abilitato. Se sei nuovo al comando find, ti consiglio di leggere l’articolo seguente.
Leggi: Comando Trova in Linux con esempi
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Sostituisci la prima / nel comando sopra con la posizione richiesta per trovare tutti i file SUID in quella posizione. Per esempio, per trovare tutti i file con SUID dentro /usr/bin, esegui il seguente comando.
Ricorda che il bit SUID è ignorato nelle directory in Linux.
SGID è molto simile a SUID. L’unica differenza è che lo script/file che ha configurato SGID, verrà eseguito con lo stesso permesso del proprietario del gruppo.
Se si configura SGID sulle directory, tutti i file o le directory create all’interno di quella directory saranno di proprietà dello stesso gruppo comune (proprietario del gruppo della directory dove è configurato SGID).
Esempi di file SGID in linux
Come configurare SGID in Linux?
Simile a SUID, SGID può essere configurato usando il comando chmod come mostrato qui sotto.
root@localhost:~# chmod g+s /path/to/file
Sostituite “/path/to/file”, nel comando sopra, con il percorso assoluto dello script su cui avete bisogno del bit SGID. Questo può essere ottenuto usando anche il metodo numerico di chmod (mostrato sotto).
root@localhost:~# chmod 2755 /path/to/file
Come verificare se SGID è applicato su un file o uno script?
Similmente a SUID, puoi facilmente eseguire il comando ls -l su un file/directory per trovare se SGID è attivato o meno. L’esempio mostrato di seguito mostra lo stesso.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
La piccola parte s del primo campo nell’output about (-rwxr-sr-x) indica il bit SGID. Simile a SUID, se non hai il permesso eseguibile applicato al gruppo, sarà S maiuscola invece che piccola come mostrato sotto.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
E abilitando il permesso eseguibile sul gruppo, lo renderà s piccola (mostrato sotto.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Lascia un commento