Zusammenfassung: "root" ist der tatsächliche Name des Administratorkontos. "sudo" ist ein Befehl, mit dem normale Benutzer administrative Aufgaben ausführen können. "Sudo" ist kein Benutzer.
Lange Antwort:
"root" (auch "Superuser" genannt) ist der Name des Systemadministratorkontos. Die Ursprünge des Namens sind ein wenig archaisch, aber das spielt keine Rolle.
Der Root-Benutzer hat die Benutzer-ID 0 und nominell unbegrenzte Berechtigungen. Root kann auf jede Datei zugreifen, jedes Programm ausführen, jeden Systemaufruf ausführen und jede Einstellung ändern. (Aber siehe unten¹).
Vor der Erfindung des Befehls "sudo" mussten Sie sich als root anmelden, um administrative Aufgaben ausführen zu können, entweder indem Sie eine Anmeldeaufforderung² erhalten oder mit dem su
Befehl ("su" steht für "substitute user".) ³
Das ist ein bisschen mühsam und lässt Sie Benutzern auch keine teilweisen Verwaltungsbefugnisse erteilen. So wurde der Befehl "sudo" (kurz für "Ersatzbenutzer do") erfunden.
Mit dem Befehl "sudo" können Sie Befehle mit Superuser-Rechten ausführen, solange sich Ihre Benutzer-ID in der sudoers-Datei befindet, wodurch Sie die erforderliche Berechtigung erhalten.
So sudo vi /etc/hosts
können Sie beispielsweise die Hosts-Datei so bearbeiten, als ob Sie als Root ausgeführt würden. Sie benötigen nicht einmal das Root-Passwort, sondern nur Ihr eigenes Login-Passwort.
Und sudo su
würde es Ihnen natürlich erlauben, einfach root zu werden. Das Ergebnis ist dasselbe, als hätten Sie sich als root angemeldet oder den su
Befehl ausgeführt, mit der Ausnahme, dass Sie das root-Passwort nicht kennen müssen, sich jedoch in der sudoers-Datei befinden müssen.
Die sudoers-Datei bestimmt, wer den sudo-Befehl verwenden kann und was er damit machen kann.
Die sudoers-Datei bietet Ihnen mehrere Administratoren. Tatsächlich sind Ihre Administratoren root und alle in der sudoers-Datei aufgeführten. Ohne die sudoers-Datei ist der einzige Administrator root.
In Organisationen, in denen jemand anders Ihren Computer für Sie verwaltet, ist es durchaus üblich, das Root-Kennwort Ihres eigenen Computers nicht zu kennen - solange Sie sich in der sudoers-Datei befinden, spielt dies keine Rolle.
In einer Firma, für die ich gearbeitet habe, kannten mit einer riesigen Serverfarm nur sehr wenige Leute die Root-Passwörter. Stattdessen gab es eine Datenbank darüber, wer auf welchen Servern arbeiten durfte. Ein automatisierter Prozess fügt Sie zu den sudoers-Dateien der Server hinzu, auf die Sie zugreifen dürfen, und entfernt Sie, wenn Ihre Autorisierung abgelaufen ist.
¹ Noch etwas: Moderne Unix-Versionen können jetzt sogar die Möglichkeiten des Root-Benutzers einschränken.
Unter SELinux (Security Enhanced Linux) gibt es effektiv eine Zugriffssteuerungsliste, die festlegt, welches Programm was kann, und selbst root kann diese Einschränkungen nicht umgehen.
Unter dem System System Integrity Protection (SIP) von Apple (auch als "rootless" bezeichnet) sind bestimmte Dateien und Verzeichnisse gesperrt, sodass nur Anwendungen auf der entsprechenden Whitelist darauf zugreifen können.
Diese Systeme schützen ein System vor dem Fall, dass ein böswilliger Benutzer Root-Zugriff erhält. (Oder in einigen Fällen, um zu verhindern, dass Benutzer ihre eingebetteten Geräte einem Jailbreak unterziehen.) Aus offensichtlichen Gründen ist es äußerst schwierig, diese Einschränkungen zu umgehen, selbst wenn der Root-Zugriff besteht.
² Die Eingabeaufforderung "login:" ist ein weiteres archaisches Stück der Unix-Geschichte, das auf die Zeit zurückgeht, als wir alle ASCII-Terminals auf seriellen Leitungen anstelle von Fenstersystemen verwendeten. Sie können immer noch eine "Login:" - Eingabeaufforderung erhalten, indem Sie einfach login
ein Terminalfenster eingeben oder von einem anderen Ort aus eine ssh- (oder telnet- oder rsh-) Verbindung zu Ihrem Computer herstellen. Sie können sich von dort aus als ein anderer Benutzer anmelden. (Und wenn Ihr Computer über serielle Anschlüsse verfügt, können Sie ihn trotzdem so konfigurieren, dass Anmeldungen möglich sind.)
³ Es ist auch möglich, einzelnen Programmen Root-Zugriff zu gewähren. Diese Programme können alle Aktionen ausführen, die ein Benutzer mit Root-Zugriff ausführen kann, auch wenn sie von einem normalen Benutzer ausgeführt werden. Diese sind normalerweise auf bestimmte Aufgaben beschränkt. Das Programm crontab verfügt beispielsweise über Root-Berechtigungen, damit es die Cron-Tabellen bearbeiten kann. Offensichtlich hat "sudo" root-Rechte, damit es das tun kann, was es tut.
⁴ Ich werde noch einen Punkt behandeln, den ich vorher beschönigt habe. Ich habe "Administrator" und "Root" synonym verwendet, aber es gibt andere Arten von Administratoren. Diese Konten werden oft als "Rollenkonten" bezeichnet, dh, sie gehören nicht zu tatsächlichen Menschen, sondern sind vorhanden, um eine bestimmte Rolle auf dem System zu übernehmen. Wenn Sie sich die /etc/passwd
Datei auf Ihrem System ansehen , werden Sie Dutzende solcher Konten finden.
Wenn beispielsweise mysql auf Ihrem System installiert wäre, gäbe es einen "mysql" -Benutzer, und alle Datenbankdateien, Konfigurationsdateien usw. wären Eigentum dieses Benutzers. Nur dieser Benutzer verfügt über die erforderlichen Berechtigungen, um auf die Dateien zuzugreifen und den MySQL-Server auszuführen. In gewisser Weise wäre dieser Benutzer ein Administratorkonto, aber nur für MySQL.
Wenn Sie Datenbankadministrationsaufgaben ausführen mussten, wurden Sie entweder mit dem su mysql
Befehl zu "mysql" , oder verwenden Sie, sudo
wo die sudoers-Datei Ihnen mysql-Berechtigungen für diese bestimmten Befehle gibt.