Wie verwendet man sudo, um einen Befehl als eigentlicher Root-Benutzer unter Ubuntu auszuführen? Ich dachte ursprünglich, dies sei das Standardverhalten von sudo, bis ich lief:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
Dies ist jedoch die Art von Verhalten, die ich möchte, aber nur in einer einzigen Zeile:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Sagen Sie einfach sudo whoami .. gibt root zurückAntworten:
In der Tat es tut sich als root ausführen. Aber, was dir passiert ist , dass die Rück Zecken ausgewertet werden , bevor
sudo
läuft, wie sie benötigt werden um den Befehl zu bewerten. Direkter, warum nicht einfach das:Ihre
whoami
In-Back-Ticks werden tatsächlich in einer Subshell als aktueller Benutzer ausgewertet, weshalb Sie sehen, was Sie tun.quelle
0
(Null), das ist genau das, was die Leute „root“ nennen. (Sie hätten Recht gehabt, wenn Siesudo
nur die Funktionen erweitert hätten , ohne die UID tatsächlich zu ändern. Aber das ist nicht der Fall.)sudo
Fall ist. Aber nach dem Lesen der Antwort von xyr scheint dies tatsächlich nicht der Fall gewesen zu sein.Die Unterschale (
whoami
) wird zuerst wie Sie ausgeführt, und das Ergebnis (myuser
) wird in densudo
Befehl eingefügt . wassudo
sieht istecho myuser
. Betrachten Sie es als Abkürzung für:quelle
Hier scheint es einige Vermutungen zu geben ...
Die Backticks machen offensichtlich das, was andere erklärt haben, erweitern sich,
whoami
bevor sie "sudo" aufrufen, und lassen die Backticks wie erwartet "return" zurück.Aber es ist nützlich zu verstehen, was tatsächlich mit sudo passiert (8). Also habe ich mir tatsächlich die Manpage angesehen!
"Die reale und effektive UID und GID sind so eingestellt, dass sie mit denen des Zielbenutzers übereinstimmen ..."
Es scheint also, dass das beobachtete Verhalten nichts mit dem Unterschied zwischen effektiver und realer Benutzer-ID zu tun hat.
Es ist auch illustrativ, "sudo printenv" zu machen und nur mit "printenv" zu vergleichen, was mich tatsächlich ein bisschen überrascht hat. Es zeigt, dass [i] einige [/ i] exportierte Variablen verfügbar sind und andere nicht: Es werden HOME, PATH, PS1, SHELL, TERM und EDITOR des aufrufenden Benutzers gemeldet, andere jedoch nicht wie MANPATH, CVSROOT, LD_LIBRARY_PATH oder ENV. Das scheint etwas seltsam, da es dazu führen kann, dass sich Programme anders verhalten als der ursprüngliche Benutzer oder als Root.
quelle
Mit sudo können Sie jeden Befehl mit Root-Rechten ausführen, jedoch nicht als Root-Benutzer. Der Grund, warum dies nützlich ist, ist, dass mit diesem Setup mehrere Personen Root-Rechte haben können, während die gesamte Protokollierung usw. weiterhin anzeigt, wer die Änderungen vorgenommen hat.
Dieses Setup ist besser als das Teilen von Root-Passwörtern. Als solches hat es ersetzt, einen Root-Benutzer auf vielen Distributionen einschließlich Ubuntu zu haben.
sudo su hingegen macht Sie zum Root-Benutzer und sollte daher nicht wirklich verwendet werden.
Dieser Unterschied erklärt auch Ihr beobachtetes (korrektes) Verhalten.
quelle
Sudo gewährt vorübergehend, wer auch immer Sie sind (vorausgesetzt, Sie dürfen in erster Linie sudo), Root-Berechtigungen.
Um root zu sein, musst du dich als root anmelden, der in Ubuntu standardmäßig blockiert ist.
Sie müssen vorsichtig sein, Sudo ist keine Wurzel. Wenn Sie zeigen möchten, dass Fred etwas als sudo ausführt, und die SUDO-Umgebungsvariablen überprüfen, ist SUDO_COMMAND möglicherweise am nützlichsten.
quelle