Newsgroup: it.comp.os.linux.development
Titolo: Effettive userid e real....

Ragazzi che differenza c'e' tra effettive userid e real userid?
jk

 Ragazzi che differenza c'e' tra effettive userid e real userid?
In breve, il secondo è semplicemente l'UID di chi ha lanciato il processo, e 
il primo è quello che determina i diritti di accesso ai file.
Nella maggior parte dei casi i due ID sono uguali. Quando lanci un processo, 
il suo effective UID viene posto uguale al suo real UID (che è il tuo UID), 
perciò il processo può leggere/scrivere i file sui quali tu hai i diritti di 
accesso.
La funzione di libreria 'setuid(uid_t uid)' serve a modificare l'effective UID 
del processo che la invoca, e quindi i suoi privilegi di lettura/scrittura 
file. Questo può essere vantaggioso in due casi:
- per permettere a un programma lanciato dall'utente X l'accesso a file
   per i quali X non avrebbe le permissions adeguate;
- per _ridurre_ i privilegi di processi lanciati da root (tipicamente
   demoni) in modo da minimizzare gli effetti di bug e/o exploits.
Naturalmente, per evitare abusi, la possibilità di chiamare setuid() è 
normalmente ristretta ai soli processi privilegiati (=root) - con una 
significativa eccezione: i processi cui è associato un "file user ID", anche 
se non sono lanciati da root, possono invocare setuid() per porre il proprio 
effective UID uguale al real UID o al file UID.
Cos'è il "file user ID"? È l'ID dell'owner dell'eseguibile, per gli eseguibili 
che hanno settato un particolare bit degli attributi (chiamato appunto "setuid 
bit"). Una volta lanciato un programma di questo tipo, l'effective UID del 
processo viene automaticamente posto uguale all'ID dell'owner del file.
Prendiamo il caso del comando vintage "uucp":
astrid:~> ls -l /usr/bin/uucp
-r-sr-xr-x   1 uucp     uucp        92852 Mar 22  1999 /usr/bin/uucp*
    ^
  setuid bit set
L'owner del file è uucp e il setuid bit è a 1. Quando l'utente non 
privilegiato "joe" lancia questo programma, il processo che ne risulta avrà 
joe come real user ID e uucp come effective user ID; in questo modo potrà 
accedere a file normalmente preclusi a joe ma disponibili all'utente uucp, 
come ad esempio i device seriali.
Essendo l'eseguibile setuiddato, questo processo avrà anche la prerogativa di 
poter invocare la funzione setuid() per impostare l'effective user ID a joe o 
a uucp (non sono ammessi altri valori). Il cambio di effective ID può avvenire 
un numero illimitato di volte.
Ciao
  David
-- 
<d.santinoli presso mi. flashnet. it>

 proprio effective UID uguale al real UID o al file UID.
Non e` proprio cosi'. Qualunque processo puo` chiamare setuid(). Solo che 
se ha i privilegi di root (cioe` effective UID =0)  la funzione imposta 
tutti gli UID del processo (effective, real, e saved, di cui non avete 
parlato) al valore specificato. Se invece la lancia un processo normale 
viene impostato solo l'effective UID, e la funzione non da` errore solo se 
il valore specificato corrisponde o al real UID o al saved UID.
Il che comporta che un processo normale, per il quale tutti gli UID sono 
uguali non puo` cambiare nulla. Se invece e` suid, nel qual caso effective 
e saved sono diversi dal real, e` possibile rilasciare i privilegi (usando 
il valore del real) e tornare indietro (usando il valore del saved), ma 
questo vale solo se non sei root.
Questo in Linux. In BSD e` diverso.
Ciao
-- 
As.| Simone Piccardi - KeyID:2A972F9D - 
JabberID:sim...@jabber.linux.it
 
So.| 
http://firenze.linux.it/~piccardi
  -  
http://www.softwarelibero.it
 
Li.| Prima ti ignorano, poi ti deridono, poi ti combattono.  Poi vinci. 
                                                           M. K. Ghandi