Viele andere ausgezeichnete Antworten hier, aber wenn Sie immer noch verwirrt sind wie ich, hier ist ein anderer Ansatz. Bitte beachte, dass ich nur ein Schüler dieses Stoffes bin, kein Meister , daher ist diese Antwort noch in Arbeit und nicht als solide Antwort zu betrachten, zumindest noch nicht. Betrachten Sie diese Antwort v0.2.
Gruppen sind einfach und komplex zugleich.
Schlüssel zu den unten verwendeten IDs:
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.
Benutzer- und Gruppen-ID-Namen:
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
...
Wie Prozesse IDs erhalten:
1) Login authentifiziert den Benutzernamen und kehrt zurück LuID
und LgID
von /etc/passwd
.
2) Der erste Prozess richtet effektiv = real = login ein, dh
EuID=RuID=LuID
EgID=RgID=LgID
3) Gespaltene Kinder vererben RuID
, EuID
, RgID
, und EgID
, (& möglicherweise gerettet & supp), jedoch
Wenn in der Datei des neuen Programms, das ausgeführt werden soll, das (die) s U ID-Bit ( s U ID-Bit ( s U ID-Bit) gesetzt ist (sind), wird dies ab Datei wirksam:
EuID = FuID
Wenn das s g id-Bit ( s g id-Bit) in der Datei des auszuführenden neuen Programms gesetzt ist, wird es ab Datei wirksam gesetzt:
EgID = FgID
Hinweis: Die suid- und nosuid- Mount-Optionen des zugrunde liegenden Dateisystems gelten ebenfalls.
4a) Wenn s u id wurde verwendet , um eingestellte EuID
, dann EuID
kann vorübergehend geändert werden (zB von der Wurzel degradiert), aber es ist erster ursprünglicher Wert in gespeichert wird , OuID
so kann er später gestellt werden , falls gewünscht.
4b) Wurde für die Einstellung s g id verwendetEgID
, EgID
kann dies vorübergehend geändert werden (z. B. ein Downgrade von root), aber zuerst wird der ursprüngliche Wert gespeichert, OgID
damit er bei Bedarf später wiederhergestellt werden kann.
Wenn eine Datei erstellt werden soll:
File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)
Zum Lesen öffnen:
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.
Zum Schreiben öffnen:
(Same as above but write bit set to allow writing.)
Zur Ausführung öffnen:
(Same as above but execute bit set to allow execution.)
Wenn eine Nachricht gesendet werden muss:
Use RuID and RgID. (Not EuID or EgID). *(Not sure where I read this.)*
Referenzen: Mannausweise
Extra: Hier ist ein Hilfsprogramm, um Ihre / etc / group-Datei hübsch zu drucken:
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 }'