Comment Linux identifie-t-il les utilisateurs?

9

Je veux dire, si deux utilisateurs ont le même nom, comment le système sait-il qu'ils sont en réalité des utilisateurs différents lorsqu'il applique des autorisations de fichier?

Ce doute m'est venu à l'esprit alors que j'envisageais de renommer ma maison /home/old-archavant de réinstaller le système (je l'ai /homesur sa propre partition et je ne la formate pas), afin que je puisse alors en avoir une nouvelle, vierge /home/arch. Je me demandais si le nouveau système me donnerait les anciennes autorisations sur mes fichiers ou s'il me reconnaîtrait comme différent arch.

Arch Stanton
la source
12
La réponse simple est "ce n'est pas le cas", car vous n'êtes pas censé avoir plusieurs utilisateurs avec le même nom d'utilisateur.
Ignacio Vazquez-Abrams
6
Les UID, qui sont distincts mais généralement associés aux noms d'utilisateur, permettent de suivre ce genre de chose. Voir la sortie de ls -n.
DopeGhoti
5
"Envoyer" est une opération trop nébuleuse pour répondre à la question. Les autorisations ne s'appliquent qu'à un seul système (de taille arbitraire).
Ignacio Vazquez-Abrams
1
@ IgnacioVazquez-Abrams Cette question m'est venue à l'esprit lorsque j'ai envisagé de renommer ma maison /home/old-archavant de réinstaller le système (j'ai /homesur sa propre partition et je ne la formate pas), afin que je puisse alors en avoir une nouvelle, vierge /home/arch. Je me demandais si je conserverais les mêmes autorisations sur mes fichiers, ou si le système me reconnaîtrait comme différent arch.
Arch Stanton
1
Je pense que le cas que vous mentionnez dans votre commentaire est intéressant, environ deux utilisateurs avec le même nom d'utilisateur, mais sur des systèmes différents installés sur la même machine, accédant aux mêmes fichiers sur une partition partagée. Peut-être pourriez-vous l'ajouter à la question?
Time4Tea

Réponses:

10

Sous Unix, les utilisateurs sont identifiés par leur ID (uid), qui doit être unique (dans le cadre du système local). Donc, même s'il était possible de créer 2 utilisateurs différents avec le même nom (adduser sur mon système refuse de le faire, voir cette question pour plus d'informations. Les comptes Unix séparés peuvent-ils partager un nom d'utilisateur mais avoir des mots de passe distincts? ), Ils devraient obtenir différents uids. Bien que vous puissiez être en mesure de manipuler des fichiers contenant les informations utilisateur pour correspondre à vos critères, chaque programme est basé sur l'hypothèse que les uids sont uniques sur le système, de sorte que ces utilisateurs seraient identiques.

EDIT: L'autre réponse a démontré un cas où vous avez 2 noms d'utilisateur différents pour le même uid - en ce qui concerne le système, c'est comme avoir deux noms différents pour le même utilisateur, donc les constructions comme celle-ci doivent être évitées si possible , à moins que vous ne souhaitiez spécifiquement créer un alias pour un utilisateur sur le système (voir la question sur l'alias d'utilisateur unix sur serverfault pour plus d'informations sur les détails techniques).

Le système utilise ces UID pour appliquer les autorisations de fichier. L'uid et le gid (identifiant de groupe) de l'utilisateur auquel appartient le fichier sont écrits dans les métadonnées du fichier. Si vous transportez le disque sur un autre ordinateur avec un autre utilisateur qui partage aléatoirement le même uid, le fichier appartiendra soudainement à cet utilisateur sur ce système. Sachant que les uids ne sont généralement pas plus de 16 bits sur un système Unix, cela montre que les uids ne sont pas censés être uniques au niveau mondial, mais uniquement uniques dans la portée du système local.

Lollen Jumplan
la source
22

Si vous forcez à exister plusieurs utilisateurs avec le même nom d'utilisateur, alors il y aura plusieurs entrées /etc/{shadow,passwd}avec le même nom:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

Si vous essayez de vous connecter en tant qu'utilisateur, vous vous connecterez comme première correspondance.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

Il n'y aura aucun moyen de se connecter en tant que deuxième utilisateur avec le même nom.

Notez que Linux suit les utilisateurs par leur UID, pas par leur nom d'utilisateur.

Il serait cependant possible que deux noms d'utilisateur différents aient le même ID utilisateur. Considérez une version différente de /etc/passwd:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

Notez que pour les deux noms d'utilisateur aet b, la troisième colonne est 1001 - c'est l'ID uid / utilisateur. Maintenant, si l'utilisateur aou l'utilisateur se bconnecte (même avec des mots de passe différents), ils seront tous les deux "utilisateur 1001" et s'afficheront en tant qu'utilisateur adu point de vue du système d'exploitation. Ici aussi, la première entrée correspondante est celle renvoyée (dans la plupart des cas):

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

Les deux aet bsont uid 1001et auront accès aux ressources disponibles pour uid 1001.

Andy Dalton
la source
pourquoi ne vérifie-t-il pas les noms d'utilisateur en double lors de la création d'un nouveau?
phuclv
9
Notez que je pense que même le plus basique useraddva faire un ajustement si vous essayez d'ajouter un utilisateur existant, donc par `` force '' ici Andy signifie à peu près `` modifier manuellement /etc/passwdet /etc/shadowce qui est très bien le territoire Don't Try This At Home.
Shadur
"Il n'y aura aucun moyen de se connecter en tant que deuxième utilisateur avec le même nom." Ne pourriez-vous toujours pas appeler setuidavec le deuxième UID? Ou même sudo -u '#<uid>' bash?
jazzpi
1
@jazzpi Cela peut dépendre de la définition de "se connecter". Cependant, je pouvais certainement voir des gestionnaires de connexion graphiques permettant cette situation ...
un CVn le
3

J'envisageais de renommer ma maison /home/old-archavant de réinstaller le système. Je me demandais si le nouveau système me donnerait les anciennes autorisations sur mes fichiers ou s'il me reconnaîtrait comme un arc différent.

Si vous avez un système mono-utilisateur et que vous effectuez une réinstallation avec la même distribution ou une distribution similaire, il est très probable que votre compte utilisateur aura le même identifiant utilisateur et sera donc le même utilisateur du point de vue du noyau. Par exemple, l'utilisateur créé lors de l'installation a été l'UID 1000 sur les systèmes Debian pour autant que je m'en souvienne. D'autres systèmes peuvent utiliser un autre nombre, mais il est très probable qu'il s'agisse d'un entier de petite taille identique à chaque installation.

La même chose s'applique également aux autres utilisateurs (si vous en avez), car les UID sont généralement alloués séquentiellement. Le troisième utilisateur créé aura probablement le même UID que le troisième utilisateur créé sur un autre système. Vous devez prendre des mesures au préalable pour vous assurer que les UID ne sont pas réutilisés sur les deux systèmes.

Pour des raisons similaires, tout ce qui utilise NFS devra avoir une base de données utilisateur partagée.

Mais dans ce cas, comme c'est votre système personnel, vous pouvez simplement vous connecter en tant que root et exécuter chown newuser. -R /home/oldusermême si l'UID devait être différent.

(Les systèmes Windows sont différents, ils génèrent cette chaîne d'identification plus longue qui est plus aléatoire. Là, si vous déplacez un disque vers une autre machine, les fichiers seront considérés comme appartenant à un utilisateur inconnu, et vous n'y aurez pas accès sans utiliser les pouvoirs d'administrateur.

De plus, j'ai beaucoup dit "probablement" dans ce qui précède. On ne sait pas si une distribution se comporte différemment. Le Linux moderne prend également en charge les UID 32 bits, donc bien que ce ne soit pas aussi long que les SID Windows, il y a encore de l'espace à utiliser si l'on veut avoir, par exemple, des UID aléatoires. Habituellement, cela ne sert pas à grand-chose. L'administrateur système est censé savoir quels disques il connecte au système et ajuster les propriétés des fichiers en conséquence, ou rendre le point de montage inaccessible aux autres utilisateurs.)

ilkkachu
la source
1

Unix est un système très ancien, une époque où les capacités de stockage étaient très petites et où tout - aussi bien les fichiers que les utilisateurs - étaient identifiés par des nombres . Les noms sont venus plus tard , après que le stockage se soit un peu développé.

Une vertu de ce système est que les noms ne sont que des étiquettes accrochées aux poignées réelles: les ID numériques. Vous pouvez donc avoir plusieurs noms pour un utilisateur (en éditant directement / etc / passwd), ainsi que plusieurs noms pour un fichier (utile pour stocker le fichier une seule fois, mais le voir à plusieurs endroits).

Les limites sont le système pour l'utilisateur et la partition pour le fichier.

Je dis cela juste pour clarifier, pour expliquer pourquoi les choses sont ce qu'elles sont .

Je dois avouer que je n'ai jamais essayé le contraire - un même nom avec des identifiants différents - j'avais toujours pensé que ce n'était pas possible. C'est ça? Pas comme un bug?

ypouplard
la source
1
Dites-vous donc que d'autres systèmes de fichiers comme NTFS ou CIFS utilisent des noms d'utilisateur et non des SIDS alphanumériques pour stocker les droits et les autorisations sur les fichiers?
doneal24
Pas sûr, mais je pense que c'est le cas, car les SIDS alphanumériques n'existaient pas lors de la création de Windows - Je me souviens encore du jour où j'ai acheté Windows 286 , qui était le premier successeur graphique de MS-DOS…
ypouplard
1
@ DougO'Neal: les SID NT ont deux formats: une représentation textuelle et une forme binaire de 12 octets. AFAIK, NTFS utilise ce dernier en interne, il utilise donc toujours des nombres pour identifier les utilisateurs - juste de très gros nombres. :)
cHao
3
@ypouplard Lorsque Windows a été créé, il s'agissait d'un système d'exploitation à utilisateur unique. N'a pas eu besoin de définir la propriété des fichiers car la personne assise au clavier a tout gouverné.
doneal24