Ogni processo in un sistema UNIX-like, proprio come ogni file, ha un proprietario (l'utente, sia reale o un sistema di "pseudo-utente", come ad esempio daemon
, bin
, man
, ecc) e proprietario di un gruppo. Il proprietario del gruppo per i file di un utente è in genere il gruppo principale dell'utente e, in modo simile, tutti i processi avviati sono in genere di proprietà dell'ID utente e dell'ID del gruppo primario.
A volte, tuttavia, è necessario disporre di privilegi elevati per eseguire determinati comandi, ma non è desiderabile fornire diritti amministrativi completi. Ad esempio, il passwd
comando deve accedere al file della password shadow del sistema, in modo che possa aggiornare la password. Ovviamente, non vuoi dare a tutti gli utenti i privilegi di root, solo per poter reimpostare la loro password - questo indubbiamente porterebbe al caos! Invece, deve esserci un altro modo per concedere temporaneamente privilegi elevati agli utenti per eseguire determinate attività. Ecco a cosa servono i bit SETUID e SETGID. È un modo per dire al kernel di aumentare temporaneamente i privilegi dell'utente, per la durata dell'esecuzione del comando contrassegnato. Un binario SETUID verrà eseguito con i privilegi del proprietario del file eseguibile (di solitoroot
) e un binario SETGID verrà eseguito con i privilegi di gruppo del proprietario del gruppo del file eseguibile. Nel caso del passwd
comando, che appartiene a root
ed è SETUID, consente agli utenti normali di influenzare direttamente il contenuto del file di password, in modo controllato e prevedibile, eseguendo con i privilegi di root. Ci sono numerosi altri SETUID
comandi UNIX-like sistemi ( chsh
, screen
, ping
, su
, ecc), i quali richiedono privilegi elevati per funzionare correttamente. Esistono anche alcuni SETGID
programmi, in cui il kernel modifica temporaneamente il GID del processo, per consentire l'accesso ai file di log, ecc. sendmail
È una tale utilità.
Lo sticky bit
ha uno scopo leggermente diverso. Il suo uso più comune è garantire che solo l'account utente che ha creato un file possa eliminarlo. Pensa alla /tmp
directory. Ha autorizzazioni molto liberali, che consentono a chiunque di creare file lì. Questo è un bene, e permette processi agli utenti di creare i file temporanei ( screen
, ssh
, ecc, mantenere le informazioni di stato a /tmp
). Per proteggere i file temporanei di un utente, /tmp
è impostato il bit appiccicoso, in modo che solo io possa eliminare i miei file e solo tu puoi eliminare i tuoi. Ovviamente, root può fare qualsiasi cosa, ma dobbiamo sperare che l'amministratore di sistema non sia squilibrato!
Per i file normali (vale a dire per i file non eseguibili), è poco utile impostare i bit SETUID / SETGID. SETGID su directory su alcuni sistemi controlla il proprietario del gruppo predefinito per i nuovi file creati in quella directory.