Gli account utente su sistemi unix sono identificati da un UID (user ID).
Un processo può essere associato a più di un UID. I due principali sono il "vero UID" che identifica chi possiede il processo e l'"UID utente efficace" che identifica quali permessi dell'utente il processo attualmente funziona sotto *.
"setuid" in questo contesto si riferisce a un bit di autorizzazione file (è anche il nome di una chiamata di sistema correlata). Quando è impostato su un file eseguibile e quel file viene eseguito, l'"UID efficace" viene modificato nel proprietario del file. Ciò significa che il programma viene eseguito con le autorizzazioni del proprietario piuttosto che le autorizzazioni dell'utente che lo ha eseguito.
Quando diciamo che un file eseguibile "è setuid root", allora intendiamo che ha il setuid bit impostato ed è di proprietà dell'utente 0 (root). Quindi verrà eseguito con un UID efficace pari a 0 e in pratica può fare tutto ciò che desidera.
Il "vero UID" rimane lo stesso, quindi il programma può identificare l'utente che lo ha eseguito e può tornare a quell'utente se lo desidera.
I programmi setuid sono / erano una parte importante dei sistemi Unix che consentono di esporre la funzionalità agli utenti in cui la funzione nel suo complesso è considerata sicura per l'utente da utilizzare, ma i blocchi di base utilizzati per implementare tali funzioni non lo sono.
Tuttavia sono anche rischiosi, un piccolo errore in un programma setuid può facilmente esporre più di quanto si pensasse di essere esposto. Diverse funzionalità correlate al debug sono inoltre disabilitate per i programmi setuid per impedire che vengano utilizzate per aggirare le restrizioni.
Negli ultimi tempi, i sistemi Linux hanno sostituito alcuni usi di "setuid" con un nuovo meccanismo chiamato "capacità" che consente un'assegnazione di privilegi speciali ai programmi più dettagliata.
* Ci sono anche potenzialmente altri, ma non sono immediatamente relavent qui, vedi link per ulteriori dettagli.