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

Warum sollte man sudo verwenden?

Weil sudo ermöglicht eine viel feinkörnigere Steuerung als "als root anmelden und dann tun, was Sie wollen". Beispielsweise können Sie sudo konfigurieren so dass einige Benutzer nur bestimmte Befehle ausführen dürfen (wie Wrapper-Skripte oder "akzeptable" Binärdateien). Sie befürchten, dass ein Trojaner den Computer eines einzelnen Benutzers kompromittiert, aber sudo wurde erstellt, um die Protokollierung und Zugriffskontrolle auf einem Server zu ermöglichen, der von mehreren Personen verwaltet wird.

Auf einem Einzelbenutzersystem sind die wichtigen Dateien natürlich die Dateien des Benutzers, und sobald Sie Zugriff auf das Konto des Benutzers erhalten, haben Sie bereits Zugriff auf diese Dateien , also ist es nicht einmal mehr so ​​wichtig, das Passwort zu bekommen. Selbst wenn das Passwort Ihr Ziel ist (sagen wir, Sie greifen jemanden an, der Passwörter wiederverwendet), gibt es viele Möglichkeiten, es zu bekommen, ohne sudo einzubeziehen; Zum Beispiel bin ich kürzlich auf 2 standardmäßig installierte Programme gestoßen, die Passwörter oder Passwortfehler im Klartext protokollieren.

Und schließlich ist es ratsam, möglichst nicht als root auszuführen, da die Folgen einer falschen Eingabe eines Befehls (rm_-rf_._/ ist ein offensichtliches Beispiel) sind nicht so schwerwiegend. Erfordert den zusätzlichen Schritt des Schreibens von sudo am Anfang eines Befehls, anstatt "zu vergessen, dass Sie als Root angemeldet sind, und etwas destruktives zu tun" kann einige einfache, aber schwerwiegende Fehler vermeiden.


Es gibt sinnvolle praktische Verwendungen für sudo, aber da sie bereits in anderen Posts ausreichend erklärt werden, werde ich hier nicht näher darauf eingehen. Ich verweise Sie jedoch auf sudoers(5) , das ist die sudo-Konfigurationsdatei. Es zeigt einige der umfangreichen Konfigurationsmöglichkeiten, die mit sudo möglich sind. Ich werde erklären, wann und warum Sie sudo nicht verwenden sollten, um von Ihrem normalen Benutzer zu root zu werden, aus reinen Sicherheitsgründen, abgesehen von der Bequemlichkeit.

Kurze Antwort: Es gibt keine Möglichkeit, sudo sicher zu verwenden, wenn Ihr normaler Benutzer möglicherweise kompromittiert ist. Verwenden Sie es nur aus Bequemlichkeit, nicht aus Sicherheitsgründen. Dasselbe gilt für su und alle anderen Programme, die verwendet werden können, um Ihren regulären Benutzer zu einem privilegierteren Benutzer zu machen.

Lange Antwort: Es ist nicht wahr, dass die Verwendung des vollständigen Pfads für sudo Sie vor einer bösartigen Umgebung schützt. Das ist ein weit verbreitetes Missverständnis. Eine Bash-Funktion kann sogar Namen entführen, die einen / enthalten am Anfang. Versuchen Sie Folgendes auszuführen:

$ echo $SHELL
/bin/bash
$ function /usr/bin/sudo { echo "Trust me, now put in your password:"; }
$ /usr/bin/sudo id
Trust me, now put in your password:

Sie müssen Verwenden Sie nur Option 1, auch bekannt als Anmelden mit agetty oder logind auf einem anderen tty (beachten Sie, dass bei einigen Distributionen Xorg auf tty1 läuft, wie z. B. Fedora. Bei den meisten Distributionen ist tty1 jedoch ein Ersatz-tty und Xorg läuft auf tty7) . Allerdings müssen Sie sich darüber im Klaren sein, dass Malware ctrl entführen kann +alt +f1 und Ihnen einen gefälschten Bildschirm präsentieren, also müssen Sie die Secure Attention Key-Kombination (SAK, die alt ist +sysrq +k auf Linux-Systemen), wodurch alle Prozesse in diesem tty beendet werden. Dies beendet 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), wird agetty einfach neu gestartet, was nur als blinkender Anmelde-Prompt erscheinen sollte. Auf einigen Systemen sind viele SysRq-Funktionen deaktiviert, einschließlich SAK. Sie können sie alle vorübergehend aktivieren, indem Sie die Ganzzahl 1 bis /proc/sys/kernel/sysrq schreiben . Der Wert von /proc/sys/kernel/sysrq ist ein Bitmap, also schauen Sie sich an, was es derzeit ist, und berechnen Sie, in was Sie es konvertieren müssen, um SAK-Unterstützung hinzuzufügen, bevor Sie es in /etc/sysctl.conf dauerhaft machen . Es kann eine schlechte Idee sein, es für immer auf 1 zu setzen (Sie wollen nicht, dass jeder in der Lage ist, alt zu verwenden +sysrq +e um xscreensaver zu töten, 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 es möglich wäre, gibt es unzählige Möglichkeiten, Ihre laufende Sitzung zu kapern, wie z. B. LD_PRELOAD , eine Umgebungsvariable, die auf ein gemeinsam genutztes Objekt (Bibliothek) zeigt, das vom Programm zwangsweise geladen wird, 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 die alle Ihre Tastenanschläge sehen. LD_PRELOAD ist nicht die einzige Variable, die Programme entführen kann, die als Ihr Benutzer ausgeführt werden. LD_LIBRARY_PATH kann ein Programm anweisen, bösartige Bibliotheken anstelle Ihrer Systembibliotheken zu verwenden. Es gibt viele weitere Umgebungsvariablen, die verwendet werden können, um das Verhalten laufender Programme auf verschiedene Weise zu ändern. Grundsätzlich können, wenn Ihre Umgebungsvariablen kompromittiert werden können, Ihr Benutzer und alle als dieser Benutzer eingegebenen Tastenanschläge kompromittiert werden.

Wenn das nicht genug wäre, kann Ihr Benutzer in den meisten Distributionen ptrace() verwenden mit dem GETREGS oder PEEKTEXT/PEEKDATA Optionen zum Anzeigen des gesamten Speichers von Prozessen, die unter demselben Benutzer ausgeführt werden (z. B. der Bash-Prozess, der su oder sudo für Sie ausführt). Wenn Sie eine Distribution verwenden, die dies deaktiviert (z. B. durch Verwendung des Yama LSM), kann der Prozess möglicherweise immer noch mit process_vm_readv() in den Speicher Ihres Bash-Prozesses lesen und schreiben und process_vm_writev() beziehungsweise. Bei manchen Kerneln können Sie über /proc/pid/mem auch direkt in den Speicher schreiben , solange der Prozess, der darauf schreibt, derselbe Benutzer ist. Im Linux-Kernel gibt es überall unzählige Sicherheitschecks, um sicherzustellen, dass sich Prozesse nicht gegenseitig stören können. Sie beinhalten jedoch alle inter -Benutzerschutz, nicht intra -Benutzerschutz. Der Linux-Kernel geht davon aus, dass jeder einzelne Vorgang, der als Benutzer A ausgeführt wird, von Benutzer A als vertrauenswürdig eingestuft wird. Wenn Sie also als Benutzer A rooten, muss root genauso vertrauenswürdig sein wie dieser Benutzer.

Bevor ich überhaupt zu Xorg komme, möchte ich gleich zu Beginn sagen, dass Xorg keinen Schutz vor Keyloggern bietet. Das bedeutet, dass, wenn Sie sudo oder su in einem tty verwenden, während Xorg läuft, alle Prozesse, die unter demselben Benutzer laufen, Tastenanschläge ausspionieren (und einschleusen) können. Dies liegt daran, dass das Sicherheitsmodell des X11-Protokolls davon ausgeht, dass alles mit Zugriff auf das X11-Cookie vertrauenswürdig ist und dass auf dieses Cookie für alles zugegriffen werden kann, was unter Ihrem Benutzer ausgeführt wird. Es 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. Das bedeutet, dass alles, was Sie in einer Xorg-Sitzung eingeben, einschließlich Eingaben in su oder sudo (oder Frontends wie gksu, gksudo, kdesu, kdesudo, pinentry usw.), von allem ausspioniert werden kann, das unter demselben Benutzer läuft, also Ihr Browser, Ihre Spiele , Ihr Videoplayer und natürlich alles, was von Ihrer .bashrc gegabelt wird. Sie können dies selbst testen, indem Sie Folgendes in einem Terminal ausführen und dann zu einem anderen Terminal wechseln und einen Befehl mit sudo.

ausführen
$ xinput list
  Virtual core pointer                          id=2    [master pointer  (3)]
    ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ↳ ETPS/2 Elantech Touchpad                  id=13   [slave  pointer  (2)]
  Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ USB Camera                                id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=11   [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]

$ xinput test 12 # replace 12 with the id number of your keyboard
key press   45 
key press   44 
key release 40 
key press   41 
key release 45 
key release 44 
key release 41 
key press   31
^C

Beachten Sie, dass, wenn dieser spezielle Test bei Ihnen nicht funktioniert, dies bedeutet, dass Sie den XTEST nicht haben Verlängerung aktiv. Auch wenn es nicht aktiv ist, ist es immer noch möglich, Tastaturereignisse mit XQueryKeymap() aufzuzeichnen . Die Lektion, die Sie lernen sollten, ist, dass es praktisch keinen Weg gibt um Ihr Passwort sicher mit su oder sudo über einen kompromittierten Benutzer einzugeben. Sie müssen unbedingt zu einem neuen tty wechseln und SAK verwenden und sich dann direkt als root anmelden.


Abgesehen von den Angaben der anderen Benutzer behält sudo auch die ursprüngliche Identität des Benutzers bei, der den Befehl ausführt. Das 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.


Linux
  1. Erklärte Linux-Dateisystemtypen, welche Sie verwenden sollten

  2. [Leitfaden] apt vs. apt-get-Befehle und welcher ist zu verwenden?

  3. Welchen Pfad verwendet „sudo“ für die Suche nach „?

  4. Wann und warum sollte ich Apt-get Update verwenden?

  5. Welchen Grafiktreiber sollte ich auf einem Asus N43 verwenden?

Fedora vs. Red Hat:Welche Linux-Distribution sollten Sie verwenden und warum?

Um Windows und Ubuntu auf einem Computer zu verwenden, welchen sollte ich zuerst installieren?

Apt vs. Apt-get-Befehle erklärt:Welchen verwenden?

Terraform vs. Ansible:Was ist der Unterschied und welches sollten Sie verwenden?

Was ist ein Homelab und warum sollten Sie eines haben?

Warum ist es möglich, den Bildschirm umzudrehen?