Wie identifiziert Linux Benutzer?

9

Ich meine, wenn zwei Benutzer denselben Namen haben, woher weiß das System, dass sie tatsächlich unterschiedliche Benutzer sind, wenn es Dateiberechtigungen erzwingt?

Dieser Zweifel kam mir in den Sinn, als ich überlegte, mein Zuhause /home/old-archvor der Neuinstallation des Systems umzubenennen (ich habe /homeeine eigene Partition und formatiere sie nicht), damit ich dann eine neue, makellose habe /home/arch. Ich fragte mich, ob das neue System mir die alten Berechtigungen für meine Dateien geben würde oder ob es mich als ein anderes erkennen würde arch.

Arch Stanton
quelle
12
Die einfache Antwort lautet "nicht", da Sie nicht mehrere Benutzer mit demselben Benutzernamen haben sollten.
Ignacio Vazquez-Abrams
6
Mit UIDs, die sich von Benutzernamen unterscheiden, aber normalerweise mit diesen verknüpft sind, wird diese Art von Dingen verfolgt. Siehe die Ausgabe von ls -n.
DopeGhoti
5
"Senden" ist eine zu nebulöse Operation, um die Frage zu beantworten. Berechtigungen gelten nur für ein einzelnes System (beliebiger Größe).
Ignacio Vazquez-Abrams
1
@ IgnacioVazquez-Abrams Diese Frage kam mir tatsächlich in den Sinn, als ich überlegte, mein Haus /home/old-archvor der Neuinstallation des Systems umzubenennen (ich habe /homeeine eigene Partition und formatiere sie nicht), damit ich dann eine neue, makellose habe /home/arch. Ich fragte mich, ob ich die gleichen Berechtigungen für meine Dateien behalten würde oder ob das System mich als einen anderen erkennen würde arch.
Arch Stanton
1
Ich denke, der Fall, den Sie in Ihrem Kommentar erwähnen, ist interessant, etwa zwei Benutzer mit demselben Benutzernamen, aber auf verschiedenen Systemen, die auf demselben Computer installiert sind und auf dieselben Dateien auf einer gemeinsam genutzten Partition zugreifen. Vielleicht könnten Sie es der Frage hinzufügen?
Time4Tea

Antworten:

10

Unter Unix werden Benutzer anhand ihrer ID (UID) identifiziert, die eindeutig sein muss (im Bereich des lokalen Systems). Selbst wenn es möglich wäre, zwei verschiedene Benutzer mit demselben Namen zu erstellen (Adduser auf meinem System weigert sich, dies zu tun, finden Sie weitere Informationen in dieser Frage. Können separate Unix-Konten einen Benutzernamen gemeinsam nutzen, aber separate Kennwörter haben? ), Müssen sie diese erhalten verschiedene Uids. Während Sie möglicherweise Dateien mit den Benutzerinformationen so bearbeiten können, dass sie Ihren Kriterien entsprechen, basiert jedes Programm auf der Annahme, dass Benutzeroberflächen auf dem System eindeutig sind, sodass diese Benutzer identisch sind.

BEARBEITEN: Die andere Antwort zeigte einen Fall, in dem Sie zwei verschiedene Benutzernamen für dieselbe UID haben. Für das System ist dies jedoch so, als hätten Sie zwei verschiedene Namen für denselben Benutzer. Daher sollten solche Konstrukte nach Möglichkeit vermieden werden , es sei denn, Sie möchten speziell einen Alias ​​für einen Benutzer auf dem System erstellen ( weitere Informationen zu den technischen Details finden Sie in der Frage zum Unix-Benutzeralias bei Serverfault).

Das System verwendet diese UIDs, um Dateiberechtigungen zu erzwingen. Die UID und GID (Gruppen-ID) des Benutzers, zu dem die Datei gehört, werden in die Metadaten der Datei geschrieben. Wenn Sie die Festplatte auf einen anderen Computer mit einem anderen Benutzer übertragen, der zufällig dieselbe UID verwendet, gehört die Datei plötzlich diesem Benutzer auf diesem System. In dem Wissen, dass UIDs auf einem Unix-System normalerweise nicht mehr als 16-Bit-Ganzzahlen sind, zeigt dies, dass die UIDs nicht global eindeutig sein sollen, sondern nur im Umfang des lokalen Systems eindeutig sind.

Lollen Jumplan
quelle
22

Wenn Sie erzwingen, dass dort mehrere Benutzer mit demselben Benutzernamen vorhanden sind, werden mehrere Einträge /etc/{shadow,passwd}mit demselben Namen eingegeben:

$ 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:::

Wenn Sie versuchen, sich als dieser Benutzer anzumelden, melden Sie sich als erste Übereinstimmung an.

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

Es gibt keine Möglichkeit, sich als zweiter Benutzer mit demselben Namen anzumelden.

Beachten Sie, dass Linux Benutzer anhand ihrer UID und nicht anhand ihres Benutzernamens verfolgt.

Es wäre jedoch möglich, dass zwei verschiedene Benutzernamen dieselbe Benutzer-ID haben. Betrachten Sie eine andere Version von /etc/passwd:

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

Beachten Sie, dass für beide Benutzernamen aund bdie dritte Spalte 1001 lautet - das ist die UID / Benutzer-ID. Wenn sich Benutzer aoder Benutzer banmelden (auch mit unterschiedlichen Kennwörtern), sind beide "Benutzer 1001" und werden aaus Sicht des Betriebssystems als Benutzer angezeigt. Auch hier ist der erste übereinstimmende Eintrag der zurückgegebene (in den meisten Fällen):

$ 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)

Beide aund bsind uid 1001und haben Zugriff auf die für uid verfügbaren Ressourcen 1001.

Andy Dalton
quelle
Warum wird beim Erstellen eines neuen Benutzernamens nicht nach doppelten Benutzernamen gesucht?
Phuclv
9
Beachten Sie, dass ich denke, dass selbst die meisten Grundlinien useraddeinen Fit auslösen, wenn Sie versuchen, einen vorhandenen Benutzer hinzuzufügen. Mit "erzwingen" bedeutet Andy hier also so ziemlich "manuell bearbeiten" /etc/passwdund /etc/shadowdas ist sehr viel "Versuchen Sie dies nicht zu Hause".
Shadur
"Es gibt keine Möglichkeit, sich als zweiter Benutzer mit demselben Namen anzumelden." Könnten Sie nicht immer noch setuidmit der zweiten UID anrufen ? Oder sogar sudo -u '#<uid>' bash?
Jazzpi
1
@jazzpi Das hängt möglicherweise von der Definition von "Anmelden" ab. Allerdings konnte ich sicherlich grafische Login-Manager sehen, die diese Situation
zuließen
3

Ich überlegte, mein Zuhause umzubenennen, /home/old-archbevor ich das System neu installierte. Ich fragte mich, ob das neue System mir die alten Berechtigungen für meine Dateien geben würde oder ob es mich als einen anderen Bogen erkennen würde.

Wenn Sie ein Einzelbenutzersystem haben und eine Neuinstallation mit derselben oder einer ähnlichen Distribution durchführen, ist es sehr wahrscheinlich, dass Ihr Benutzerkonto dieselbe Benutzer-ID hat und daher aus Sicht des Kernels derselbe Benutzer ist. Zum Beispiel war der Benutzer, der während der Installation erstellt wurde, UID 1000 auf Debian-Systemen, soweit ich mich erinnern kann. Andere Systeme verwenden möglicherweise eine andere Nummer, aber es ist sehr wahrscheinlich, dass es sich um eine kleine Ganzzahl handelt, die bei jeder Installation gleich ist.

Gleiches gilt auch für andere Benutzer (falls vorhanden), da die UIDs normalerweise nacheinander zugewiesen werden. Der dritte erstellte Benutzer hat wahrscheinlich dieselbe UID wie der dritte Benutzer, der auf einem anderen System erstellt wurde. Sie müssen im Voraus Schritte unternehmen, um sicherzustellen, dass die UIDs nicht auf beiden Systemen wiederverwendet werden.

Aus ähnlichen Gründen muss für alles, was NFS verwendet, eine gemeinsam genutzte Benutzerdatenbank vorhanden sein.

Da es sich jedoch um Ihr persönliches System handelt, können Sie sich einfach als root anmelden und ausführen, chown newuser. -R /home/olduserselbst wenn die UID unterschiedlich wäre.

(Windows-Systeme sind unterschiedlich. Sie generieren diese längere ID-Zeichenfolge, die zufälliger ist. Wenn Sie eine Festplatte auf einen anderen Computer verschieben, werden die Dateien einem unbekannten Benutzer angezeigt, und Sie haben keinen Zugriff, ohne Administratorrechte zu verwenden.

Außerdem habe ich oben "wahrscheinlich" viel gesagt. Es ist nicht abzusehen, ob sich eine Verteilung anders verhält. Modernes Linux unterstützt auch 32-Bit-UIDs. Das ist zwar nicht annähernd so lang wie Windows-SIDs, aber es gibt immer noch Speicherplatz, wenn man z. B. zufällige UIDs haben möchte. Normalerweise nützt das aber nicht viel. Der Systemadministrator soll wissen, welche Festplatten an das System angeschlossen sind, und die Dateibesitzer entsprechend anpassen oder den Mountpoint für andere Benutzer unzugänglich machen.)

ilkkachu
quelle
1

Unix ist ein sehr altes System, eine Ära, in der die Speicherkapazitäten sehr klein waren und alles - sowohl Dateien als auch Benutzer - durch Zahlen identifiziert wurden . Namen kamen später , nachdem die Lagerung etwas gewachsen war.

Ein Grund dieses Systems ist , dass Namen nur Etiketten an den realen Griffe gehakt: die numerischen IDs. Sie können also mehrere Namen für einen Benutzer haben (indem Sie / etc / passwd direkt bearbeiten) sowie mehrere Namen für eine Datei (nützlich, um die Datei nur einmal zu speichern, aber an mehreren Stellen anzuzeigen).

Limits sind das System für den Benutzer und die Partition für die Datei.

Ich sage das nur, um zu klären, warum die Dinge so sind, wie sie sind .

Ich muss gestehen, ich habe nie den umgekehrten Weg versucht - ein gleicher Name mit unterschiedlichen IDs - ich hatte immer gedacht, dass dies nicht möglich ist. Ist es? Nicht als Bug?

ypouplard
quelle
1
Wollen Sie damit sagen, dass andere Dateisysteme wie NTFS oder CIFS Benutzernamen und keine alphanumerischen SIDS verwenden, um Dateibewilligungen und Berechtigungen zu speichern?
Doneal24
Ich bin mir nicht sicher, aber ich glaube, dass dies der Fall ist, da es bei der
Erstellung
1
@ DougO'Neal: NT-SIDs haben zwei Formate: eine Textdarstellung und eine 12-Byte-Binärform. AFAIK, NTFS verwendet letzteres intern, verwendet also weiterhin Zahlen, um Benutzer zu identifizieren - nur sehr große Zahlen. :)
CHao
3
@ypouplard Als Windows erstellt wurde, war es ein Einzelbenutzer-Betriebssystem. Es war nicht erforderlich, die Dateibewertung festzulegen, da die Person, die an der Tastatur saß, alles regierte.
Doneal24