Les liens suivants présentent ces concepts dans différents contextes. J'ai lu leurs définitions, mais je ne sais toujours pas comment elles sont liées, ou si certaines d'entre elles sont identiques.
- ID de groupe actuel
- ID de groupe
- ID de groupe principal et supplémentaire
- ID de groupe efficaces et réels (également sur Wikipedia )
Voici un exemple de la source de ma confusion:
Selon man id
, si je tape id
, je devrais obtenir ce qu'ils appellent des ID de groupe efficaces et réels .
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
Cependant, Wikipedia se réfère à la sortie de id
pour faire la distinction entre les identifiants principaux et supplémentaires . De plus, Wikipedia fait la distinction entre les identifiants de groupe principaux et supplémentaires et les identifiants de groupe efficaces et réels . Comment ces concepts sont-ils liés les uns aux autres?
De plus, est-il vrai que l' ID de groupe principal = l' ID de groupe = l' ID de groupe actuel ?
users
group
privileges
Amelio Vazquez-Reina
la source
la source
Réponses:
Vous mélangez deux distinctions différentes ici:
La première distinction concerne la façon dont les processus sont exécutés . Normalement, lorsque vous exécutez une commande / un programme, il est exécuté avec les privilèges de votre utilisateur. Il a le vrai id du groupe même que le groupe principal de votre utilisateur. Cela peut être modifié par un processus afin d'effectuer certaines tâches en tant que membre d'un autre groupe spécial. Pour ce faire, les programmes utilisent la
setgid
fonction qui modifie leur identifiant de groupe effectif .La deuxième distinction concerne les utilisateurs . Chaque utilisateur a son groupe principal . Il n'y en a qu'un par utilisateur et est appelé gid dans la sortie de la
id
commande. En dehors de cela, chaque utilisateur peut appartenir à un certain nombre de groupes supplémentaires - et ceux-ci sont répertoriés à la fin de laid
sortie.[Modifier] :
Je conviens que la page de manuel de
id
est quelque peu trompeuse ici. C'est probablement parce qu'il s'agit d'une version allégée de la description fournie par le document d'information. Pour le voir plus clairement, lancezinfo coreutils "id invocation"
(comme suggéré à la fin duid
manuel).la source
newgrp
commande - voir le deuxième paragraphe du manuel dans votre premier lien!La vue du noyau
Sur le plan conceptuel, il existe trois ensembles de groupes dont un processus est membre. Chaque ensemble est un sous-ensemble du suivant.
Pour des raisons historiques, ces ensembles sont respectivement:
Normalement, un programme a un seul ID utilisateur. Si l'exécutable a le bit de mode setuid défini, alors le programme a deux ID utilisateur: son ID utilisateur effectif est celui qui compte pour les autorisations de fichier, les limites par utilisateur, déterminant si le processus s'exécute en tant que root et ainsi de suite. Le processus peut basculer entre les ID utilisateur effectifs et réels, s'il n'a pas besoin de ses privilèges supplémentaires tout le temps, ou s'il doit basculer entre deux utilisateurs non root.
Le même mécanisme existe pour le groupe. Pour les groupes, il existe une fonctionnalité supplémentaire qui n'existait pas lors de la conception du système: un processus peut être membre de n'importe quel nombre de groupes; ce sont les ID de groupe supplémentaires.
La vue de la base de données utilisateur
Une fois qu'un utilisateur est authentifié, le processus de connexion passe à cet utilisateur, juste avant de lancer le shell de l'utilisateur (ou le programme que l'utilisateur a demandé). Juste avant de passer à l'utilisateur souhaité (et de perdre les privilèges root), le processus de connexion bascule vers les groupes souhaités.
Dans les premières versions d'Unix, un processus ne pouvait être que dans un seul groupe. Ce groupe est l'ID de groupe principal de l'utilisateur, stocké dans la base de données utilisateur (généralement
/etc/passwd
). Ce groupe devient l'ID de groupe réel et efficace du shell ou d'un autre programme lancé par le processus de connexion.De nos jours, un processus peut être dans plusieurs groupes, donc les utilisateurs peuvent aussi être dans plusieurs groupes. La base de données de groupe (généralement
/etc/group
) contient une liste d'utilisateurs pour chaque groupe. Ces groupes deviennent des ID de groupe supplémentaires pour le programme lancé par le processus de connexion.la source
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:
Noms d'ID utilisateur et groupe:
Comment les processus acquièrent les ID:
1) La connexion authentifie le nom d'utilisateur et renvoie
LuID
etLgID
de/etc/passwd
.2) Le premier processus met en place effective = real = login, c'est-à-dire
3) les enfants fourchus Hériter
RuID
,EuID
,RgID
etEgID
, (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
, ilEuID
peut être temporairement modifié (par exemple rétrogradé de la racine), mais d'abord sa valeur d'origine est enregistréeOuID
afin de pouvoir être restaurée plus tard si vous le souhaitez.4b) Si s g id a été utilisé pour définir
EgID
, ilEgID
peut être temporairement modifié (par exemple rétrogradé de la racine), mais d'abord sa valeur d'origine est enregistréeOgID
afin qu'elle puisse être restaurée plus tard si vous le souhaitez.Lorsqu'un fichier doit être créé:
Pour ouvrir en lecture:
Pour ouvrir en écriture:
Pour ouvrir pour exécution:
Lorsqu'un message doit être envoyé:
Références: informations d'identification de l'homme
Extra: Voici un utilitaire pour imprimer joliment votre fichier / etc / group:
la source