Un processus de superutilisateur peut-il changer l'ID utilisateur réel et l'ID de groupe d'un processus, ne correspondant pas à ceux du fichier de mots de passe?

11

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 Timn'est pas membre d'un groupe oceanpar 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 Timet oceanrespectivement?

Tim
la source
5
Une clarification importante ici: un processus fonctionnant avec des privilèges de superutilisateur a la capacité de changer son propre UID et GID, pas ceux d'un autre processus.
filbranden
La base de données des informations utilisateur est purement utilisateur. Le noyau ne se soucie que de l'UID et du GID, pas de la base de données d'utilisateurs ou de groupes.
炸鱼 薯条 德里克

Réponses:

15

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/passwdet /etc/shadowsont la configuration pour quelles valeurs doivent être définies, mais pas une limitation des valeurs possibles.

Éditer # 1

Cela signifie que des programmes comme loginliront 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

setgid (54321);
setuid (12345);

et cela fonctionnerait, même si aucun des identifiants n'est mentionné dans un fichier.

RalfFriedl
la source
9

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/passwdet /etc/groupsont également lus par ls, pset 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.)

ctrl-alt-delor
la source
1
Ils ( /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 exemple pset ls.
Jonas Schäfer
3

Entre autres choses, le but de /etc/passwdest 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:

int setuid(uid_t uid);
int setgid(gid_t gid);

Notez qu'un processus privilégié avec les capacitésCAP_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

forêt
la source