Gibt es jemals einen guten Grund, sudo su zu starten?

78

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

  • sudo -i: eine interaktive Login-Shell ausführen (liest /root/.bashrcund /root/.profile)
  • sudo -s: eine nicht angemeldete interaktive Shell ausführen (liest /root/.bashrc)

In der Ubuntu-Welt sehe ich sehr oft einen sudo suVorschlag, wie man eine Root-Shell bekommt. Warum zwei separate Befehle ausführen, wenn einer ausreicht? Soweit ich das beurteilen kann, sudo -iist es gleichbedeutend mit sudo su -und sudo -sist dasselbe wie sudo su.

Die einzigen Unterschiede scheinen zu sein (Vergleich sudo -ilinks und sudo su -rechts):

Screenshot einer Meldung zum Vergleich von 'sudo -i' und 'sudo su -'

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

Screenshot einer Meldung, in der 'sudo -s' und 'sudo su' verglichen werden

Die Hauptunterschiede (die SUDO_fooVariablen ignorieren und LS_COLORS) scheinen die XDG_fooSystemvariablen in den sudo suVersionen zu sein.

Gibt es Fälle, in denen dieser Unterschied es rechtfertigt, den eher uneleganten zu verwenden sudo su? Kann ich den Leuten sicher sagen (wie ich es oft getan habe), dass es keinen Sinn hat, zu rennen, sudo suoder vermisse ich etwas?

terdon
quelle
8
Ich habe noch nie solche ausgefallenen Systeme verstanden, die ubuntuBenutzer vom Standard abhalten su -. Sie haben ein Problem geschaffen und jetzt gibt es endlose Diskussionen darüber, wie man es löst.
Jimmy
16
@jimmij Müssen Sie das root-Passwort nicht kennen su -? Denken Sie nicht, dass dies eine Sicherheitslücke in Mehrbenutzerumgebungen darstellt, in denen mehr als eine Person Root-Zugriff haben muss?
Erathiel
4
@Christopher Das Problem ist nicht einer der Benutzer, die über die Berechtigung sudo oder das Root-Kennwort verfügen, um das System zu hacken. Das Problem betrifft die Passwortsicherheit. Wenn Sie das root-Passwort ändern, müssen Sie alle Benutzer, die es benötigen, darüber informieren, was schwierig sein kann. Mit sudo haben Sie diese Schwierigkeit nicht.
Huygens,
4
Was ist das Diff-Tool?
Josh The Geek
5
@jimmij Wie verhindert Ubuntu die Verwendung von su -? Ja, man müsste ein root-Passwort festlegen, aber das ist trivial.
Phizes

Antworten:

62

Wie Sie in Ihrer Frage festgestellt haben, ist der Hauptunterschied die Umgebung.

sudo su - gegen sudo -i

Im Falle der sudo su -es sich um eine Login - Shell, so /etc/profile, .profileund .bashrcwerden ausgeführt , und Sie werden sich in root Home - Verzeichnis mit root - Umgebung finden.

sudo -iist fast identisch mit sudo su -Mit der -iOption (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet , dass Login spezifische Ressourcendateien wie .profile, .bashrcoder .loginwird von der Shell gelesen und ausgeführt werden.

sudo su gegen sudo -s

sudo suruft sudomit dem befehl auf su. Bash wird als interaktive Nicht-Login-Shell bezeichnet. Also bashnur ausführbar .bashrc. Sie sehen, dass Sie sich nach dem Wechsel zu root immer noch im selben Verzeichnis befinden:

user@host:~$ sudo su
root@host:/home/user#

sudo -sliest die $SHELLVariable und führt den Inhalt aus. Wenn es $SHELLenthält /bin/bash, ruft es auf sudo /bin/bash, was bedeutet, dass /bin/bashes als Nicht-Login-Shell gestartet wird, so dass alle Punktedateien nicht ausgeführt werden, sondern bashselbst gelesen werden. bashrcdes anrufenden Benutzers. Ihre Umgebung bleibt gleich. Dein Zuhause wird nicht das Zuhause von root sein. Sie sind also root, aber in der Umgebung des anrufenden Benutzers.

Fazit

Die -iFlagge wurde hinzugefügt , um sudoin 2004 , eine ähnliche Funktion zur Verfügung zu stellen sudo su -, so sudo su -war die Vorlage für sudo -iund gemeint , wie es zu arbeiten. Ich denke, es spielt keine Rolle, welche Sie verwenden, es sei denn, die Umgebung ist nicht wichtig.

Zusatz

Ein grundlegender Punkt, der hier erwähnt werden muss, ist, dass sudonur ein einziger Befehl mit höheren Berechtigungen ausgeführt und diese Berechtigungen dann auf die ursprünglichen Berechtigungen zurückgesetzt werden sollen. Es war nie beabsichtigt, den Benutzer wirklich zu wechseln und eine Root-Shell offen zu lassen. Im Laufe der Zeit sudowurde mit solchen Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum sie sudovor jedem Befehl etwas benutzen sollten .

Also wurde die Bedeutung von sudomissbraucht. sudosollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.

Was wir jetzt haben, sudowird immer beliebter. Es ist in nahezu jede bekannte Linux-Distribution integriert. Das ursprüngliche Tool zum Wechseln zu einem anderen Benutzerkonto ist su. Für einen Old School * nix-Veteranen sudomag so etwas unnötig erscheinen. Es erhöht die Komplexität und das Verhalten der Mechanismen, die wir von Microsofts OS-Familie kennen, und widerspricht somit der Philosophie der Einfachheit von * nix-Systemen.

Ich bin nicht wirklich ein Veteran, aber auch meiner Meinung nach sudowar mir immer ein Dorn im Auge, ab wann es eingeführt wurde und ich habe immer an der Nutzung gearbeitet sudo, wenn es möglich war. Ich bin sehr zurückhaltend sudo. Auf allen meinen Systemen ist das Root-Konto aktiviert. Aber die Dinge ändern sich, vielleicht wird die Zeit kommen, wenn susie veraltet sind und vollständig sudoersetzt werden su.

Aus diesem Grund ist es meines Erachtens am besten, die sudointernen Mechanismen ( -s, -i) zu verwenden, anstatt sich auf ein altes Tool wie z su.

Chaos
quelle
4
Ah, also gab es vor 2004 tatsächlich einen Grund zu rennen sudo su? Zu der Zeit habe ich Distributionen ohne Sudo und aktive Root-Accounts verwendet, daher weiß ich es nicht. Das könnte die Verbreitung des sudo su meme in der Ubuntu-Welt erklären.
Terdon
8
Ich wusste nie über sudo -ioder sudo -svor - ich habe UNIXes verschiedener Art seit 1991 läuft und für mich sudo su -ist nur eine tief verwurzelte Gewohnheit an dieser Stelle.
flauschiger
2
Ist sudo -sdas genauso wie sudo $SHELLdamals?
Samuel Edwin Ward
3
(Mit @chaos einverstanden sein) Die Gründe für die Verwendung sudo su -sind 1) dass es funktioniert und Sie genau wissen, was es tut, und 2) dass Sie sich keine andere Option merken müssen, um sudo(wenn Sie es bereits wissen su -) und 3) dass Sie nicht Sie müssen sich nicht merken, mit welcher Version sudoSie gerade arbeiten. Warum erinnern Sie sich an ein weiteres Stück Trivia, wenn das, was Sie bereits haben, gut funktioniert? Gibt es etwas, su -idas besser ist, als einen Protokolleintrag zu vermeiden? Ich benutze nicht sudo su -genug, um mir darüber Sorgen zu machen.
Jrw32982
3
Ich habe gerade das Update gesehen, sehr schön! Lassen Sie mich fürs Protokoll festhalten, dass ich mir auch bei Systemen ohne * nix die Zähne geschnitten habe sudound sehr daran gewöhnt bin su. Es ist die Kombination der beiden, die mich nervt.
terdon
16

Um Ihre Frage direkt zu beantworten: Nein, es gibt keinen guten Grund, dies zu tun. Außerdem erzeugt sudo su zwei Protokolleinträge, wenn einer ausreichen würde.

Ich habe viele Leute gesehen, die dies getan haben, und wenn ich sie frage, warum sie nicht einfach rennen sudo -s, lautet die Antwort, dass sie nichts über die -sFlagge von sudo wissen und im Allgemeinen wechseln sie, nachdem ich darauf hingewiesen habe.

Zu Ihrer Liste von sudo -sund sudo -imöchte ich jedoch eine weitere Option hinzufügen sudo -sE, die eine Art Ersatz für ist su -m. sudo -sESchont Ihre Umgebung einschließlich des Basisverzeichnisses. Dies birgt Risiken, wenn Ihr Home-Verzeichnis unsicher ist (auf NFS). In einer Umgebung, in der viele Benutzer root verwenden, müssen Sie sich nicht auf den Inhalt der Root- .bashrcDatei einigen . Meine .bashrcenthält viele Spezialisierungen für root, sodass ich nicht genau die gleiche Umgebung wie root bekomme, aber zumindest genau die Umgebung, die ich möchte.

user3188445
quelle
4
Wenn Ihre Umgebung erhalten bleibt $HOME, bedeutet dies, dass alle neuen Dateien, die unter dem Basisordner erstellt wurden, im Besitz von root und nicht von Ihnen sind. Ich hatte aus diesem Grund viele schwer zu diagnostizierende Berechtigungsfehler.
Eris
sudo -sEund echo $HOMEgibt dann /rootauf CentOS 7, Bash 4.2. -sEscheint das Ausgangsverzeichnis nicht wie angegeben beizubehalten.
Jeremy Profile