Le autorizzazioni e la proprietà dei file sono il concetto di sicurezza di base e tuttavia essenziale in Linux. Probabilmente hai già familiarità con questi termini. In genere è simile a questo:
Oltre a questi permessi regolari, ci sono alcuni permessi speciali sui file e non molti utenti Linux ne sono a conoscenza.
Per iniziare a parlare di autorizzazioni speciali, presumo che tu abbia una certa conoscenza delle autorizzazioni di base dei file. In caso contrario, leggi la nostra eccellente guida che spiega i permessi dei file Linux.
Ora ti mostrerò alcuni permessi speciali con nuove lettere sul file system Linux.
In questo esempio, il comando passwd, responsabile della modifica della password di un utente, ha la lettera s
nello stesso posto ci aspettiamo di vedere x
o -
, per le autorizzazioni utente. È importante notare che questo file appartiene all'utente root e al gruppo root.
Con questa autorizzazione non è necessario fornire sudo
accedere a un utente specifico quando vuoi che esegua uno script di root.
Cos'è SUID?
Quando il bit SUID è impostato su un file eseguibile, significa che il file verrà eseguito con le stesse autorizzazioni del proprietario del file eseguibile.
Facciamo un esempio pratico. Se guardi il file eseguibile binario del comando passwd, ha il bit SUID impostato.
linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
Ciò significa che qualsiasi utente che esegue il comando passwd lo eseguirà con la stessa autorizzazione di root.
Qual è il vantaggio? Il comando passwd deve modificare file come /etc/passwd, /etc/shadow per cambiare la password. Questi file sono di proprietà di root e possono essere modificati solo da root. Ma grazie al flag setuid (bit SUID), un utente normale potrà anche modificare questi file (che sono di proprietà di root) e cambiare la sua password.
Questo è il motivo per cui puoi usare il comando passwd per cambiare la tua password nonostante il fatto che i file modificati da questo comando siano di proprietà di root.
Perché un utente normale non può cambiare la password di altri utenti?
Tieni presente che un utente normale non può modificare le password per altri utenti, ma solo per se stesso. Ma perché? Se puoi eseguire il comando passwd come utente normale con gli stessi permessi di root e modificare i file come /etc/passwd, perché non puoi cambiare la password di altri utenti?
Se controlli il codice per il comando passwd, scoprirai che controlla l'UID dell'utente la cui password viene modificata con l'UID dell'utente che ha eseguito il comando. Se non corrisponde e se il comando non è stato eseguito da root, genera un errore.
Il concetto di setuid/SUID è complicato e dovrebbe essere usato con la massima cautela, altrimenti lascerai lacune di sicurezza nel tuo sistema. È un concetto di sicurezza essenziale e molti comandi (come il comando ping) e programmi (come sudo) lo utilizzano.
Ora che hai compreso il concetto SUID, vediamo come impostare il bit SUID.
Come impostare il bit SUID?
Trovo più semplice il modo simbolico durante l'impostazione del bit SUID. Puoi usare il comando chmod in questo modo:
chmod u+s file_name
Ecco un esempio:
linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt
Puoi anche usare il modo numerico. Devi solo aggiungere una quarta cifra alle normali autorizzazioni. Il numero ottale utilizzato per impostare SUID è sempre 4.
linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt
Come rimuovere SUID?
Puoi usare la modalità simbolica nel comando chmod in questo modo:
chmod u-s test.txt
Oppure, usa il modo numerico con 0 invece di 4 con i permessi che vuoi impostare:
chmod 0766 test2.txt
Differenza tra s piccola e S maiuscola come bit SUID
Ricordi la definizione di SUID? Consente a un file di essere eseguito con le stesse autorizzazioni del proprietario del file.
Ma cosa succede se il file non ha il bit di esecuzione impostato in primo luogo? In questo modo:
linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
Se imposti il bit SUID, mostrerà una S maiuscola, non una s minuscola:
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt
Il flag S come SUID significa che c'è un errore che dovresti esaminare. Si desidera che il file venga eseguito con la stessa autorizzazione del proprietario ma non vi è alcuna autorizzazione eseguibile sul file. Ciò significa che nemmeno il proprietario è autorizzato a eseguire il file e se il file non può essere eseguito, non otterrai l'autorizzazione come proprietario. Questo fallisce l'intero punto di impostazione del bit SUID.
Come trovare tutti i file con SUID impostato?
Se vuoi cercare file con questa autorizzazione, usa il comando trova nel terminale con l'opzione -perm.
find / -perm /4000
Cos'è SGID?
SGID è simile a SUID. Con il bit SGID impostato, qualsiasi utente che esegue il file avrà le stesse autorizzazioni del proprietario del gruppo del file.
Il suo vantaggio è nella gestione della directory. Quando l'autorizzazione SGID viene applicata a una directory, tutte le sottodirectory e i file creati all'interno di questa directory avranno la stessa proprietà del gruppo della directory principale (non la proprietà del gruppo dell'utente che ha creato i file e le directory).
Apri il tuo terminale e controlla i permessi sul file /var/local:
linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24 2018 /var/local
Questa cartella /var/local ha la lettera "s" nello stesso punto in cui ti aspetti di vedere "x" o "-" per i permessi di gruppo.
Un esempio pratico di SGID è con il server Samba per la condivisione di file sulla rete locale. È garantito che tutti i nuovi file non perderanno i permessi desiderati, indipendentemente da chi li ha creati.
Come impostare SGID?
Puoi impostare il bit SGID in modalità simbolica in questo modo:
chmod g+s directory_name
Ecco un esempio:
linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
Puoi anche usare il modo numerico. Devi solo aggiungere una quarta cifra alle normali autorizzazioni. Il numero ottale utilizzato per SGID è sempre 2.
linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
Come rimuovere il bit SGID?
Usa semplicemente -s invece di +s in questo modo:
chmod g-s folder
Rimuovere SGID equivale a rimuovere SGID. Utilizza lo 0 aggiuntivo prima delle autorizzazioni che desideri impostare:
chmod 0755 folder
Come trovare file con SGID impostato in Linux
Per trovare tutti i file con bit SGID impostato, utilizzare questo comando:
find . -perm /2000
Cos'è un bit appiccicoso?
Il bit appiccicoso funziona sulla directory. Con sticky bit impostato su una directory, tutti i file nella directory possono essere eliminati o rinominati solo dai proprietari dei file o dalla radice.
Questo è in genere usato nella directory /tmp che funziona come cestino dei file temporanei.
linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp
Come puoi vedere, la cartella /tmp, ha la lettera t nello stesso posto in cui ci aspettiamo di vedere x o – per altri permessi. Ciò significa che un utente (tranne root) non può eliminare i file temporanei creati da altri utenti nella directory /tmp.
Come si imposta lo sticky bit?
Come sempre, puoi usare sia la modalità simbolica che quella numerica per impostare lo sticky bit in Linux.
chmod +t my_dir
Ecco un esempio:
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
Il modo numerico consiste nell'aggiungere una quarta cifra alle normali autorizzazioni. Il numero ottale utilizzato per il bit permanente è sempre 1.
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
Come rimuovere il bit appiccicoso:
Puoi usare la modalità simbolica:
chmod -t my_dir
Oppure la modalità numerica con 0 prima dei permessi regolari:
chmod 0775 tmp2
Come trovare file con sticky bit impostato in Linux
Questo comando restituirà tutti i file/le directory con il bit permanente impostato:
linuxhandbook:~$ find . -perm /1000
Se la directory non ha il permesso di esecuzione impostato per tutti, l'impostazione di un bit permanente comporterà la visualizzazione di T invece di t. Un'indicazione che le cose non sono del tutto corrette con il bit appiccicoso.
Conclusione
Metto qui questa immagine per ricordare ciò che hai appena appreso:
Questa flessibilità per gestire cartelle, file e tutti i loro permessi è così importante nel lavoro quotidiano di un amministratore di sistema. Potresti vedere che tutte queste autorizzazioni speciali non sono così difficili da capire, ma devono essere utilizzate con la massima cautela.
Spero che questo articolo ti abbia dato una buona comprensione di SUID, GUID e Sticky Bit in Linux. Se hai domande o suggerimenti, lascia un commento qui sotto.