Come usare SUID, SGID e Sticky Bits su Linux

Una finestra terminale su un sistema Linux.
Fatmawati Achmad Zaenuri / Shutterstock

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 rootLe 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 rootElevati 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.

Un frammento di codice sorgente da "passwd.c"

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.

Un frammento di codice sorgente da "passwd.c."

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

Un elenco di comandi Linux con il bit SUID impostato in una finestra terminale.

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 comando "passwd" in una finestra del terminale.

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

Il comando "ps -e -f | grep passwd" in una finestra di terminale.

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

I comandi "ls -lh htg" e "./htg" in una finestra del terminale.

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

I comandi "sudo cp htg", "/ usr / local / bin sudo chmod u + s / usr / local / bin / htg" e "ls -hl / usr / local / bin / htg" in una finestra terminale.

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

Il programma "htg" in esecuzione in una finestra di terminale.

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 programma "htg" lanciato dall'utente "mary" in una finestra di terminale.

Il vero ID è marye 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 maryIl 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

I comandi "sudo chown root: mary / usr / local / bin / htg", "sudo chmod us, g + s / usr / local / bin / htg" e "ls -lh / usr / local / bin / htg" in una finestra terminale.

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

I comandi "id -G dave", "id -G mary" e "htg" in una finestra terminale.

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

I comandi "sudo mkdir work", "sudo chown dave: geek work", "sudo chmod g + s work" e "ls -lh -d work" in una finestra terminale.

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

I comandi "cd work", "mkdir demo" e "ls -lh -d demo cd work" in una finestra del terminale.

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

I comandi "touch utili.sh" e "ls -lh utile.sh" in una finestra del terminale.

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

I comandi "mkdir shared", "sudo chmod o + t shared", "ls -lh -d shared," ls -lh -d / tmp ls "e" -lh -d / var / tmp "in una finestra terminale .

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.

Articoli correlati

Ultimi articoli