Depuis APUE
Le véritable identifiant utilisateur et le véritable identifiant de groupe d'un processus identifient qui nous sommes réellement. Ces deux champs sont extraits de notre entrée dans le fichier de mots de passe lorsque nous nous connectons. Normalement, ces valeurs ne changent pas pendant une session de connexion, bien qu'il existe un moyen pour un processus de superutilisateur de les changer
Un processus de superutilisateur peut-il modifier l'ID utilisateur réel et l'ID groupe réel d'un processus, afin que la relation entre l'ID utilisateur réel et l'ID groupe réel ne corresponde pas à celles du fichier de mots de passe? Par exemple, si l'utilisateur Tim
n'est pas membre d'un groupe ocean
par le fichier de mots de passe, un processus de superutilisateur peut-il changer l'ID utilisateur réel et l'ID groupe réel d'un processus pour être Tim
et ocean
respectivement?
Réponses:
Oui, un processus de superutilisateur peut changer son ID utilisateur réel et son ID de groupe réel en n'importe quelle valeur souhaitée. Les valeurs dans
/etc/passwd
et/etc/shadow
sont la configuration pour quelles valeurs doivent être définies, mais pas une limitation des valeurs possibles.Éditer # 1
Cela signifie que des programmes comme
login
liront les valeurs des fichiers, donc les fichiers sont des fichiers de configuration ou des fichiers d'entrée. Ce ne sont pas des contraintes sur ce qu'un programme peut faire. Un processus de superutilisateur peut transmettre n'importe quelle valeur au noyau, et le noyau ne vérifiera aucun fichier.Un programme pourrait appeler
et cela fonctionnerait, même si aucun des identifiants n'est mentionné dans un fichier.
la source
Le fichier de mot de passe et le fichier de groupe ne sont pas lus, ils ne sont lus que par le processus de connexion, pour définir l'ID utilisateur réel et l'ID de groupe réel.
Il n'y a rien dans le noyau qui mentionne ces fichiers. La connexion doit ouvrir les fichiers, les traiter et définir les deux ID. Il pourrait être écrit différemment pour obtenir ces ID ailleurs. Par exemple à partir d'une base de données en réseau.
Tout processus ayant la capacité CAP_SETUID peut définir ces ID, root a cette capacité.
Le modèle de sécurité sous Unix est en partie implémenté dans le noyau et en partie implémenté dans des processus qui s'exécutent avec des capacités élevées (par exemple en tant que root).
Notez que
/etc/passwd
et/etc/group
sont également lus parls
,ps
et tout autre programme qui doit traduire les noms d'utilisateur / groupe vers / depuis les ID utilisateur / groupe. (Ils peuvent le faire via une bibliothèque, alors qu'ils connaissent les méthodes alternatives de stockage de ces détails.)la source
/etc/passwd
,/etc/groups
) sont également lus par les processus qui souhaitent afficher ou traiter les noms d'utilisateur au lieu des ID numériques internes, par exempleps
etls
.Entre autres choses, le but de
/etc/passwd
est de traduire le nom d'un utilisateur en UID d' un utilisateur . Si vous ne vous souciez pas de l'UID de bob, vous n'avez pas besoin de ce fichier. Si vous souhaitez simplement passer à un UID / GID arbitraire, utilisez les appels système appropriés:Notez qu'un processus privilégié avec les capacités
CAP_SETUID
et (dont dispose généralement un processus racine) ne peut modifier que ses propres UID et GID, pas ceux d'un autre processus en cours d'exécution.CAP_SETGID
la source