Was würde passieren, wenn ich ein Konto namens "root" erstellen würde?

30

Wenn ich ein Benutzerkonto in Ubuntu namens erstellt habe root, würde es automatisch Root-Berechtigungen haben? Das System kaputt machen? Verursachen Sie einen Fehler in der Matrix? Was würde passieren?

Der vergessene König
quelle
25
Es gibt bereits ein Konto namens root.
mikewhatever

Antworten:

46

Benutzernamen müssen eindeutig sein. Wie in der Antwort von Owen Hines erwähnt , können Sie diesen Benutzer nicht erstellen. Der entscheidende Punkt hierbei ist jedoch, dass Superuser-Berechtigungen (alle möglichen Berechtigungen) nicht vom Benutzernamen root, sondern von der UID gewährt werden .

Der Benutzer mit der UID 0 ist der Superuser.

Wenn der Benutzer mit der UID 0 einen anderen Namen hat und Sie einen Benutzer mit dem Namen erstellt haben root, hat er keinen Sonderstatus.

Ich verweise Sie auf das Tag-Wiki!

Zanna
quelle
Könnten Sie den vorhandenen Account-Stamm umbenennen und dann einen regulären Benutzer-Stamm erstellen?
Emory
Nebenbei bemerkt, es scheint möglich zu sein (obwohl ich es noch nicht versucht habe), den Benutzernamen uid 0 in einen anderen zu ändern, sodass der Superuser nicht angerufen wird root. Keine gute Idee, aber möglich. So könnte man zum Beispiel einen Superuser-Account godmit uid 0und einen normalen User rootmit einer uid 1000oder einer anderen Nummer einrichten .
Ian D. Scott
15

Es würde Sie nicht zulassen, da es bereits einen rootBenutzer geben würde .

Aber wie Florian Diesch in den Kommentaren sagte:

Einige Tools werden sich beschweren, aber Sie können sie jederzeit bearbeiten /etc/passwdund etc/shadowmanuell erstellen, um einen zweiten Benutzer mit dem Namen zu erstellen root.

Die ungeraden
quelle
2
Und wenn Sie dies tun, was passiert dann chown root file?
fkraiem
1
@fkraiem, hmm .. gute frage, ich kenne die antwort darauf nicht.
TheOdd
3
Was früher passiert ist, dass der erste in der Datei gewinnt. Ich weiß es jetzt nicht.
Joshua
5

Erstens, wie Sie, wie andere gesagt haben, den Benutzer mit der UID 0 in etwas anderes ändern. Dann können Sie einen normalen Benutzer mit dem Namen root und einer UID über 1000 erstellen. Dies funktioniert "gut". Alle Berechtigungen und Kernsystemfunktionen verwenden die UID und nicht den Benutzernamen. Tatsächlich ist dies ein guter erster Schritt zur Absicherung eines Linux-Systems. (viel besser, um root zu deaktivieren, aber vor sudo haben wir das gemacht).

Nun, was passieren wird.

Meistens nichts. Alle Systemaufrufe, die mit Autorisierung oder Authentifizierung zu tun haben, verwenden eine UID (die mir bekannt ist). Und das ist schon seit einiger Zeit so. Ihr System läuft wie gewohnt weiter. System-Tools geben den neuen Benutzernamen wieder, funktionieren jedoch normal weiter. Mit anderen Worten "Wurzel" in der Konvention und nicht in Stein gemeißelt.

Trotzdem bin ich sicher, dass es einige Tools und Programme gibt, die schlecht geschrieben sind. Programme, die die Umgebungsvariable $ USER überprüfen, verhalten sich möglicherweise falsch. Normalerweise handelt es sich dabei um Skripte und kleine Projekte, aber Sie könnten einige Zeit damit verbringen, diesen einen schlechten Commit vor 6 Jahren in fdisk aufzuspüren, der Ihnen immer wieder Kopfschmerzen bereitet.

Das habe ich die ganze Zeit gemacht. Es war ein einfacher Schritt und unterliegt der Regel "nicht vorhersehbarer Benutzername". Es gibt jedoch VIEL bessere Möglichkeiten, um die gleichen Ziele zu erreichen.

coteyr
quelle
du meinst UID, denke ich
Zanna
1

Wie andere erklärt haben, gibt die UID = 0 dem Benutzer "Superkräfte", nicht den Benutzernamen "root". Wenn Sie es also irgendwie geschafft haben, einen anderen Benutzer namens "root" zu erstellen (nach dem Umbenennen / Löschen des ursprünglichen), hängt der Superstatus des Benutzers von der UID ab, die Sie ihm gegeben haben.

Was auch zu einer anderen interessanten Idee führt: Es ist durchaus möglich, dass mehrere Benutzer dieselbe UID haben (was sie im Wesentlichen zu demselben Benutzer macht, wenn es um Dateisystemberechtigungen geht, aber beispielsweise unterschiedliche Shell- und Home-Verzeichnisse zulässt). Tatsächlich haben einige UNIX-ähnliche Systeme ein anderes Superuser-Konto namens toor (root backwards), mit dem zwei Superuser -Konten mit unterschiedlichen Einstellungen eingerichtet werden können.

Sergey
quelle
1

So erstellen Sie die zweite Wurzel:

Ja, theoretisch darf es keine zwei Benutzer mit demselben Benutzernamen oder derselben ID geben. Und Standard-Dienstprogramme sind kinderleicht und machen solche Benutzer nicht für Sie. Aber Sie können / etc / passwd immer manuell bearbeiten.

Zum Beispiel habe ich:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

Wie Sie sehen, sind wir jetzt root! Ja, das ist keine echte Wurzel (nicht UID = 0), aber es sind die gleichen vier Buchstaben. Beeindruckend und nutzlos.

So erstellen Sie eine bessere 2. 'Wurzel':

Sie können auch andere Änderungen vornehmen. Lassen Sie den Benutzernamen unverändert (Ihr Name oder root2), aber ändern Sie die UID.

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(siehe, UID- und GID-Felder sind Nullen) Nun haben Sie einen normalen (Nicht-Root-) Benutzer mit einem fast nicht verdächtigen Benutzernamen (oder machen Sie den Benutzernamen 'johndoe', um eine bessere Wirkung zu erzielen), aber tatsächlich hat dieser Benutzer Superkräfte!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

Wie Sie sehen, kann der normale Benutzer fdisk unter / dev / sda nicht verwenden, aber root2 kann alles!

Dieser einfache Trick wird manchmal verwendet, nachdem das System gehackt wurde, um eine Hintertür bereitzustellen. Selbst wenn der echte Root seine Schlüssel / Passwörter ändert, hat der Hacker über einen anderen Benutzer mit uid = 0 die volle Kontrolle über das System.

Wie Matrix funktioniert

Weder der Benutzername 'root' noch uid = 0 sind für sich genommen magisch. Dies ist nur eine Frage der Konvention. Und es ist nicht immer wahr. (Siehe diese Frage: Hat der Root-Account immer eine UID / GID 0? ) Der Kernel-Code ist magisch. Tatsächlich kann der Userspace-Code selbst nichts tun, was der Root tun kann. Auch wenn das als root läuft! Root-Power ist im Kernel. Wenn Sie beispielsweise "cat / etc / shadow" ausführen (dies kann normalerweise nur der Root-Benutzer tun), ruft das Programm / bin / cat die Funktion libc open () auf, bei der es sich immer noch um Userspace-Code handelt, und diese Funktion open () führt einen Systemaufruf zum Kernel durch. Dann entscheidet der Kernel selbst, was zu tun ist. Beispielsweise kann der Kernel einige Operationen zulassen, wenn der effektive Benutzer die ID == 0 hat.

Wenn Sie theoretisch einen Code im Kernel ändern und den Benutzer 'www-data' anders behandeln, sind einige Vorgänge möglicherweise nur für den Benutzer 'www-data' zulässig (und dürfen nicht einmal root sein).

yaroslaff
quelle
0

Die meisten "benutzerfreundlichen" Tools prüfen dies und lassen Sie kein Konto mit einem Benutzernamen erstellen, der bereits vergeben ist.

Wenn Sie dies umgehen und manuell ein zweites Root-Konto zu Ihrer / etc / passwd und / etc / shadow hinzufügen, hängt es vermutlich davon ab, welches verwendet wird, wenn Sie es vor oder nach dem ursprünglichen Konto platzieren. Wie alle Benutzerkonten auf einem Unix-System hat es auch Superuser-Zugriff nur, wenn seine UID ungeachtet des Namens Null ist.

geschlafen
quelle