Proverò a spiegare passo passo con alcuni esempi.
Breve sfondo
Ogni processo ha le sue 'credenziali di processo', che comprende attributi come PID, i PPID, PGID, session IDe anche gli ID utente e di gruppo reali ed efficaci:
RUID, EUID, RGID, EGID.
Ci concentreremo su quelli.
Parte 1: comprendere UID e GID
Ora accedo a una shell con le mie credenziali ed eseguo:
$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash
Puoi vedere il mio nome di registro (rotem), l' UID e il GID che sono entrambi 1000 e altri dettagli come la shell a cui ho effettuato l'accesso.
Parte 2: comprendere RUID e RGID
Ogni processo ha un proprietario e appartiene a un gruppo .
Nella nostra shell, ogni processo che ora eseguiremo erediterà i privilegi del mio account utente e verrà eseguito con lo stesso UID e GID.
Eseguiamo un semplice comando per verificarlo:
$ sleep 10 & ps aux | grep 'sleep'
E controlla l'UID e il GID del processo:
$ stat -c "%u %g" /proc/$pid/
1000 1000
Questi sono l' ID utente reale ( ) e l' ID gruppo reale ( ) del processo .RUIDRGID
(*) Controlla altre opzioni per visualizzare l'UID e GID e i modi per ottenerlo in una riga .
Per ora, accetta il fatto che gli attributi EUIDe EGIDsono "ridondanti" e sono semplicemente uguali RUIDe RGIDdietro le quinte.
Parte 3: comprendere EUID e EGID
Prendiamo il pingcomando come esempio.
Cerca la posizione binaria con il whichcomando quindi esegui ls -la:
-rwsr-xr-x 1 root root 64424 Mar 10 2017 ping
Puoi vedere che il proprietario e il gruppo del file sono root. Questo perché il pingcomando deve aprire un socket e il kernel Linux richiede i rootprivilegi per questo.
Ma come posso utilizzare pingse non ho i rootprivilegi?
Notare la lettera "s" invece di "x" nella parte del proprietario dell'autorizzazione del file.
Questo è un bit di autorizzazione speciale per file eseguibili binari specifici (come pinge sudo) noto come setuid .
Qui è dove EUIDed EGIDentra in gioco.
Quello che succederà è quando viene eseguito un binario setuidping , il processo cambia il suo ID utente effettivo ( EUID) da quello predefinito RUIDal proprietario di questo file eseguibile binario speciale che in questo caso è -root .
Tutto questo è fatto dal semplice fatto che questo file ha il setuidbit.
Il kernel decide se questo processo ha il privilegio esaminando la EUIDparte del processo. Perché ora il EUIDpunto root, l'operazione non verrà rifiutata dal kernel.
Avviso : sulle ultime versioni di Linux, l'output del pingcomando avrà un aspetto diverso a causa del fatto che hanno adottato l' approccio delle funzionalità Linux invece di questo approccio setuid - per coloro che non hanno familiarità - leggi qui .
Parte 4: che dire di SUID e SGID?
L'ID utente salvato ( SUID) viene utilizzato quando un processo privilegiato è in esecuzione (come rootad esempio) e deve eseguire alcune attività non privilegiate.
In tal caso, l'UID ( EUID) effettivo di prima verrà salvato all'interno SUIDe quindi modificato in un'attività non privilegiata. Quando l'attività senza privilegi sarà completata, EUIDverrà preso dal valore di SUIDe tornerà all'account privilegiato.