Frage:
Warum sollte man sudo benutzen?
Charles Shiller
2016-04-04 09:47:14 UTC
view on stackexchange narkive permalink

In den meisten modernen Linux-Artikeln wird empfohlen, sudo zu verwenden, anstatt sich bei root anzumelden. Dieser Rat ist so tief verwurzelt, dass einige Distributionen die Root-Anmeldung nicht automatisch zulassen. In der Tat sind sie mit sudo vorkonfiguriert, wobei das Benutzerpasswort verwendet wird, um beliebige Befehle als root auszuführen.

Was kann schief gehen?

Wenn man den obigen Befehl ausführt, kann fast genauso gut ausgeführt werden wie root !!

Was macht Malware?

Ändern Sie .bashrc, um den

-Export einzuschließen PATH = / home / user / .hack: $ PATH

und legen Sie ein Skript in ~ / .hack ab, das:

  1. sudo li imitiert >
  2. Passwort an C&C-Server senden
  3. sich selbst löschen
  4. ol>

    Hacker erhält (Benutzer- und Root-) Passwort.

    Das gleiche Problem besteht bei Nur su, und die einzige Möglichkeit, dies zu vermeiden, ist:

    1. Alt-Strg-F1 und Anmeldung als root
    2. Immer sudo oder su as ausführen / usr / bin / sudo oder / usr / bin / su
    3. ol>

      Die erste Option scheint viel sicherer zu sein, scheint jedoch gegen die moderne Praxis zu verstoßen. Warum?

[Warum sudo?] (Http://askubuntu.com/questions/687249/why-does-ubuntu-have-a-disabled-root-account/687251#687251)
Ihr Angriffsmodell ist generisch - nicht sudospezifisch.Und nicht jeder Linux-Zugriff erfolgt über die Konsole.
Beachten Sie nur, dass Windows eine Lösung angenommen hat, die fast dasselbe erreicht: Sie sind als Administrator angemeldet, alle Programme werden jedoch im Benutzermodus ausgeführt und benötigen eine UAC-Bestätigung, um Befehle mit erhöhten Rechten ausführen zu können.Unterschiedlicher Ausgangspunkt, gleiches Ergebnis.Zufall?Ich denke nicht.
@Mark Ich bin nicht damit einverstanden, dies als Dup zu schließen: Diese Frage hat weitaus positive Stimmen und ausführliche Antworten als die, auf die Sie sie verweisen möchten.Wenn überhaupt, sollte die andere Frage hier zeigen.
Das Ausführen von sudo oder su mit vollständigen Pfaden ist unwirksam.Bash-Funktionen können mit einem / beginnen.
"Warum sollte man Sudo benutzen?""Was kann schon schief gehen?""Was macht Malware?"Eine Frage pro Frage bitte.
Fünf antworten:
user15392
2016-04-04 10:27:46 UTC
view on stackexchange narkive permalink

Weil sudo viel feinkörnigere Steuerelemente zulässt als "Als Root anmelden, dann tun, was Sie wollen". Beispielsweise können Sie sudo so konfigurieren, dass einige Benutzer nur bestimmte Befehle ausführen dürfen (z. B. Wrapper-Skripte oder "akzeptable" Binärdateien). Sie befürchten, dass ein Trojanisches Pferd den Computer eines einzelnen Benutzers gefährdet, aber sudo wurde erstellt, um die Protokollierung und Zugriffskontrolle auf einem Server zu ermöglichen, der von mehreren Personen verwaltet wird.

Of Auf einem Einzelbenutzersystem sind die wichtigen Dateien die Dateien des Benutzers. Sobald Sie Zugriff auf das Benutzerkonto erhalten, haben Sie bereits Zugriff auf diese Dateien Passwort ist nicht einmal mehr so ​​wichtig. Selbst wenn das Passwort Ihr Ziel ist (z. B. wenn Sie jemanden angreifen, der Passwörter wiederverwendet), gibt es viele Möglichkeiten, es zu erhalten, ohne sudo einzubeziehen. Ich bin beispielsweise kürzlich auf zwei standardmäßig installierte Programme gestoßen, die Kennwörter oder Kennwortfehler im Klartext protokollieren.

Und schließlich ist es ratsam, nicht als Root zu arbeiten, wann immer dies möglich ist, da die Folgen einer fehlerhaften Eingabe von a Befehle ( rm_-rf _._ / ist ein offensichtliches Beispiel) sind nicht so schwerwiegend. Wenn Sie zu Beginn eines Befehls den zusätzlichen Schritt sudo schreiben müssen, anstatt zu vergessen, dass Sie als root angemeldet sind und etwas Destruktives tun, können Sie einige einfache, aber schwerwiegende Fehler vermeiden.

Ubuntu unterstützt standardmäßig keine Root-Anmeldungen, daher wurden auch Einzelbenutzersysteme auf sudo umgestellt, bei denen Protokollierung und Zugriffskontrolle keine Probleme darstellen
@drewbenn "Vergessen, dass Sie als Root angemeldet sind und etwas Destruktives tun" Ich verwende eine andere Eingabeaufforderungsfarbe :) und ich denke, einige Distributionen verwenden auch unterschiedliche Farben, um zwischen einem Benutzer und Root in einem Terminal zu unterscheiden
Sie meinen, Sie setzen nicht einfach "myusername ALL = (ALL: ALL) ALL" in / etc / sudoers und nennen es einen Tag?Scheint viel weniger Ärger zu sein ;-)
@yzT Unix-Systeme haben praktisch, wenn nicht buchstäblich, seit Anbeginn der Zeit Root- und normale Benutzer an der Eingabeaufforderung unterschieden.Beispielsweise verwenden "sh" und abgeleitete Shells eine "$" (am Ende der) Eingabeaufforderung für normale Benutzer und "#" für den Root-Benutzer.
Der erste Grund ist der schwächste, da er für die meisten Systeme nicht gilt.Wahrscheinlich nicht einmal die meisten Produktionssysteme.
@immibis: Besonders angesichts des Containerisierungsgrades zeigen moderne Produktionssysteme häufig.Der Versuch, die Wurzel in kleinen Stücken zu verteilen, ist fast sinnlos, wenn Sie nur einen Behälter aufdrehen können.
@Kevin dreht alle Container, die Sie mögen, hoch, es sei denn, ich erlaube ihnen, dass sie das System, auf dem sie ausgeführt werden, in keiner Weise beeinflussen, außer Ressourcen zu verbrauchen ...
Lucas Kauffman
2016-04-04 11:23:10 UTC
view on stackexchange narkive permalink

Neben den Angaben der anderen Benutzer behält sudo auch die ursprüngliche Identität des Benutzers bei, der den Befehl ausführt. Dies bedeutet, dass Sie verfolgen können, welche Benutzer-ID den Befehl ausgeführt hat. Wenn Sie root in einer Mehrbenutzerumgebung verwenden, können Sie die Ausführung eines Befehls nicht für einen einzelnen Benutzer verfolgen, da die UID 0 ist.

forest
2016-04-04 12:03:25 UTC
view on stackexchange narkive permalink

Es gibt gültige Bequemlichkeitsanwendungen für sudo, aber da sie bereits in anderen Beiträgen angemessen erklärt wurden, werde ich hier nicht viel darauf eingehen. Ich werde Sie jedoch auf sudoers (5) verweisen, bei dem es sich um die sudo-Konfigurationsdatei handelt. Es zeigt einige der umfangreichen Konfigurationen, die mit sudo möglich sind. Ich werde erklären, wann und warum Sie sudo nicht verwenden sollten, um von Ihrem normalen Benutzer zum Root zu wechseln, und zwar aus rein sicherheitstechnischen Gründen.

Kurze Antwort: Es gibt keine Möglichkeit dazu Verwenden Sie sudo sicher, wenn Ihr normaler Benutzer gefährdet sein könnte. Verwenden Sie es nur zur Vereinfachung, nicht zur Sicherheit. Gleiches gilt für su und alle anderen Programme, mit denen Sie Ihren regulären Benutzer zu einem privilegierteren Benutzer machen können.

Lange Antwort: Es ist nicht wahr, dass Sie den vollständigen Pfad verwenden denn sudo schützt Sie vor einer schädlichen Umgebung. Das ist ein weit verbreitetes Missverständnis. Eine Bash-Funktion kann sogar Namen entführen, die zu Beginn einen / enthalten. Versuchen Sie Folgendes auszuführen:

  $ echo $ SHELL / bin / bash $ function / usr / bin / sudo {echo "Vertrau mir, gib jetzt dein Passwort ein:"; } $ / usr / bin / sudo idTrust mir, geben Sie jetzt Ihr Passwort ein:  

Sie dürfen nur Option 1 verwenden, auch bekannt als Anmelden mit agetty oder Anmelden mit einem anderen tty (beachten Sie, dass in einigen Distributionen in tty1 Xorg ausgeführt wird, z. B. Fedora. In den meisten Distributionen jedoch , tty1 ist ein Ersatz-tty und Xorg läuft auf tty7). Sie müssen sich jedoch bewusst sein, dass Malware Strg kbd> + alt kbd> + f1 kbd> entführen und Ihnen einen gefälschten Bildschirm anzeigen kann Daher müssen Sie unter Linux die Kombination Secure Attention Key (SAK, die alt kbd> + sysrq kbd> + k kbd> verwendet) verwenden Systeme), die alle Prozesse in diesem tty abbricht. Dies tötet jeden gefälschten Anmeldebildschirm und bringt Sie nur zum echten. Wenn es keine gefälschten Anmeldebildschirme gibt, die versuchen, Ihr Root-Passwort zu stehlen (was hoffentlich der Fall ist), führt dies einfach dazu, dass agetty neu gestartet wird. Dies sollte nur als blinkende Anmeldeaufforderung erscheinen. Auf einigen Systemen sind viele SysRq-Funktionen deaktiviert, einschließlich SAK. Sie können sie alle vorübergehend aktivieren, indem Sie die Ganzzahl 1 in / proc / sys / kernel / sysrq schreiben. Der Wert von / proc / sys / kernel / sysrq ist eine Bitmap. Sehen Sie sich also den aktuellen Wert an und berechnen Sie, in was Sie ihn konvertieren müssen, um SAK-Unterstützung hinzuzufügen, bevor Sie ihn in dauerhaft machen /etc/sysctl.conf . Es kann eine schlechte Idee sein, es für immer auf 1 zu setzen (Sie möchten nicht, dass irgendjemand alt kbd> + sysrq kbd> + e kbd> töten kann xscreensaver, oder?).

Die Idee, dass Sie Ihren normalen Benutzer schützen und sudo oder su sicher verwenden können, ist eine sehr gefährliche Idee. Selbst wenn dies möglich wäre, gibt es unzählige Möglichkeiten, Ihre laufende Sitzung zu entführen, z. B. LD_PRELOAD , eine Umgebungsvariable, die auf ein gemeinsam genutztes Objekt (eine Bibliothek) verweist vom Programm zwangsweise geladen werden, um sein Verhalten zu ändern. Während es bei Setuid-Programmen wie su und sudo nicht funktioniert, funktioniert es bei Bash und allen anderen Shells, die su und sudo ausführen und diejenigen sind, die alle Ihre Tastenanschläge sehen. LD_PRELOAD ist nicht die einzige Variable, die Programme entführen kann, die als Benutzer ausgeführt werden. LD_LIBRARY_PATH kann ein Programm anweisen, schädliche Bibliotheken anstelle Ihrer Systembibliotheken zu verwenden. Es gibt viele weitere Umgebungsvariablen, mit denen das Verhalten beim Ausführen von Programmen auf verschiedene Weise geändert werden kann. Wenn Ihre Umgebungsvariablen gefährdet werden können, können Ihr Benutzer und alle als dieser Benutzer eingegebenen Tastenanschläge grundsätzlich gefährdet werden.

Wenn dies nicht ausreicht, kann Ihr Benutzer in den meisten Distributionen ptrace () mit dem GETREGS oder PEEKTEXT verwenden / PEEKDATA -Optionen, um den gesamten Speicher von Prozessen anzuzeigen, die als derselbe Benutzer ausgeführt werden (z. B. der Bash-Prozess, auf dem su oder sudo für Sie ausgeführt wird). Wenn Sie eine Distribution verwenden, die dies deaktiviert (z. B. mithilfe des Yama LSM), kann der Prozess möglicherweise weiterhin den Speicher Ihres Bash-Prozesses mit process_vm_readv (lesen und schreiben). ) bzw. process_vm_writev () . Auf einigen Kerneln können Sie auch direkt über / proc / pid / mem in den Speicher schreiben, sofern der Prozess, der darauf schreibt, derselbe Benutzer ist. Im Linux-Kernel gibt es unzählige Sicherheitsüberprüfungen, um sicherzustellen, dass sich Prozesse nicht gegenseitig stören können. Sie alle beinhalten jedoch einen Inter -Benutzerschutz, keinen Intra -Benutzerschutz. Der Linux-Kernel geht davon aus, dass Benutzer A jeder einzelnen Aktion als Benutzer A vertraut. Wenn Sie also als Benutzer A rooten möchten, muss root genauso vertrauenswürdig sein wie dieser Benutzer.

Bevor ich überhaupt zu Xorg komme, möchte ich zunächst sagen, dass Xorg keinen Schutz vor Keyloggern bietet. Dies bedeutet, dass, wenn Sie sudo oder su in einem tty verwenden, in dem Xorg ausgeführt wird, alle Prozesse, die als derselbe Benutzer ausgeführt werden, Tastatureingaben abhören (und einfügen) können. Dies liegt daran, dass das Sicherheitsmodell des X11-Protokolls davon ausgeht, dass alles, was Zugriff auf das X11-Cookie hat, vertrauenswürdig ist und dass auf dieses Cookie für alle Benutzer zugegriffen werden kann, die unter Ihrem Benutzer ausgeführt werden. Dies ist eine grundlegende Einschränkung des X11-Protokolls, die so tief verwurzelt ist wie das Konzept der UIDs unter Linux. Es gibt keine Einstellung oder Funktion, um dies zu deaktivieren. Dies bedeutet, dass alles, was Sie in einer Xorg-Sitzung eingeben, einschließlich der Eingabe in su oder sudo (oder Frontends wie gksu, gksudo, kdesu, kdesudo, pinentry usw.), von allem beschnüffelt werden kann, das als derselbe Benutzer ausgeführt wird, also Ihr Browser, Ihre Spiele , Ihr Videoplayer und natürlich alles, was von Ihrem .bashrc gespalten wurde. Sie können dies selbst testen, indem Sie Folgendes in einem Terminal ausführen, dann zu einem anderen Terminal wechseln und einen Befehl mit sudo ausführen.

  $ xinput list Virtueller Kernzeiger id = 2 [Hauptzeiger (3 )] ↳ XTEST-Zeiger-ID des virtuellen Kerns = 4 [Slave-Zeiger (2)] PS ETPS / 2 Elantech Touchpad-ID = 13 [Slave-Zeiger (2)] Tastatur-ID des virtuellen Kerns = 3 [Haupttastatur (2)] ↳ XTEST des virtuellen Kerns Tastatur-ID = 5 [Slave-Tastatur (3)] ↳ Power Button-ID = 8 [Slave-Tastatur (3)] ↳ USB-Kamera-ID = 10 [Slave-Tastatur (3)] ↳ AT Übersetzt Set 2 Tastatur-ID = 12 [Slave-Tastatur ( 3)] ↳ Videobus-ID = 7 [Slave-Tastatur (3)] ↳ Sleep-Button-ID = 9 [Slave-Tastatur (3)] ↳ Asus WMI-Hotkeys id = 11 [Slave k Eyboard (3)]
↳ Power Button ID = 6 [Slave-Tastatur (3)] $ xinput test 12 # 12 durch die ID-Nummer Ihrer Tastatur ersetzen ^ C  

Beachten Sie, dass wenn dieser spezielle Test für Sie nicht funktioniert, die Erweiterung XTEST nicht aktiv ist. Auch ohne diese Funktion können Tastaturereignisse mit XQueryKeymap () aufgezeichnet werden. Die Lektion, die Sie lernen sollten, ist, dass es keine Möglichkeit gibt, Ihr Passwort mit su oder sudo durch einen kompromittierten Benutzer sicher einzugeben. Sie müssen unbedingt zu einem neuen tty wechseln und SAK verwenden und sich dann direkt als root anmelden.

Aus welcher Software / Distribution stammt das SAK-Ding?Ich hatte noch nie davon gehört, also bin ich zu tty1 gewechselt und habe Strg-Alt-K gedrückt ... und soweit ich das beurteilen kann, war der einzige Effekt, "^ [^ K" in das Feld für den Benutzernamen einzugeben.Also werde ich vorschlagen, dass SAK nicht universell ist.(Dieser Test wurde auf dem neuesten Debian-Stall versucht.)
Tolle Analyse, aber die Frage "Warum setzt keine Distribution auf der Erde dies um?"steht.
Beachten Sie außerdem, dass STRG + ALT + K unter Linux * nicht * das Standard-SAK ist.https://www.kernel.org/doc/Documentation/SAK.txt besagt, dass "ALT + SYSRQ + K" funktioniert, wenn der Kernel mit sysrq-Unterstützung implementiert wird, andernfalls muss er manuell mit "loadkeys" (und "definiert werden)STRG + ALT + Pause` ist die übliche Wahl, wenn sie überhaupt definiert ist.
Aus genau diesem Grund sollte die XTEST-Erweiterung in den meisten Distributionen standardmäßig deaktiviert sein, sodass nur die Möglichkeit besteht, Ereignisse direkt zu senden.Diese sind im Protokoll als "IsSynthetic true" gekennzeichnet, und Terminalemulatoren sollten sie ignorieren (xterm tut dies).
Dave, SAK ist ein altes Konzept.Ich glaube, SAK kam vor langer Zeit speziell von Linux.Wenn es bei Ihnen nicht funktioniert, ist es möglicherweise deaktiviert.Einige Distributionen schränken die Systemfunktionen Ihres Systems ein.Überprüfen Sie den Wert in / proc / sys / kernel / sysrq.Setzen Sie es auf die Ganzzahl 1, um alle möglichen sysrq-Funktionen einschließlich SAK zu aktivieren.Und Poloni ist richtig, es ist nicht der offizielle Standard SAK, aber es funktioniert.
Simon, das ist absolut nicht wahr.Distributionen können dies aufgrund der grundlegenden Funktionsweise des X11-Protokolls nicht deaktivieren.Ob xinput selbst funktioniert oder nicht, hat keinen Einfluss darauf, ob ein anderer Keylogger funktioniert oder nicht.Tatsache ist, dass Xorg allen Anwendungen mit Zugriff auf das X11-Cookie (d. H. Allen Anwendungen, die unter Ihrem regulären Benutzer ausgeführt werden) ermöglicht, auf Tastenanschläge in dieser X11-Sitzung zuzugreifen und diese einzufügen.Die einzige Lösung besteht darin, ein alternatives Protokoll wie Wayland zu verwenden.Es gibt keine Möglichkeit, Xorg zu konfigurieren, um dies zu vermeiden.
Federico, alle Distributionen meines Wissens setzen dies um.Es ist jedoch standardmäßig deaktiviert und muss in / proc / sys / kernel / sysrq aktiviert sein.Die Kernel verwendeten jedoch alle Unterstützung sysrq, wo SAK unter Linux implementiert ist.Leider kümmern sich die Leute selten genug um die Sicherheit, damit sie einen großen Unterschied macht. Daher sind solche Funktionen größtenteils unbemerkt geblieben.
Monty Harder
2016-04-04 20:32:56 UTC
view on stackexchange narkive permalink

Für mich besteht einer der Hauptgründe für die Verwendung von sudo (im Gegensatz zu su ) darin, die Notwendigkeit zu vermeiden, "das Root-Passwort" für jeden zu verfolgen Ich verwalte den Server und ändere ihn jedes Mal, wenn jemand, der ihn kennt, das Unternehmen verlässt.

Stattdessen geht es nur darum, Mitglieder der Gruppe Rad zu verwalten, die kommen und gehen können ohne dass die Passwörter der anderen häufiger geändert werden müssen als sie es bereits sind.

Dies ist wahrscheinlich nicht die gesamte Antwort für sich, sondern sollte der Vollständigkeit halber in die akzeptierte Antwort aufgenommen werden.

nyxgeek
2016-04-04 10:27:22 UTC
view on stackexchange narkive permalink

Der Grund, nicht als root ausgeführt zu werden, besteht darin, dass Sie mit sudo bewusst entscheiden, einen bestimmten Befehl als root auszuführen.

Wenn Sie als root ausgeführt werden, kann ein unachtsamer Tippfehler Ihren Tag ruinieren.

Das Schreiben von "su" und dann des Root-Passworts, bevor etwas getan wird, das Root-Rechte erfordert, ist nicht bewusst genug? Wenn ich sudo vor ein paar oder ein Dutzend Befehlen hintereinander (auf einem einzelnen Benutzersystem) in sudo eingeben muss, ist dies meiner Ansicht nach eine schlechtere Wahl als "su" und "exit" am Ende des Jobs. Wenn Sie mit der Frustration fertig werden müssen, dass Sie unweigerlich vergessen, jedes Mal sudo einzugeben, wenn Sie es benötigen, ist es möglich, dass ein weniger bewusster Benutzer entsteht, der sudo ohne nachzudenken tippt, ähnlich wie ein Windows-Benutzer, der allen UAC-Dialogprüfungen zustimmtohne sie nach einer Weile zu lesen.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...