Molte altre eccellenti risposte qui, ma se sei ancora confuso com'ero, ecco un altro approccio. Si prega di notare che sono solo uno studente di queste cose, non un maestro , quindi questa risposta è un lavoro in corso e non deve essere considerata una risposta solida, almeno non ancora. Considera questa risposta v0.2.
I gruppi sono semplici e complessi allo stesso tempo.
Chiave per gli ID utilizzati di seguito:
KEY Full name -------- Description---------------------------------------------
u User uID = User ID (a unique # associated with each user)
g Group gID = Group ID (a unique # associated with each group)
While each /etc/passwd entry has one uID and one gID,
additional gIDs can be associated with a users via
/etc/group.
L Login IDs - uID and gID produced from the Login process.
('L' is not exactly standard Linux terminology, but
useful for explanations below.)
F File IDs - uID and gID retrieved from a file's ownership.
('F' is not exactly standard Linux terminology, but
useful for explanations below.)
R Real IDs - Who actually runs a process
E Effective IDs - Who spoofed via setuid or setgid, runs a process
O Original Eff. IDs - Place to save the original Effective ID when changing
it (e.g. temporarily downgrading it) so can later
restore it. Also called "Saved ID"; (but 'S' was not
used for here to help avoid confusion with the 'S' in
'SetUserID' & SetGroupID.)
+ Supplimentary gIDs - Optional, additional groups (none or more) running
this process which can be used to test for permissions.
Nomi ID utente e gruppo:
Category USER GROUP Notes
----------------- ---- ----- -------------------------------------------
From login: LuID LgID From /etc/passwd lookup
From files: FuID FgID Each file has these. Set by creator process.
For each running process:
Real RuID RgID Actual user starting the program
Effective EuID EgID Assigned user starting the program*
Saved OuID OgID Saves original effective ID.
Supplementary +gID1 (optional, additional groups)
+gID2
...
Come i processi acquisiscono gli ID:
1) Login autentica username e ritorna LuID
e LgID
da /etc/passwd
.
2) Il primo processo imposta efficace = reale = login, cioè
EuID=RuID=LuID
EgID=RgID=LgID
3) i bambini a forcella ereditare RuID
, EuID
, RgID
, e EgID
, (e forse salvato e supp), tuttavia,
Se i bit dell'id u sono impostati sul file del nuovo programma da eseguire, impostare in modo efficace dal file:
EUID = fuid
Se i bit di s g id sono impostati sul file del nuovo programma da eseguire, impostare in modo efficace dal file:
Egid = FGID
Nota: si applicano anche le opzioni di montaggio suid e nosuid del filesystem sottostante .
4a) Se è stato usato s u id per impostarlo EuID
, EuID
può essere temporaneamente modificato (ad es. Declassato da root), ma prima viene salvato il suo valore originale in OuID
modo da poterlo ripristinare in seguito, se lo si desidera.
4b) Se è stato usato s g id per impostarlo EgID
, EgID
può essere temporaneamente modificato (ad es. Declassato da root), ma prima viene salvato il suo valore originale in OgID
modo da poterlo ripristinare in seguito, se lo si desidera.
Quando si deve creare un file:
File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)
Per aprire per la lettura:
If FuID = EuID and user-read bit is set, or
If FgID = EgID and group-read bit is set, or
If FgID = +gID1 and group-read bit is set, or
If FgID = +gID2 and group-read bit is set, ...
then allow reading.
Per aprire per la scrittura:
(Same as above but write bit set to allow writing.)
Per aprire per l'esecuzione:
(Same as above but execute bit set to allow execution.)
Quando è necessario inviare un messaggio:
Use RuID and RgID. (Not EuID or EgID). *(Not sure where I read this.)*
Riferimenti: credenziali uomo
Extra: ecco un'utilità per stampare in modo grazioso il tuo file / etc / group:
cat /etc/group | sort -t: -k3n | awk -F ':' \
'BEGIN{printf "\n%-20s %-3s %-8s %s", \
"Group name","pw", "Group ID ", "User list"}\
BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
"----------","--", "---------", "---------"} \
{ printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'