PDA

Visualizza la versione completa : Permessi ei file unix [c]


PeppePes88
17-02-2009, 17:50
Ciao, Devo preparare un esame sui sistemi operativi, in particolare su unix e Freebsd!!

Nel mio libro c'è una cosa che non sono riuscito a capire : come fa il programma passwd a modificare le password del utente che lo chiama, senza chiedere i diritti di root, in quanto il programma modifica il file shadow che è di proprietà di root e soprattutto solo root hai i diritti di lettura e scrittura su questo file, se si prova ad aprirlo normalmente ovviamente si ha un errore di permessi non sufficienti...
Quello che ha me non è chiaro è come una funzione con diritti di utente possa superare la barriera dei permessi e modificare il file???

Forse si prendono i diritti di root, tramite la setuid , ma anche questa funzione per settare l'uid a zero a bisogno dei diritti di root!!! Cosi si formerebbe un circolo vizioso... Di cui io non riesco a vedere al fine... Ma ci deve essere un modo sensato e sicuro per fare quello che fa passwd!! Ho provato a scaricare i sorgenti ma non sono riuscito a capirli...

Mi sapete aiutare??? L'eame mi piace molto è per questo che cerco di scendere nei dettagli....

Si spera di prendere un buon voto....
:D :D :D :D :D :D :D :D

Grazie in anticipo per il vostro interesse..

PeppePes88
17-02-2009, 18:02
Rispondo al ragazzo che mi ha risposto nel post sbagliato :

Ma io posso settare a un mio programma il bit setuid e in questo modo anche questo viene eseguito sempre con i diritti di root ??

Perché ho provato ma anche con il bit setuid questo non riesce ad aprire i file di root...

MItaly
17-02-2009, 18:31
Il bit setuid fa sì che il programma venga sempre eseguito con i permessi dell'utente proprietario. Tuttavia solo utenti privilegiati possono cambiare il proprietario di un file, e se non sono superuser i bit setuid e setgid vengono automaticamente disattivati.


Estratto da man 2 chown
Only a privileged process (Linux: one with the CAP_CHOWN capability)
may change the owner of a file. The owner of a file may change the
group of the file to any group of which that owner is a member. A
privileged process (Linux: with CAP_CHOWN) may change the group arbi‐
trarily.

If the owner or group is specified as -1, then that ID is not changed.

When the owner or group of an executable file are changed by a non-
superuser, the S_ISUID and S_ISGID mode bits are cleared. POSIX does
not specify whether this also should happen when root does the chown();
the Linux behavior depends on the kernel version. In case of a non-
group-executable file (i.e., one for which the S_IXGRP bit is not set)
the S_ISGID bit indicates mandatory locking, and is not cleared by a
chown().

Ovviamente un utente non privilegiato non può attivare i bit setuid e setgid di un file che ha come proprietario root, poiché i permessi possono essere cambiati solo dal proprietario del file.


Estratto da man 2 chmod
The effective UID of the calling process must match the owner of the
file, or the process must be privileged (Linux: it must have the
CAP_FOWNER capability).

Loading