Per capire come differiscono os.getuid
e os.geteuid
, non si tratta di funzioni specifiche di Python (oltre al prefisso del modulo os
). Queste funzioni includono le chiamate di sistema getuid
e geteuid
fornite essenzialmente da tutti i sistemi operativi di tipo Unix.
Quindi, piuttosto che esaminare i documenti Python (che probabilmente non forniscono molti dettagli), dovresti esaminare i documenti per il tuo sistema operativo. Here è la documentazione pertinente per Linux, ad esempio. Wikipedia ha anche un buon article on Unix User IDs.
La differenza tra l'UID normale e l'UID effettivo è che solo l'EUID viene controllato quando si esegue un'operazione che richiede un accesso speciale (come la lettura o la scrittura di un file o l'esecuzione di determinate chiamate di sistema). L'UID indica l'utente effettivo che sta eseguendo l'azione, ma è (di solito) non considerato quando esamina le autorizzazioni. Nei programmi normali saranno uguali. Alcuni programmi modificano il loro EUID per aggiungere o sottrarre dalle azioni che sono autorizzati a prendere. Un numero più piccolo cambia anche il loro UID, per "diventare" effettivamente un altro utente.
Ecco un esempio di un programma che modifica il suo EUID: il programma passwd
(che viene utilizzato per modificare la password) deve scrivere nel file di password del sistema, che è di proprietà dell'utente root. Gli utenti normali non possono scrivere su quel file, poiché se potessero, potrebbero cambiare anche la password di tutti gli altri. Per risolvere questo problema, il programma passwd
ha un bit impostato nelle sue autorizzazioni file (noto come setuid bit
) che indica al sistema operativo che deve essere eseguito con l'EUID del proprietario del programma (ad esempio root
) anche quando viene lanciato da un altro utente . Il programma passwd
vedrebbe quindi il suo UID
come utente di avvio e il suo EUID come root. La scrittura nel file di password di sistema richiede che l'EUID sia privilegiato. L'UID è anche utile, dal momento che passwd
ha bisogno di sapere per quale utente sta cambiando la password.
Ci sono alcuni altri casi in cui l'UID e l'EUID non corrispondono, ma non sono troppo comuni. Ad esempio, un file server in esecuzione come super user potrebbe cambiare il suo EUID in modo che corrisponda a un utente specifico che richiede alcune manipolazioni di file. L'utilizzo dell'EUID dell'utente consente al server di evitare l'accesso a cose che l'utente non è autorizzato a toccare.
Non sono gli stessi nei programmi setuid (e potrebbero essere diversi per qualsiasi programma in esecuzione come root e chiamare seteuid in modo esplicito). Ciò significa che * sono * gli stessi all'avvio dello script. –