GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Echte Systemadministratoren verwenden kein Sudo

Vor ein paar Monaten las ich einen sehr interessanten Artikel, der einige gute Informationen über ein Linux-Feature enthielt, über das ich mehr erfahren wollte. Ich werde Ihnen nicht den Namen des Artikels nennen, worum es darin ging, oder sogar die Website, auf der ich ihn gelesen habe, aber der Artikel hat mich einfach schaudern lassen.

Der Grund, warum ich diesen Artikel so erschreckend fand, ist, dass er jedem Befehl das sudo voranstellt Befehl. Das Problem, das ich damit habe, ist, dass der Artikel angeblich für Systemadministratoren gedacht ist und echte Systemadministratoren sudo nicht verwenden vor jedem Befehl, den sie erteilen. Dies ist ein grober Missbrauch von sudo Befehl. Über diese Art des Missbrauchs habe ich in meinem Buch „The Linux Philosophy for SysAdmins“ geschrieben. Das Folgende ist ein Auszug aus Kapitel 19 dieses Buches.

In diesem Artikel untersuchen wir, warum und wie das sudo Werkzeug missbraucht wird und wie man die Konfiguration umgeht, die einen dazu zwingt, sudo zu verwenden anstatt direkt als root zu arbeiten.

sudo oder nicht sudo

Es gehört dazu, Systemadministrator zu sein und seine bevorzugten Tools zu verwenden, um die Tools, die wir haben, richtig zu verwenden und sie ohne Einschränkungen verfügbar zu haben. In diesem Fall finde ich, dass die sudo Befehl in einer Weise verwendet wird, für die er nie beabsichtigt war. Ich habe eine besondere Abneigung gegen das sudo -Einrichtung wird in einigen Distributionen verwendet, insbesondere weil sie verwendet wird, um den Zugriff von Personen, die die Arbeit der Systemadministration verrichten, auf die Tools, die sie zur Erfüllung ihrer Aufgaben benötigen, einzuschränken und einzuschränken.

„[SysAdmins] verwenden sudo nicht.“
– Paul Venezia

Venezia erklärt in seinem InfoWorld-Artikel, dass sudo wird als Krücke für Systemadministratoren verwendet. Er verbringt nicht viel Zeit damit, diese Position zu verteidigen oder zu erklären. Er stellt dies nur als Tatsache fest. Und ich stimme ihm zu – für Systemadministratoren. Wir brauchen die Stützräder nicht, um unsere Arbeit zu erledigen. Tatsächlich stehen sie im Weg.

Einige Distributionen wie Ubuntu verwenden sudo Befehl in einer Weise, die die Verwendung von Befehlen, die erhöhte (Root-)Rechte erfordern, etwas erschweren soll. In diesen Distributionen ist es nicht möglich, sich direkt als Root-Benutzer anzumelden, also sudo Der Befehl wird verwendet, um Nicht-Root-Benutzern temporären Zugriff auf Root-Privilegien zu gewähren. Dies soll den Benutzer etwas vorsichtiger machen, wenn er Befehle ausgibt, die erhöhte Berechtigungen erfordern, wie das Hinzufügen und Löschen von Benutzern, das Löschen von Dateien, die ihnen nicht gehören, das Installieren neuer Software und allgemein alle Aufgaben, die zur Verwaltung erforderlich sind ein moderner Linux-Host. Systemadministratoren zwingen, sudo zu verwenden Befehl als Vorwort zu anderen Befehlen soll die Arbeit mit Linux sicherer machen.

Mit sudo in der Art und Weise, wie diese Distributionen es tun, ist meiner Meinung nach ein schrecklicher und ineffektiver Versuch, unerfahrenen Systemadministratoren ein falsches Sicherheitsgefühl zu vermitteln. Es ist völlig wirkungslos, irgendein Schutzniveau zu bieten. Genauso falsche oder schädliche Befehle kann ich mit sudo ausführen wie ich kann, wenn ich es nicht benutze. Die Distributionen, die sudo verwenden das Gefühl der Angst zu betäuben, dass wir einen falschen Befehl ausgeben könnten, erweisen Systemadministratoren einen großen Bärendienst. Es gibt keine Begrenzung oder Einschränkung, die von diesen Distributionen den Befehlen auferlegt wird, die man mit sudo verwenden könnte Einrichtung. Es gibt keinen Versuch, den Schaden, der angerichtet werden könnte, tatsächlich zu begrenzen, indem das System tatsächlich vor den Benutzern und der Möglichkeit geschützt wird, dass sie etwas Schädliches tun könnten – das sollte es auch nicht geben.

Lassen Sie uns also eines klarstellen – diese Distributionen erwarten, dass der Benutzer alle Aufgaben der Systemadministration durchführt. Sie wiegen die Benutzer – die in Wirklichkeit Systemadministratoren sind – in dem Glauben, dass sie irgendwie vor den Auswirkungen von irgendetwas Schlechtem geschützt sind, weil sie diesen restriktiven zusätzlichen Schritt unternehmen müssen, um ihr eigenes Passwort einzugeben, um die Befehle auszuführen.

Sudo umgehen

Distributionen, die so funktionieren, sperren normalerweise das Passwort für den Root-Benutzer (Ubuntu ist eine dieser Distributionen). Auf diese Weise kann sich niemand als root anmelden und unbelastet arbeiten. Schauen wir uns an, wie das funktioniert und wie man es umgeht.

Lassen Sie mich das Setup hier festlegen, damit Sie es nach Wunsch reproduzieren können. Als Beispiel habe ich Ubuntu 16.04 LTS1 in einer VM mit VirtualBox installiert. Während der Installation habe ich einen Nicht-Root-Benutzer, student, mit einem einfachen Passwort für dieses Experiment erstellt.

Melden Sie sich als Benutzer student an und öffnen Sie eine Terminalsitzung. Schauen wir uns den Eintrag für root in /etc/shadow file an Datei, in der die verschlüsselten Passwörter gespeichert werden.

student@machine1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

Die Berechtigung wird verweigert, sodass wir die Datei /etc/shadow file nicht einsehen können . Dies ist allen Distributionen gemeinsam, sodass nicht privilegierte Benutzer die verschlüsselten Passwörter nicht sehen und darauf zugreifen können. Dieser Zugriff würde es ermöglichen, gängige Hacking-Tools zu verwenden, um diese Passwörter zu knacken, daher ist es unsicher, dies zuzulassen.

Versuchen wir nun su – zu rooten.

student@machine1:~$ su -
Password:
su: Authentication failure

Dieser Versuch, den su zu verwenden Der Befehl, unseren Benutzer auf Root-Rechte zu erhöhen, schlägt fehl, weil das Root-Konto kein Passwort hat und gesperrt ist. Lassen Sie uns sudo verwenden um sich die /etc/shadow file anzusehen Datei.

student@machine1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the user password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>

Ich habe die Ergebnisse gekürzt, um nur den Eintrag für die Root- und Studentenbenutzer anzuzeigen. Ich habe auch das verschlüsselte Passwort gekürzt, sodass die Eingabe in eine einzige Zeile passt. Die Felder werden durch Doppelpunkte getrennt (: ) und das zweite Feld ist das Passwort. Beachten Sie, dass das Passwortfeld für root ein „Knall“ ist, der dem Rest der Welt als Ausrufezeichen bekannt ist (! ). Dies zeigt an, dass das Konto gesperrt ist und nicht verwendet werden kann.

Jetzt müssen wir nur noch ein Passwort für das Root-Konto einrichten, um das Root-Konto als richtige Systemadministratoren zu verwenden.

student@machine1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@machine1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@machine1:~#

Jetzt können wir uns direkt auf einer Konsole als root oder su – anmelden direkt zu root, anstatt sudo verwenden zu müssen für jeden Befehl. Natürlich könnten wir einfach sudo su – verwenden Jedes Mal, wenn wir uns als root anmelden wollen – aber warum die Mühe?

Bitte verstehe mich nicht falsch. Distributionen wie Ubuntu und ihre Up- und Downstream-Verwandten sind vollkommen in Ordnung, und ich habe im Laufe der Jahre mehrere davon verwendet. Wenn ich Ubuntu und verwandte Distributionen verwende, ist eines der ersten Dinge, die ich tue, ein Root-Passwort festzulegen, damit ich mich direkt als Root anmelden kann.

Gültige Verwendungen für sudo

Das sudo Einrichtung hat ihren Nutzen. Die eigentliche Absicht von sudo soll es dem Root-Benutzer ermöglichen, an einen oder zwei Nicht-Root-Benutzer den Zugriff auf ein oder zwei bestimmte privilegierte Befehle zu delegieren, die sie regelmäßig benötigen. Die Argumentation dahinter ist die des faulen Systemadministrators; Den Benutzern Zugriff auf ein oder zwei Befehle zu gewähren, die erhöhte Berechtigungen erfordern und die sie ständig, viele Male am Tag verwenden, erspart dem SysAdmin viele Anfragen von den Benutzern und eliminiert die Wartezeit, die die Benutzer sonst erfahren würden. Aber die meisten Nicht-Root-Benutzer sollten niemals vollen Root-Zugriff haben, nur auf die wenigen Befehle, die sie benötigen.

Manchmal brauche ich Nicht-Root-Benutzer, um Programme auszuführen, die Root-Rechte erfordern. In solchen Fällen richte ich einen oder zwei Nicht-Root-Benutzer ein und ermächtige sie, diesen einzelnen Befehl auszuführen. Das sudo Die Einrichtung führt auch ein Protokoll der Benutzer-ID jedes Benutzers, der sie verwendet. So kann ich vielleicht nachvollziehen, wer einen Fehler gemacht hat. Das ist alles, was es tut; es ist kein magischer Beschützer.

Das sudo Die Einrichtung war nie dazu gedacht, als Gateway für Befehle verwendet zu werden, die von einem Systemadministrator ausgegeben wurden. Es kann die Gültigkeit des Befehls nicht überprüfen. Es wird nicht überprüft, ob der Benutzer etwas Dummes macht. Es macht das System nicht sicher vor Benutzern, die Zugriff auf alle Befehle auf dem System haben, selbst wenn es durch ein Gateway geschieht, das sie zwingt, „bitte“ zu sagen – das war nie der beabsichtigte Zweck.

„Unix sagt nie bitte.“
– Rob Pike

Dieses Zitat über Unix gilt genauso für Linux wie für Unix. Wir Systemadministratoren melden uns als Root an, wenn wir als Root arbeiten müssen, und melden uns von unseren Root-Sitzungen ab, wenn wir fertig sind. An manchen Tagen bleiben wir den ganzen Tag als root eingeloggt, aber wir arbeiten immer als root, wenn es nötig ist. Wir verwenden niemals sudo weil es uns zwingt, mehr als nötig zu tippen, um die Befehle auszuführen, die wir für unsere Arbeit benötigen. Weder Unix noch Linux fragen uns, ob wir etwas wirklich tun wollen, dh es heißt nicht „Bitte bestätigen Sie, dass Sie dies tun möchten.“

Ja, ich mag es nicht, wie einige Distributionen sudo verwenden Befehl. Das nächste Mal werde ich einige gültige Anwendungsfälle für sudo untersuchen und wie man es für diese Fälle konfiguriert.

[ Möchten Sie Ihre Fähigkeiten als Systemadministrator testen? Machen Sie noch heute einen Kompetenztest. ]


Linux
  1. [Behoben] bash:sudo:Befehl nicht gefunden

  2. Update-alternative-Befehl nicht gefunden?

  3. sudo-Befehlsbeispiele in Linux

  4. visudo:Befehl nicht gefunden

  5. sudoedit:Befehl nicht gefunden

sudo:apt-add-repository:Befehl nicht gefunden?

So führen Sie den Sudo-Befehl ohne Passwort aus

Sudo-Befehl unter Linux

Grundlagen der Linux-Befehlszeile:sudo

Linux-PS-Befehl – ​​20 Beispiele aus dem wirklichen Leben

Führen Sie den cd-Befehl als Superuser unter Linux aus