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

Gibt es jemals einen guten Grund, Sudo Su auszuführen?

Um eine Root-Shell auf Rechnern zu starten, auf denen das Root-Konto deaktiviert ist, können Sie einen der folgenden Schritte ausführen:

  • sudo -i :Führen Sie eine interaktive Login-Shell aus (liest /root/.bashrc und /root/.profile )
  • sudo -s :Führen Sie eine interaktive Shell ohne Anmeldung aus (liest /root/.bashrc )

In der Ubuntu-Welt sehe ich sehr oft sudo su vorgeschlagen, um eine Root-Shell zu erhalten. Warum zwei separate Befehle ausführen, wenn einer ausreicht? Soweit ich das beurteilen kann, sudo -i entspricht sudo su - und sudo -s ist dasselbe wie sudo su .

Die einzigen Unterschiede scheinen zu sein (im Vergleich zu sudo -i links und sudo su - rechts):

Und vergleichen Sie sudo -s (links) und sudo su (rechts):

Die Hauptunterschiede (Ignorieren des SUDO_foo Variablen und LS_COLORS ) scheinen die XDG_foo zu sein Systemvariablen in sudo su Versionen.

Gibt es Fälle, in denen dieser Unterschied die Verwendung des ziemlich uneleganten sudo su rechtfertigt? ? Kann ich den Leuten sicher sagen (wie ich es oft getan habe), dass es keinen Sinn macht, sudo su auszuführen oder übersehe ich etwas?

Akzeptierte Antwort:

Wie Sie in Ihrer Frage sagten, liegt der Hauptunterschied in der Umgebung.

sudo su - vs. sudo -i

Im Fall von sudo su - es ist eine Login-Shell, also /etc/profile , .profile und .bashrc ausgeführt und Sie befinden sich im Home-Verzeichnis von root mit der Umgebung von root.

sudo -i ist fast dasselbe wie sudo su - Das -i (Anfangsanmeldung simulieren) führt die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmelde-Shell aus. Das bedeutet, dass Login-spezifische Ressourcendateien wie .profile , .bashrc oder .login wird von der Shell gelesen und ausgeführt.

sudo su vs. sudo -s

sudo su ruft sudo auf mit dem Befehl su . Bash wird als interaktive Non-Login-Shell bezeichnet. Also bash führt nur .bashrc aus . Sie können sehen, dass Sie sich nach dem Wechsel zu root immer noch im selben Verzeichnis befinden:

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo -s liest die $SHELL Variable und führt den Inhalt aus. Wenn $SHELL enthält /bin/bash es ruft sudo /bin/bash auf , was bedeutet, dass /bin/bash wird als Non-Login-Shell gestartet, also werden nicht alle dot-Dateien ausgeführt, sondern bash selbst lautet .bashrc des anrufenden Benutzers. Ihre Umgebung bleibt gleich. Dein Zuhause wird nicht das Zuhause von root sein. Sie sind also root, aber in der Umgebung des aufrufenden Benutzers.

Schlussfolgerung

Das -i Flag wurde zu sudo hinzugefügt im Jahr 2004, um eine ähnliche Funktion wie sudo su - bereitzustellen , also sudo su - war die Vorlage für sudo -i und soll so funktionieren. Ich denke, es spielt keine Rolle, welche Sie verwenden, es sei denn, die Umgebung ist nicht wichtig.

Verwandte:Linux – netfilter/iptables:Warum nicht die Rohtabelle verwenden?

Zusatz

Ein grundlegender Punkt, der hier erwähnt werden muss, ist das sudo wurde entwickelt, um nur einen einzigen Befehl auszuführen mit höheren Privilegien und lassen Sie diese Privilegien dann auf die ursprünglichen fallen. Es sollte nie wirklich wechseln den Benutzer und lassen Sie eine Root-Shell geöffnet. Im Laufe der Zeit wurde sudo wurde um solche Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum man sudo verwenden sollte vor jedem Befehl.

Also die Bedeutung von sudo wurde missbraucht. sudo sollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.

Was wir jetzt haben, ist sudo wird immer beliebter. Es ist in fast jede bekannte Linux-Distribution integriert. Das ursprüngliche Tool zum Wechseln zu einem anderen Benutzerkonto ist su . Für einen *nix-Veteranen der alten Schule so etwas wie sudo mag unnötig erscheinen. Es fügt Komplexität hinzu und verhält sich wahrscheinlicher zu den Mechanismen, die wir aus Microsofts Betriebssystemfamilie kennen, und steht somit im Gegensatz zur Philosophie der Einfachheit von *nix-Systemen.

Ich bin nicht wirklich ein Veteran, aber auch meiner Meinung nach sudo war mir schon immer ein Dorn im Auge, seit es eingeführt wurde und ich immer um die Verwendung von sudo herumgearbeitet habe , wenn es möglich wäre. Ich bin sehr zurückhaltend, sudo zu verwenden . Auf allen meinen Systemen ist das Root-Konto aktiviert. Aber die Dinge ändern sich, vielleicht kommt die Zeit, wo su wird veraltet sein und sudo ersetzt su vollständig.

Daher denke ich, dass es am besten ist, sudo zu verwenden ’s interne Mechanismen (-s , -i ), anstatt sich auf ein altes Tool wie su zu verlassen .


Linux
  1. Ubuntu - Befehl beim Start mit sudo ausführen

  2. Textdatei als Befehle in Bash ausführen

  3. Wie überprüfe ich, ob ich sudo-Zugriff habe?

  4. Gibt es einen Befehl, um meinen Benutzernamen anzuzeigen, nachdem sudo su'd zu root wurde?

  5. wie man die Umgebungsvariable an sudo su übergibt

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

So führen Sie Sudo-Befehle ohne Passwort aus

Wie führt man Wireshark unter Ubuntu 17.10 aus?

So führen Sie einen Alias ​​mit Sudo in Linux aus

So führen Sie sudo-Befehle ohne Passwort aus

Debian 11.3 ist so gut, dass es einfach keinen Grund gibt, es nicht zu verwenden