
SUID, SGID e Sticky Bits sono potenti autorizzazioni speciali che puoi impostare per eseguibili e directory su Linux. Condivideremo i vantaggi e le potenziali insidie del loro utilizzo.
Sono già in uso
L'implementazione della sicurezza in un sistema operativo multiutente presenta numerosi dilemmi. Prendi il concetto (apparentemente) di base di password, per esempio. Devono essere tutti archiviati, quindi ogni volta che qualcuno accede, il sistema può confrontare la password che digita con la copia memorizzata. Ovviamente, poiché le password sono le chiavi del regno, devono essere salvaguardate.
Su Linux, le password archiviate sono protette in due modi: sono crittografate e solo con qualcuno root
i privilegi possono accedere al file che contiene le password. Potrebbe suonare bene, ma presenta un dilemma: se solo le persone con root
i privilegi possono accedere alle password memorizzate, in che modo coloro che non dispongono di tale accesso cambiano le loro password?
Elevare il tuo stato
Di solito, i comandi e i programmi Linux vengono eseguiti con lo stesso set di autorizzazioni della persona che avvia il programma. quando root
esegue il passwd
comando per modificare una password, viene eseguito con root
Le autorizzazioni. Ciò significa che passwd
Il comando può accedere liberamente alle password memorizzate nel file /etc/shadow
file.
Quello che sarebbe l'ideale è uno schema in cui chiunque sul sistema potrebbe lanciare passwd
programma, ma avere il passwd
mantenimento del programma root
Elevati privilegi. Ciò consentirebbe a chiunque di cambiare la propria password.
Lo scenario sopra è esattamente ciò che il bit Set User ID (SUID
). Esegue programmi e comandi con le autorizzazioni del proprietario del file, anziché le autorizzazioni della persona che avvia il programma.
Stai elevando lo stato del programma
C'è un altro dilemma, però. Alla persona deve essere impedito di intromettersi con la password di qualcun altro. Linux incorpora il SUID
schema che gli consente di eseguire applicazioni con una serie di autorizzazioni temporaneamente prese in prestito, ma questa è solo metà della storia della sicurezza.
Il meccanismo di controllo che impedisce a qualcuno di lavorare con la password di un'altra persona è contenuto in passwd
programma, non il sistema operativo e lo schema SUID.
I programmi eseguiti con privilegi elevati possono comportare rischi per la sicurezza se non vengono creati con una mentalità “sicurezza in base alla progettazione”. Ciò significa che la sicurezza è la prima cosa che prendi in considerazione, e poi ci sviluppi. Non scrivere il tuo programma, quindi prova a dargli una protezione in seguito.
Il più grande vantaggio del software open source è che puoi guardare tu stesso il codice sorgente o fare riferimento a revisioni attendibili di esso. Nel codice sorgente per il passwd
programma, ci sono controlli, quindi puoi vedere se la persona che esegue il programma è root
. Diverse capacità sono consentite se qualcuno lo è root
(o qualcuno che utilizza sudo
).
Questo è il codice che rileva se qualcuno lo è root
.
Di seguito è riportato un esempio in cui viene preso in considerazione. Perché root
può cambiare qualsiasi password, il programma non deve preoccuparsi dei controlli che di solito esegue per vedere quali password ha il permesso di cambiare. Così per root
, salta quei controlli ed esce dalla funzione di controllo.
Con i comandi e le utilità principali di Linux, puoi essere sicuro che hanno una sicurezza integrata e che il codice è stato rivisto molte volte. Certo, c'è sempre la minaccia di exploit ancora sconosciuti. Tuttavia, le patch o gli aggiornamenti appaiono rapidamente per contrastare eventuali vulnerabilità appena identificate.
È un software di terze parti, in particolare quello che non è open source, che devi essere estremamente attento all'utilizzo SUID
con. Non stiamo dicendo di non farlo, ma, se lo fai, vuoi assicurarti che non esponga il tuo sistema al rischio. Non vuoi elevare i privilegi di un programma che non si autogovernerà correttamente e la persona che lo esegue.
Comandi Linux che usano SUID
Di seguito sono riportati alcuni dei comandi Linux che utilizzano il bit SUID per fornire al comando privilegi elevati quando eseguito da un utente normale:
ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd
Si noti che i nomi dei file sono evidenziati in rosso, a indicare che il bit SUID è impostato.
Le autorizzazioni su un file o una directory sono generalmente rappresentate da tre gruppi di tre caratteri: rwx. Questi stanno per leggere, scrivere ed eseguire. Se le lettere sono presenti, tale autorizzazione è stata concessa. Se un trattino (-
) invece di una lettera è presente, tuttavia, tale autorizzazione non è stata concessa.
Esistono tre gruppi di queste autorizzazioni (da sinistra a destra): quelli per il proprietario del file, per i membri del gruppo del file e per altri. Quando il SUID
il bit è impostato su un file, una “s” rappresenta l'autorizzazione di esecuzione del proprietario.
Se la SUID
il bit è impostato su un file che non ha capacità eseguibili, una “S” maiuscola indica questo.
Diamo un'occhiata a un esempio. Utente normale dave
digita il passwd
comando:
passwd
Il passwd
prompt dei comandi dave
per la sua nuova password. Possiamo usare il ps
comando per visualizzare i dettagli dei processi in esecuzione.
Useremo ps
con grep
in un'altra finestra del terminale e cercare il passwd
processi. Useremo anche il -e
(ogni processo) e -f
(formato completo) opzioni con ps
.
Digitiamo il seguente comando:
ps -e -f | grep passwd
Sono riportate due righe, la seconda delle quali è la grep
processo alla ricerca di comandi con la stringa “passwd” al loro interno. È la prima linea che ci interessa, però, perché è quella per passwd
processi dave
lanciato.
Possiamo vedere il passwd
il processo funziona come se fosse root
l'aveva lanciato.
Impostazione del bit SUID
È facile cambiare il SUID
po 'con chmod
. Il u+s
la modalità simbolica imposta il SUID
bit e il u-s
la modalità simbolica cancella il SUID
po.
Per illustrare alcuni concetti del bit SUID, abbiamo creato un piccolo programma chiamato htg
. Si trova nella directory principale di dave
utente e non ha il SUID
bit set. Quando viene eseguito, visualizza gli ID utente reali ed effettivi (UID).
Il vero UID appartiene alla persona che ha lanciato il programma. L'ID effettivo è l'account con cui il programma si comporta come se fosse stato avviato.
Digitiamo quanto segue:
ls -lh htg
./htg
Quando eseguiamo la copia locale del programma, vediamo che gli ID reali ed effettivi sono entrambi impostati su dave
. Quindi, si sta comportando proprio come dovrebbe fare un normale programma.
Copiamolo su /usr/local/bin
directory in modo che altri possano usarlo.
Digitiamo quanto segue, utilizzando chmod
per impostare il SUID
bit, quindi controlla che sia stato impostato:
sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg
Quindi, il programma viene copiato e viene impostato il bit SUID. Lo eseguiremo di nuovo, ma questa volta eseguiremo la copia in /usr/local/bin
cartella:
htg
Nonostante dave
avviato il programma, l'ID effettivo è impostato su root
utente. Quindi se mary
avvia il programma, succede la stessa cosa, come mostrato di seguito:
htg
Il vero ID è mary
e l'ID effettivo è root
. Il programma viene eseguito con le autorizzazioni dell'utente root.
RELAZIONATO: Come usare il comando chmod su Linux
Il bit SGID
L'ID gruppo impostato (SGID
) bit è molto simile al SUID
po. Quando il SGID
il bit è impostato su un file eseguibile, il gruppo effettivo è impostato sul gruppo del file. Il processo viene eseguito con le autorizzazioni dei membri del gruppo del file, anziché con le autorizzazioni della persona che lo ha avviato.
Abbiamo modificato il nostro htg
programma in modo che mostri anche il gruppo efficace. Cambieremo il gruppo di htg
programma per essere utente mary
Il gruppo predefinito, mary
. Useremo anche il u-s
e g+s
modalità simboliche con chown
per rimuovere il file SUID
bit e impostare il SGID
.
Per fare ciò, digitiamo quanto segue:
sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg
Puoi vedere il SGID
bit indicato dalla “s” nelle autorizzazioni di gruppo. Inoltre, si noti che il gruppo è impostato su mary
e il nome del file è ora evidenziato in giallo.
Prima di eseguire il programma, stabiliamo quali gruppi dave
e mary
appartiene a. Useremo il id
comando con il -G
(gruppi) opzione, per stampare tutti gli ID di gruppo. Quindi eseguiremo il htg
programma come dave
.
Digitiamo i seguenti comandi:
id -G dave
id -G mary
htg
L'ID del gruppo predefinito per mary
è 1001 e il gruppo effettivo di htg
programma è 1001. Quindi, anche se è stato lanciato da dave
, è in esecuzione con le autorizzazioni dei membri in mary
gruppo. È lo stesso di se dave
si era unito al mary
gruppo.
Applichiamo il SGID
bit in una directory. Innanzitutto, creeremo una directory chiamata “lavoro”, quindi cambieremo il suo gruppo in “geek”. Imposteremo quindi il SGID
bit nella directory.
Quando usiamo ls
per controllare le impostazioni della directory, utilizzeremo anche il -d
(directory) quindi vediamo i dettagli della directory, non i suoi contenuti.
Digitiamo i seguenti comandi:
sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work
Il SGID
bit e gruppo “geek” sono impostati. Ciò influenzerà tutti gli elementi creati all'interno di work
directory.
Digitiamo quanto segue per inserire il work
directory, crea una directory chiamata “demo” e controlla le sue proprietà:
cd work
mkdir demo
ls -lh -d demo
Il SGID
bit e gruppo “geek” vengono automaticamente applicati alla directory “demo”.
Digitiamo quanto segue per creare un file con il touch
comandare e controllare le sue proprietà:
touch useful.sh
ls -lh useful.sh
Il gruppo del nuovo file viene automaticamente impostato su “geek”.
RELAZIONATO: Come usare il comando chown su Linux
The Sticky Bit
La parte adesiva prende il nome dal suo scopo storico. Quando impostato su un eseguibile, ha segnalato al sistema operativo che le parti di testo dell'eseguibile devono essere scambiate, rendendo più veloce il loro riutilizzo. Su Linux, il bit appiccicoso influisce solo su una directory: impostarla su un file non avrebbe senso.
Quando si imposta il bit appiccicoso su una directory, le persone possono eliminare solo i file che appartengono a loro all'interno di quella directory. Non possono eliminare i file che appartengono a qualcun altro, indipendentemente dalla combinazione di autorizzazioni dei file impostata sui file.
Ciò consente di creare una directory che tutti, e i processi che avviano, possono utilizzare come archivio file condiviso. I file sono protetti perché, ancora una volta, nessuno può eliminare i file di qualcun altro.
Creiamo una directory chiamata “condivisa”. Useremo il o+t
modalità simbolica con chmod
per impostare il bit appiccicoso su quella directory. Esamineremo quindi le autorizzazioni per quella directory, oltre che per /tmp
e /var/tmp
le directory.
Digitiamo i seguenti comandi:
mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp
Se il bit sticky è impostato, il bit eseguibile della serie “altro” di autorizzazioni file è impostato su “t”. Anche il nome del file è evidenziato in blu.
Il /tmp
e /var/tmp
le cartelle sono due esempi di directory che hanno tutti i permessi dei file impostati per il proprietario, il gruppo e altri (ecco perché sono evidenziati in verde). Sono utilizzati come posizioni condivise per i file temporanei.
Con tali autorizzazioni, chiunque dovrebbe, teoricamente, essere in grado di fare qualsiasi cosa. Tuttavia, la parte adesiva li sovrascrive e nessuno può eliminare un file che non gli appartiene.
promemoria
Di seguito è un breve elenco di controllo di ciò che abbiamo coperto sopra per riferimento futuro:
-
SUID
Funziona solo su file. - Puoi candidarti
SGID
a directory e file. - È possibile applicare solo la parte adesiva alle directory.
- Se la “
s
“,“g
“, o “t
“Gli indicatori appaiono in maiuscolo, il bit eseguibile (x
) non è stato impostato.