Beaucoup d'autres excellentes réponses ici, mais si vous êtes toujours aussi confus que moi, voici une autre approche. Veuillez noter que je ne suis qu'un étudiant de ce genre de choses, pas un maître , donc cette réponse est un travail en cours et ne doit pas être considérée comme une réponse solide, du moins pas encore. Considérez cette réponse v0.2.
Les groupes sont simples et complexes à la fois.
Clé des identifiants utilisés ci-dessous:
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.
Noms d'ID utilisateur et groupe:
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
...
Comment les processus acquièrent les ID:
1) La connexion authentifie le nom d'utilisateur et renvoie LuID
et LgID
de /etc/passwd
.
2) Le premier processus met en place effective = real = login, c'est-à-dire
EuID=RuID=LuID
EgID=RgID=LgID
3) les enfants fourchus Hériter RuID
, EuID
, RgID
et EgID
, (et peut - être sauvé et supp), cependant,
Si le ou les bits s u id sont définis dans le fichier du nouveau programme à exécuter, définissez-les à partir du fichier:
EuID = FuID
Si le ou les bits s g id sont définis dans le fichier du nouveau programme à exécuter, définissez-les à partir du fichier:
EgID = FgID
Remarque: Les options de montage suid et nosuid du système de fichiers sous-jacent s'appliquent également.
4a) Si s u id a été utilisé pour le définir EuID
, il EuID
peut être temporairement modifié (par exemple rétrogradé de la racine), mais d'abord sa valeur d'origine est enregistrée OuID
afin de pouvoir être restaurée plus tard si vous le souhaitez.
4b) Si s g id a été utilisé pour définir EgID
, il EgID
peut être temporairement modifié (par exemple rétrogradé de la racine), mais d'abord sa valeur d'origine est enregistrée OgID
afin qu'elle puisse être restaurée plus tard si vous le souhaitez.
Lorsqu'un fichier doit être créé:
File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)
Pour ouvrir en lecture:
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.
Pour ouvrir en écriture:
(Same as above but write bit set to allow writing.)
Pour ouvrir pour exécution:
(Same as above but execute bit set to allow execution.)
Lorsqu'un message doit être envoyé:
Use RuID and RgID. (Not EuID or EgID). *(Not sure where I read this.)*
Références: informations d'identification de l'homme
Extra: Voici un utilitaire pour imprimer joliment votre fichier / 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 }'