Ad ogni processo UNIX sono associati 3 UID. Il privilegio di superutente è UID=0.
UID reale
Questo è l'UID dell'utente/processo che ha creato QUESTO processo. Può essere modificato solo se il processo in esecuzione ha EUID=0.
UID effettivo
Questo UID viene utilizzato per valutare i privilegi del processo per eseguire una particolare azione. L'EUID può essere modificato in RUID o SUID se EUID!=0. Se EUID=0, può essere modificato in qualsiasi cosa.
UID salvato
Se esegui un eseguibile con il bit set-UID impostato, il processo in esecuzione risultante inizierà con un UID reale dell'utente reale che lo esegue e un UID effettivo e salvato del proprietario del file eseguibile. Se poi il processo chiama setuid() o seteuid() per cambiare il loro UID effettivo, possono comunque recuperare nuovamente i loro privilegi originali grazie all'UID salvato. Se il bit set-UID non è impostato, SUID sarà il RUID.
Il vero uid è l'id dell'utente che ha lanciato un processo.
L'effettivo uid tipicamente è lo stesso dell'effettivo uid. È diverso solo se:
-
l'eseguibile aveva il bit set-uid impostato e il proprietario dell'eseguibile è diverso dall'utente che lo ha chiamato
-
o se un processo set-uid chiama setuid(2). Se il processo ha privilegi di superutente, qualsiasi argomento per setuid(2) è consentito (ma poi tutti gli *-uid vengono impostati sullo stesso valore); altrimenti, setuid(2) può essere chiamato con il real-uid o l'effettivo-uid o il salvato-uid.
L'uid salvato è l'uid effettivo che il processo aveva quando è stato avviato, ed è salvato per essere consentito come argomento alle varie chiamate di sistema set*uid.
Nota che un processo con privilegio di superutente che chiama setuid(2) per modificare il suo uid effettivo avrà anche l'uid reale e l'uid salvato modificati allo stesso valore, quindi al suo posto dovrebbe essere utilizzato seteuid(2) non POSIX.
Tutto quanto sopra si applica anche agli ID di gruppo (reali|efficaci|salvati).
Oltre agli UID reali, effettivi e salvati, i sistemi Unix con l'auditing abilitato hanno anche l'audit UID. L'AUID di un processo identifica l'utente che ha avviato il processo; non viene modificato da setuid(2) o seteuid(2). L'intento è che rimanga costante durante tutto il processo e venga utilizzato solo per contrassegnare i record di controllo. Pertanto, se un utente esegue una shell privilegiata (anche un utente autorizzato tramite su o sudo), i record di audit di quel processo vengono contrassegnati da quell'utente.