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/.bashrc
und/root/.profile
)sudo -s
: eine nicht angemeldete interaktive Shell ausführen (liest/root/.bashrc
)
In der Ubuntu-Welt sehe ich sehr oft einen sudo su
Vorschlag, wie man eine Root-Shell bekommt. Warum zwei separate Befehle ausführen, wenn einer ausreicht? Soweit ich das beurteilen kann, sudo -i
ist es gleichbedeutend mit sudo su -
und sudo -s
ist dasselbe wie sudo su
.
Die einzigen Unterschiede scheinen zu sein (Vergleich sudo -i
links und sudo su -
rechts):
Und vergleichen sudo -s
(links) und sudo su
(rechts):
Die Hauptunterschiede (die SUDO_foo
Variablen ignorieren und LS_COLORS
) scheinen die XDG_foo
Systemvariablen in den sudo su
Versionen 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 su
oder vermisse ich etwas?
quelle
ubuntu
Benutzer vom Standard abhaltensu -
. Sie haben ein Problem geschaffen und jetzt gibt es endlose Diskussionen darüber, wie man es löst.su -
? Denken Sie nicht, dass dies eine Sicherheitslücke in Mehrbenutzerumgebungen darstellt, in denen mehr als eine Person Root-Zugriff haben muss?su -
? Ja, man müsste ein root-Passwort festlegen, aber das ist trivial.Antworten:
Wie Sie in Ihrer Frage festgestellt haben, ist der Hauptunterschied die Umgebung.
sudo su -
gegensudo -i
Im Falle der
sudo su -
es sich um eine Login - Shell, so/etc/profile
,.profile
und.bashrc
werden ausgeführt , und Sie werden sich in root Home - Verzeichnis mit root - Umgebung finden.sudo -i
ist fast identisch mitsudo su -
Mit der-i
Option (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet , dass Login spezifische Ressourcendateien wie.profile
,.bashrc
oder.login
wird von der Shell gelesen und ausgeführt werden.sudo su
gegensudo -s
sudo su
ruftsudo
mit dem befehl aufsu
. Bash wird als interaktive Nicht-Login-Shell bezeichnet. Alsobash
nur ausführbar.bashrc
. Sie sehen, dass Sie sich nach dem Wechsel zu root immer noch im selben Verzeichnis befinden:sudo -s
liest die$SHELL
Variable und führt den Inhalt aus. Wenn es$SHELL
enthält/bin/bash
, ruft es aufsudo /bin/bash
, was bedeutet, dass/bin/bash
es als Nicht-Login-Shell gestartet wird, so dass alle Punktedateien nicht ausgeführt werden, sondernbash
selbst gelesen werden.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 anrufenden Benutzers.Fazit
Die
-i
Flagge wurde hinzugefügt , umsudo
in 2004 , eine ähnliche Funktion zur Verfügung zu stellensudo su -
, sosudo su -
war die Vorlage fürsudo -i
und 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
sudo
nur 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 Zeitsudo
wurde mit solchen Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum siesudo
vor jedem Befehl etwas benutzen sollten .Also wurde die Bedeutung von
sudo
missbraucht.sudo
sollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.Was wir jetzt haben,
sudo
wird immer beliebter. Es ist in nahezu jede bekannte Linux-Distribution integriert. Das ursprüngliche Tool zum Wechseln zu einem anderen Benutzerkonto istsu
. Für einen Old School * nix-Veteranensudo
mag 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
sudo
war mir immer ein Dorn im Auge, ab wann es eingeführt wurde und ich habe immer an der Nutzung gearbeitetsudo
, wenn es möglich war. Ich bin sehr zurückhaltendsudo
. Auf allen meinen Systemen ist das Root-Konto aktiviert. Aber die Dinge ändern sich, vielleicht wird die Zeit kommen, wennsu
sie veraltet sind und vollständigsudo
ersetzt werdensu
.Aus diesem Grund ist es meines Erachtens am besten, die
sudo
internen Mechanismen (-s
,-i
) zu verwenden, anstatt sich auf ein altes Tool wie zsu
.quelle
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.sudo -i
odersudo -s
vor - ich habe UNIXes verschiedener Art seit 1991 läuft und für michsudo su -
ist nur eine tief verwurzelte Gewohnheit an dieser Stelle.sudo -s
das genauso wiesudo $SHELL
damals?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, umsudo
(wenn Sie es bereits wissensu -
) und 3) dass Sie nicht Sie müssen sich nicht merken, mit welcher Versionsudo
Sie gerade arbeiten. Warum erinnern Sie sich an ein weiteres Stück Trivia, wenn das, was Sie bereits haben, gut funktioniert? Gibt es etwas,su -i
das besser ist, als einen Protokolleintrag zu vermeiden? Ich benutze nichtsudo su -
genug, um mir darüber Sorgen zu machen.sudo
und sehr daran gewöhnt binsu
. Es ist die Kombination der beiden, die mich nervt.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-s
Flagge von sudo wissen und im Allgemeinen wechseln sie, nachdem ich darauf hingewiesen habe.Zu Ihrer Liste von
sudo -s
undsudo -i
möchte ich jedoch eine weitere Option hinzufügensudo -sE
, die eine Art Ersatz für istsu -m
.sudo -sE
Schont 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-.bashrc
Datei einigen . Meine.bashrc
enthä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.quelle
$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.sudo -sE
undecho $HOME
gibt dann/root
auf CentOS 7, Bash 4.2.-sE
scheint das Ausgangsverzeichnis nicht wie angegeben beizubehalten.