Wie ist sudo sicherer als die direkte Verwendung von su, wenn dem Benutzer Zugriff auf alle Befehle gewährt wird?

40

Ich habe also die Unterschiede zwischen der Verwendung von suund gelesen sudound alle sind sich einig, dass der sudoAnsatz sicherer ist, als den Zugriff auf das Root-Konto selbst zuzulassen. Sie sagen, dass Sie mit dem Root-Konto Ihr gesamtes System mit nur einem einzigen Befehl brechen könnten. Das verstehe ich. ABER der erste Benutzer, der auf dem System erstellt wurde, hat mit sudo auch Zugriff auf alle Befehle. Dies kann ich durch Laufen herausfinden su -l. Wenn dies der Fall ist, kann ich einfach rennen, sudo <game-ending command>um mein System zu ruinieren. Wie ist dieser Ansatz besser oder sicherer, als mir direkten Zugriff auf das Superuser-Konto zu gewähren? Ich kann alle die gleichen Befehle ausführen ...

Liegt es daran, sudodass ich über die Befehlszeile dem Computer ausdrücklich sage, dass ich zu wissen glaube, was ich tue? Glauben sie, dass die Leute vergessen werden, dass sie sich unter dem Superuser-Konto befinden, wenn sie dies nicht ausdrücklich sagen?

Die Leute geben auch an, dass wenn das System von jemandem aus dem Ausland kompromittiert und betreten würde, es ihnen unter dem Root-Account möglich wäre, schreckliche Dinge mit meinem System anzufangen. Aber es scheint mir, dass sie, wenn sie bereits Zugriff auf mein Konto haben und mein Passwort kennen, dieselben schrecklichen Dinge tun können, indem sie sudo verwenden und mein Passwort eingeben, da sie nicht einmal das Passwort des Super-Users kennen müssen. Was bekomme ich nicht hier?

bmcentee148
quelle
2
Vielen Dank, dass Sie diese Frage erstellt haben. Jetzt können Sie den Leuten etwas zeigen, die immer wieder sagen, dass sudo sicherer ist, es aber nicht rechtfertigen kann.
user253751

Antworten:

40

Persönlich halte ich es nicht unbedingt für sicherer und die meisten Vorteile (von sudo) liegen auf einem Mehrbenutzersystem. Auf einem Einzelplatzsystem handelt es sich wahrscheinlich um eine Wäsche.

Die Vorteile sind (in keiner bestimmten Reihenfolge):

  • Sudo hat überlegene Protokollierung. sudo protokolliert jeden Befehl.
  • sudo ermöglicht eine feinere Kornkontrolle. Man kann sudo so konfigurieren, dass einige, aber nicht alle Befehle root-Zugriff haben.
  • sudo verwendet das Login-Passwort. Dies schützt Sie davor, das root-Passwort eingeben zu müssen (wie Sie es mit su tun würden) und steht im Zusammenhang mit dem obigen Punkt bezüglich einer feineren Kontrolle / des Zugriffs auf root.
  • In Ubuntu ist das Root-Konto standardmäßig gesperrt. Damit werden Cracker davon abgehalten, sich einzuloggen (remote über say ssh) und sowohl einen Benutzernamen als auch ein Passwort zu erraten. Wenn das root-Konto nicht gesperrt ist, wie es bei su der Fall ist, müssen sie nur das root-Passwort knacken.
  • sudo -iDies ist wahrscheinlich die beste Methode, um die Umgebungsvariablen von root von Ihrem Benutzer zu isolieren. Dies kommt von Zeit zu Zeit vor, ist aber mäßig esoterisch. Siehe https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • Einige Benutzer haben das Gefühl, vor jedem Befehl, den sie als root ausführen möchten, sudo eingeben zu müssen, oder eine Sudo-Zeitüberschreitung zu haben, die es ihnen ermöglicht, zu stoppen und klarer zu denken und ihre Fehler oder fehlerhaften Befehle zu reduzieren. Wenn Ihnen das hilft, wäre das auch ein Vorteil.

Es gibt wahrscheinlich mehr Vorteile, aber das sind die wichtigsten, IMHO.

Siehe auch - https://help.ubuntu.com/community/RootSudo

Um zu versuchen, einige Ihrer anderen Gedanken zu beantworten:

  • Weder su noch sudo verhindern die Ausführung von Schadcode, solange Sie das Kennwort kennen. Weder ist sicherer oder besser.
  • Cracker können über eine Reihe von Methoden auf die Shell zugreifen. Wenn Sie in einem Sicherheitshinweis - https://usn.ubuntu.com/usn/ - "Willkürlichen Code ausführen" sehen , bedeutet dies, dass ein Cracker / bin / bash oder einen anderen Code ausführen kann. Auf diese Weise kann ein Cracker über verschiedene Exploits auf die Shell zugreifen, ohne Ihren Anmeldenamen oder Ihr Kennwort zu kennen. Weder sudo noch su helfen dabei.
  • Wenn ein Cracker Shell-Zugriff hat, kann er ohne Root-Zugriff viel Schaden anrichten. Zum Beispiel die Ransomware, die alle Ihre persönlichen Daten verschlüsselt.
  • Wenn ein Cracker Shell-Zugriff auf ein Konto mit Root-Zugriff über su oder sudo hat, kann der Cracker Root-Zugriff über eine Reihe von Methoden erhalten, die über den Rahmen dieser Diskussion hinausgehen. Weder sudo noch su sind in dieser Hinsicht überlegen.

Während Sie also Probleme oder Fehler mit sudo beobachtet haben, hat su genau die gleichen Schwachstellen und su ist sudo in diesen Aspekten nicht überlegen, IMHO

Panther
quelle
Es wäre gut, ein Opt-In zu haben, um allen Benutzern die Kontrolle über das Ausschalten (Ausschalten und Neustarten) beim Beenden der Installation zu ermöglichen, anstatt Sudoer-Einträge oder einen Gruppennamen zu haben.
McKenzm
8
Ich glaube, der größte Vorteil ist, dass jeder Befehl Superuser-Berechtigungen benötigt. Ich habe in meinen frühen Erfahrungen mit Linux festgestellt, dass ich in der Regel immer als Root in mindestens einem Terminal ausgeführt wurde, während ich am System herumgebastelt habe. Leider ist es sehr einfach, durch Missverständnisse oder Tippfehler einen zerstörerischen Befehl am Terminal zu erteilen. Wenn sich das im 'Root-Terminal' befindet, kann es zu einer Wiederherstellung von einem Backup oder einer Neuinstallation kommen. sudo hat mich schon oft davor geschützt!
Rolinger
14
Das Root-Passwort nicht zu gefährden, ist vielleicht der größte Vorteil von sudo. Sie können root die Erlaubnis geben, ohne irgendwelche Geheimnisse preiszugeben.
Thorbjørn Ravn Andersen
Sie können nicht nur Befehle einschränken, sondern auch die angegebenen Argumente einschränken. Aber ich stimme nicht zu, dass das Sperren von Roots irgendetwas damit zu tun hat. weil Sie ssh so konfigurieren können, dass keine root-Anmeldung möglich ist. Im Vergleich zu sudo gibt es jedoch noch etwas anderes: sudo verwendet Ihr Benutzerkennwort, bei dem es sich um ein einziges Kennwort handelt, das kompromittiert werden muss, und das ist in der Regel keine gute Sache. Wie alles auf dieser Welt gibt es verschiedene Wege, etwas zu tun, und das bedeutet nicht, dass ein Weg zu 100% der Zeit korrekter ist als die anderen, wenn überhaupt. Dann gibt es Vorlieben.
Pryftan
Aber wenn es mehr als einen Benutzer gibt, der Root-Zugriff benötigt (worauf ich nicht eingehen werde, weil das nur so ist - es ist bestenfalls eine hitzige Diskussion), dann hat sudo dort einen Vorteil.
Pryftan
10

Stellen Sie sich vor, Sie haben 20 Minuten Zeit, um etwas Komplexes zu tun. Du bist ein bisschen verkatert und musst dich beeilen. "Lass uns su benutzen", sagst du. "Es wird einige Zeit sparen" ist Ihre Argumentation.

Sie tippen aus Versehen

rm -rf /*

Anstatt von

rm -rf ./*

Ihr System mauert sich jetzt selbst und Sie haben 10 Minuten bis zu Ihrer Deadline.

Wenn Sie explizit auswählen, wann Sie root benötigen, können Sie das Risiko minimieren. Root wird möglicherweise nicht benötigt. rm -r ./*Warum also? Warum das Risiko eingehen?

Das ist, was "Sicherheit" hier bedeutet. Minimierung des Risikos, dass Benutzer (alle Benutzer, nicht nur Anfänger) einen schwerwiegenden Fehler machen.

Dies ist natürlich ein extremes Beispiel, das in einer Produktionsumgebung nicht zulässig sein sollte (ich garantiere, dass dies in einer Produktionsumgebung geschehen ist).

Sicherheitstechnisch gibt es einige Dinge, für die sudo auch besser ist. Wie @Panther sagt - Protokollierung, Einschränkungen, Root-Passwort ist SPOF, etc.)

dijksterhuis
quelle
4
Verdammt, Sie brauchen nicht so lange zu warten, wenn Sie es einfach tun ... chown -R nobody:nobody /oder sogar chown -R nobody ../als Root. chmodNatürlich gibt es auch im rekursiven Modus ähnliche Probleme. Aber das Beste, was Sie machen, ist, dass Sie nur root sein sollten, wenn Sie das brauchen. Je weniger Rechte Ihr Login hat, desto besser für den normalen Gebrauch.
Pryftan
2
+1 für die Programmierung, wenn Sie aber hungern.
abhicantdraw
4
Also, wie ist das anders mit sudo? Du schreibst sudo rm -rf /*statt sudo rm -rf ./*und boomst wieder.
Ilkkachu
2
@ilkkachu In Bezug auf den tatsächlichen Befehl macht es nur einen minimalen Unterschied, was passiert. Sie müssen jedoch ausdrücklich angeben, dass Sie dies als root ausführen möchten. Das ist der Punkt. Bei Sicherheit geht es um Risikomanagement. Natürlich können Sie das System auch weiterhin ziegeln. Je weniger Zeit Sie jedoch über Root-Berechtigungen verfügen, desto geringer ist die Wahrscheinlichkeit, einen schwerwiegenden Fehler zu machen. Bei der Sicherheit geht es darum, die Wahrscheinlichkeiten zu minimieren.
Dijksterhuis
2
@ilkkachu Weil du nicht tippen würdestsudo rm -rf ./* . Vermutlich haben Sie Schreibzugriff auf die Inhalte im aktuellen Verzeichnis, sodass Sie für diesen Befehl kein sudo benötigen. So die typoed Befehl endet als rm -rf /*, das eine lange Kette von „Zugriff verweigert“ -Meldungen ergibt, so dass Sie wissen , dass Sie benötigen , ctrl-cbevor es dem Zeug bekommt man tatsächlich löschen können, anstatt nur zu löschen alles /bin, /boot, /devund die andere Hälfte /etcvor Sie erkennen sogar, dass etwas nicht stimmt.
Ray
9

Ich möchte den anderen Antworten eine historische Perspektive hinzufügen. Leider habe ich bis auf meine eigenen Erinnerungen an Usenet-Diskussionen und Zeitschriftenartikel keine Quellen parat.

Vor einiger Zeit, in den 1990er Jahren, machten es Distributionen einfacher, Linux auf Ihrer eigenen Hardware zu installieren, selbst mit wenig Computerkenntnissen. So zog Linux immer mehr Leute an, die überraschenderweise zuvor nicht als Systemadministratoren ausgebildet worden waren etwas UN * X-Dialekt. Stattdessen waren viele an (Einzelbenutzer-) Systeme wie Windows 95/98 gewöhnt. Und sie erfuhren, dass die meisten Linux-Systemadministrationsaufgaben es erforderlich machten, unter diesem seltsamen "Root" -Konto zu arbeiten.

Aus diesem Grund haben sich einige Benutzer nur als root angemeldet und dieses Konto für ihre gesamte tägliche Arbeit verwendet. Warum sollten sie immer wieder sudas root- Passwort eingeben oder sich nur für einige Admin-Befehle in ein neues tty einloggen müssen? Aber root für alles zu verwenden, ist natürlich keine gute Idee, da Sie Ihrem System viel mehr Schaden zufügen könnten, wenn Sie einen unbekümmerten Befehl an der falschen Stelle ausführen. Dies veranlasste sogar eine Distribution (war es SuSE?), Den Desktop-Hintergrund für den Root- Benutzer so zu ändern , dass eine große Warnung angezeigt wurde, dass Sie dieses Konto nur für Administratoraufgaben verwenden sollten.

Der Ubuntu-Weg mit sudohat also einige Vorteile (zusätzlich zu den bereits von Panther aufgelisteten ).

  • Sie können sich nicht direkt beim Root- Account anmelden.² :-)
  • Während des Installationsvorgangs werden Sie nicht nach einem (zusätzlichen) Root-Passwort gefragt, Sie benötigen nur ein (Benutzer-) Passwort.
  • sudospeichert Ihre Anmeldeinformationen zwischen, sodass Sie für mehrere Admin-Befehle nacheinander Ihr Kennwort nur einmal eingeben müssen (im Gegensatz zu su). Dies reduziert den Drang, eine Shell oder ein neues Terminal mit Root- Rechten zu öffnen .
  • Und es macht es einfacher, den Benutzern online und in der Dokumentation mitzuteilen, welche Befehle sie als Administrator eingeben müssen und welche nicht

¹ Und für diejenigen, die es nicht wagen, gibt es Installationspartys.
² Sie können jedoch einen Befehl wie sudo -ioder verwenden sudo su - root, um eine Root-Shell abzurufen, nachdem Sie sich als normaler Benutzer angemeldet haben.
³ Aber Sie wissen natürlich, dass Sie Befehle nicht einfach aus dem Internet kopieren und einfügen sollten , oder?

Dubu
quelle
Sagst du in Ubuntu, dass du nicht kannst: sudo su -oder sudo su - root? Weil ich ähnliche Behauptungen gesehen habe, zB, dass MacOS X kein Root-
Verzeichnis
2
Natürlich gibt es einen Root- Account. Ich sagte, Sie könnten sich nicht "direkt anmelden", dh Sie können den Benutzer rootund ein Kennwort nicht an der Anmeldeaufforderung oder im X-Anmeldedialog eingeben und Ihre Sitzung als root starten . Sie können jedoch einen Ihrer Befehle verwenden (ich bevorzuge ihn, sudo -ida er kürzer und faul ist), um eine Root-Shell zu erhalten.
Dubu
1
Bitte lesen Sie meinen Kommentar noch einmal :) Ich sagte, dass einige sagen, MacOS X habe kein Root-Konto, aber tatsächlich hat es dies und es hat mich daran erinnert (ich habe es nicht gleichgesetzt, dass es kein Root-Konto in Ubuntu gibt). Aber soweit ich weiß, waren die Entwickler bei Ubuntu verrückt genug, um sudo zu patchen, damit das nicht erlaubt ist, daher meine Frage.
Pryftan
1
@Pryftan Wie bereits in meinem Kommentar erwähnt, funktionieren beide Befehle und geben Ihnen eine Root-Shell. Ich werde das zu meiner Antwort hinzufügen.
Dubu
Ja. Ich weiß das :) Ich habe nicht gesagt, dass es falsch ist oder nicht. Ich sagte, dass es mich an etwas erinnerte, was einige Leute sagten, aber falsch sagten. Daher mache ich diesen Teil mutig.
Pryftan
2

Es ist seit Jahrzehnten möglich, die Root-Anmeldung über ssh zu deaktivieren. Die Ubuntu-Methode, den Root-Account zu deaktivieren und die Leute zum Sudo zu machen, ist nichts weiter als eine Spielerei. Nur "sudo -s" und Sie haben eine Root-Shell. Deaktivieren Sie die Root-Anmeldung über ssh und lassen Sie sie dort.

P. Goetterup
quelle
8
... in diesem Sinne ist es eine gute Übung, nur für alle SSH-Anmeldungen, nicht nur für das Root-Konto, den Schlüssel zu verwenden.
Rackandboneman
Ja. Ich habe das erst vor ein paar Minuten in einem Kommentar vermerkt. Am wenigsten privilegiert zu sein, ist das Beste. Erhöhen Sie also nur, wenn Sie es benötigen, und dies gilt unabhängig davon, ob Sie mit ssh oder lokal angemeldet sind. Und was @rackandboneman sagt, ist natürlich auch absolut korrekt, obwohl ich für mich selbst mit SSH-Schlüsseln, unabhängig vom System, den Remote-Root-Punkt deaktivieren kann.
Pryftan
0

Abhängig von der Konfiguration sudo <game ending command>wird nicht unbedingt funktionieren. Wenn in der sudoersKonfiguration "Benutzer ALL = (ALL) ALL" steht, sudobietet dies natürlich keinen zusätzlichen Schutz. Sie können jedoch eine Liste privilegierter Befehle angeben, die Sie häufig ausführen müssen, z. B. das Installieren neuer Pakete, und gefährliche Befehle wie z rm.

Auf diese Weise können Sie alle Befehle ausführen, wenn Sie sich als anmelden. rootDa dies jedoch nur gelegentlich erforderlich ist, wird das Risiko einer Ausführung <game ending command>erheblich verringert.

Dmitry Grigoryev
quelle
1
Und auch spezifische Argumente zu den Befehlen.
Pryftan
1
Und zwar pro Gruppe und nicht pro Benutzer. Die Verwendung von Gruppen ist in Mehrbenutzerumgebungen von unschätzbarem Wert, in denen Mitarbeiter kommen und gehen können und in denen Sie bestimmte Rollen benötigen.
Panther
0

Dass Sie in sudo nur bestimmte Befehle zulassen können, ist nicht der einzige Vorteil von sudo gegenüber su.

In den meisten Geschäften ist es nicht einmal der wichtigste Vorteil.

Mit sudo wissen Sie, wer einen bestimmten Befehl ausgeführt hat.

Nun, vielleicht ist dir das egal. Beispielsweise könnten Sie der einzige Benutzer Ihres Computers sein. Wenn ja, ist sudo möglicherweise nicht besser als su.

Aber viele Hosts haben mehr als einen Administrator.

sudo wird dann sehr nützlich, denn wenn jemand das Falsche tut, lässt sudo Sie wissen, wer es getan hat.

Auf diese Weise können Sie nachvollziehen, warum Fehler aufgetreten sind, und Personen darüber informieren, dass Fehler vermieden oder die Tools bei Bedarf von jemandem entfernt werden können.

Als Bonus, wenn die Leute wissen, dass ihre Handlungen aufgezeichnet wurden, sind sie oft ein bisschen vorsichtiger.

Sudo ist nicht perfekt.

Wenn zwei Personen gleichzeitig "sudo sh" ausführen, kann es schwierig sein, Befehle dem einen oder anderen zuzuweisen.

Und ein böswilliger Administrator kann Protokolle jederzeit entfernen oder bearbeiten - obwohl dies nicht immer so einfach ist, wie man denkt, insbesondere wenn Sie zentral protokolliert haben.

sudo beendet nicht unbedingt eine dumme oder böswillige Handlung aus allen in der ursprünglichen Frage genannten Gründen.

Aber es gibt Ihnen eine viel bessere Chance, eine Wiederholung zu verhindern.

Ben Aveling
quelle
1. Nur wenn Sie sich die Zeit nehmen, es richtig zu konfigurieren. Was das Standard-Ubuntu-System nicht kann (und auch nicht kann). 2. Nur wenn der Benutzer keine Möglichkeit hat, die Protokolle nachträglich zu bearbeiten. Dies ist nur möglich, wenn die Befehle, die er ausführen kann, eingeschränkt sind. (Was es nicht im Standard-Ubuntu-Anwendungsfall ist)
ilkkachu
@ilkkachu, obwohl du einige gute Punkte hast, macht dein Argument hier keinen Sinn. Der Punkt ist nicht die Standardeinstellung, sondern es ist möglich, sudo zu konfigurieren und fein abzustimmen. Sie können su nicht so konfigurieren, dass es diese Aktionen ausführt. su ist alles oder nichts, es gibt keine Möglichkeit, Befehle einzuschränken, und es ist eine Tatsache, dass sudo eine hervorragende Protokollierung bietet. Weder su noch sudo bieten Sicherheit gegen das, was ein Cracker auf einem kompromittierten System tun oder nicht tun kann, und niemand hat sudo auf diese Weise aufgehalten. Die Sudo-Protokolle sind im normalen Arbeitsalltag von großem Wert.
Panther
@Panther, nun, der Fragentitel lautet "... wenn dem Benutzer Zugriff auf alle Befehle gewährt wird?" Ich nahm also an, dass sie die übliche Ubuntu-Standardkonfiguration meinten, in der sudoalles erlaubt ist. Natürlich können Sie es so konfigurieren, dass es die Befehle einschränkt, die ein Benutzer ausführen darf, aber ich glaube nicht, dass dies bei der gestellten Frage der Fall ist.
Ilkkachu
Antwort erweitert.
Ben Aveling
@ilkkachu - lese meine Antwort erneut "Persönlich halte ich es nicht unbedingt für sicherer und die meisten Vorteile (von sudo) liegen auf einem Mehrbenutzersystem. Auf einem Einzelbenutzersystem ist es wahrscheinlich eine Wäsche." Anschließend erläuterte ich die anderen Vorteile von sudo, von denen einer konfigurierbar ist.
Panther