Setuido
Setuid e Setgid sono termini Unix , abbreviazioni rispettivamente di "Imposta ID utente" e "Imposta ID gruppo". Setuid, talvolta chiamato anche "suid" e "setgid" sono permessi di accesso che possono essere assegnati a file o directory in un sistema operativo basato su Unix . Sono utilizzati principalmente per consentire agli utenti del sistema di eseguire temporaneamente file binari con privilegi elevati per eseguire un'attività specifica.
Se un file ha il bit "Setuid" attivato, viene identificato con una "s" in un elenco come segue:
-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd
Questa proprietà è necessaria affinché gli utenti normali possano eseguire attività che richiedono privilegi più elevati rispetto a quelli disponibili per un utente normale. Alcune attività che richiedono privilegi elevati potrebbero non essere ovvie (ad esempio, il comando ping , che deve inviare e ascoltare i pacchetti di controllo su un'interfaccia di rete).
Setuid negli eseguibili
Normalmente questo bit è impostato sugli eseguibili. Quando a un eseguibile binario viene assegnato l'attributo setuid, i normali utenti del sistema possono eseguire quel file e ottenere privilegi dall'utente che possiede quel file (di solito root ) sul processo creato . Quando il processo ottiene i privilegi di amministratore, l'applicazione può eseguire attività sul sistema che gli utenti normali non sarebbero normalmente in grado di eseguire. Il sistema impedirà all'utente che ha invocato l'eseguibile di alterare il nuovo processo in qualsiasi modo, ad esempio utilizzando ptrace, LD_LIBRARY_PATH o inviando segnali ad esso (saranno accettati segnali dal terminale stesso).
Ad esempio, il bit setuid viene utilizzato nel file /usr/bin/passwd in modo che tutti possano modificare la propria password in modo controllato. Essere in grado di eseguire questo programma consente a un utente di scrivere nel file della password (/etc/shadow, da non confondere con /etc/passwd) ma senza dover concedere autorizzazioni di scrittura al file, il che sarebbe un grosso buco di sicurezza.
Sebbene la funzione setuid sia molto utile in molti casi, può rappresentare un rischio per la sicurezza se l'attributo setuid viene assegnato a programmi eseguibili che non sono stati progettati accuratamente. Gli utenti possono sfruttare le vulnerabilità nei programmi con bug per ottenere in modo permanente privilegi elevati o eseguire involontariamente un cavallo di Troia .
L'attributo setgid consentirà di modificare i privilegi basati sul gruppo su un processo, nello stesso modo in cui setuid fa per i privilegi basati sull'utente.
Setuid nelle directory
Il flag setgid su una directory ha un significato completamente diverso dalla sua applicazione sui file. Le directory con autorizzazione setgid obbligano tutti i file e le sottodirectory creati in esse ad appartenere al gruppo del proprietario della directory e non al gruppo dell'utente che crea il file o la sottodirectory.
Il flag setuid, invece, non ha effetto se applicato a una directory. Il motivo è che se dovessi propagare il proprietario della directory agli oggetti creati all'interno di quella directory, l'utente che crea un file lì perderebbe immediatamente i permessi di proprietario sul file, forse impedendogli di usarlo o modificarlo mai più .
Esempi
Aggiungi le autorizzazioni SUID a un binario di esempio (utente)
# chmod u+s /home/utente/eseguibile
Rimuovere le autorizzazioni SUID a un binario (utente)
# chmod us /bin/ping
Aggiungi autorizzazioni GUID a un binario di esempio (gruppo)
# chmod g+s /home/utente/eseguibile
Rimuovere le autorizzazioni GUID per un binario di esempio (gruppo)
# chmod gs /home/utente/eseguibile
Visualizzazione delle autorizzazioni di un binario con attributi SUID
# ls -al /bin/ping
-rwsr-xr-x 1 radice radice 35712 2011 -05-03 12 :43 /bin/ping
Trova tutti i file con autorizzazioni SUID o SGID
# trova / -percorso /proc -prune -o -tipo f -perm +6000 -ls
Trova tutti i file con autorizzazioni solo SUID
# trova / -percorso /proc -prune -o -tipo f -perm +4000 -ls
Trova tutti i file con autorizzazioni solo SGID
# trova / -percorso /proc -prune -o -tipo f -perm +2000 -ls
Esempi di utilizzo
SUID
4711 autorizzazioni su un file eseguibile di proprietà di root .
Un utente chiamato Tal dei tali tenta di eseguire il file. Le autorizzazioni per il file eseguibile sono impostate su tutti gli utenti con autorizzazione di esecuzione (471 1 ), quindi così e così possono eseguire il file. Il proprietario del file è root e l'autorizzazione SUID è impostata ( 4 711), quindi il file viene eseguito come root .
In questo modo il file viene eseguito come root , il che significa che il tal dei tali può modificare altri file che normalmente non può senza concedere così i privilegi completi. Questo è usato nel file binario /usr/bin/passwd. passwdè necessario modificare il file /etc/passwdy /etc/shadowche memorizza rispettivamente le informazioni sull'account utente e gli hash delle password, ma questi file possono essere modificati solo da root .
[ tale @ host ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ tal dei tali @ host ~ ] $ passwd
Modifica della password per il tal dei tali.
GUIDA
2071 una directory chiamata "piante" che ha "sultan" come gruppo proprietario e "root" come utente proprietario.
Un utente chiamato "così e così" appartiene principalmente al gruppo "così e così" e secondariamente al gruppo "sultano". "così e così" crea una nuova directory chiamata "mango" all'interno della directory "piante". Il gruppo che possiede la nuova directory denominata "mango" eredita "sultano".
Senza GUID il gruppo proprietario sarebbe stato "così e così".
[ così e così @ host ~ ] $ gruppi così
e così così e così : così e così sultano
[ tal dei tali @ host ~ ] $ stat -c "%a %U:%G %n" ~/piante/
2770 tal dei tali:sultan /casa/tal dei tali/piante/
[ tale @ host ~ ] $ mkdir ~/plants/mango
[ tale @ host ~ ] $ touch ~/plants/.mango
[ così e così @ host ~ ] $ stat -c "%U:%G %n" ~/piante/mango/
così e così :sultano /casa/così-dei-così/piante/mango/
[ così e così @ host ~ ] $ stat -c "%U:%G %n" ~/plants/.mango
così e così:sultan /home/così e così/piante/.mango
[ tale @ host ~ ] $ test tattile
[ così e così @ host ~ ] $ stat -c "%U:%G %n" ~/test
così e così:così-e-così /home/così-così/test