.png)
Ich habe Sudo-Zugriff auf den Server meines Freundes, auf dem CentOS 6.3 läuft, aber wenn ich versuche, einige Befehle auszuführen, sudo vim /var/www/html/index.html
erhalte ich eine Fehlermeldung. sudo: vim: command not found
Ich kann jedoch „ sudo su
und dann“ ausführen vim /var/www/html/index.html
und es funktioniert wie erwartet.
echo $PATH
und sudo echo $PATH
beide ergeben:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
ergibt jedoch:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Ich habe versucht hinzuzufügen
export PATH=$PATH:/usr/local/bin
wodurch /root/.bashrc
das Problem bei der Verwendung behoben wurde, sudo su
aber nicht nur sudo <command>
.
Wie komme ich sudo <command>
zur Arbeit?
Antwort1
Viele Systeme sind so konfiguriert, dass beim Ausführen sudo
alle nicht auf der Whitelist stehenden Werte aus der Umgebung gelöscht werden und die PATH-Variable auf einen bereinigten Wert zurückgesetzt wird.
Ersteres finden Sie als Defaults env_reset
und mehrere Defaults env_keep += "SOME_VARIABLE_NAME"
in /etc/sudoers
. Letzteres „sichere“ PATH
Überschreiben wird wie folgt angegeben Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
– löschen Sie diese Zeile, um dieses Verhalten beim sudo
ing zu entfernen.
Wie welche Umgebungsvariable behandelt wird, wird beim Ausführen sudo -V
als ausgegeben root
.
Wenn Sie diese Standardeinstellungen nicht löschen möchten, können Sie Programme immer mit ihrem vollständigen Pfad angeben ( sudo /usr/local/bin/vim
).
Alternativ können Sie Ihrem Konto auch die Erlaubnis SETENV
in der sudoers
Datei erteilen, zum Beispiel:
%wheel ALL=(ALL) SETENV: ALL
Dadurch können Sie Umgebungsstandards wie folgt überschreiben: sudo PATH=$PATH which vim
, da die Variable von Ihrer Shell interpretiert wird, bevor der Befehl ausgeführt wird, was zu einer Vererbung führt PATH
(die jedoch wahrscheinlich nicht Folgendes einschließt /sbin
usw.).
Antwort2
sudo echo $PATH
tut nicht, was Sie denken. $PATH
wird durch die (Ihre) Shell ersetztVorAusführen des Befehls.
Um das gewünschte Verhalten zu erreichen, können Sie verwenden sudo -i
.
AusMann sudo:
-Ich befehle]
Der-ich(Erstanmeldung simulieren) führt die Shell aus, die in derpasswd(5) Angabe des Zielbenutzers als Login-Shell. Dies bedeutet, dass loginspezifische Ressourcendateien wie
.profile
oder.login
von der Shell gelesen werden. Wenn ein Befehl angegeben wird, wird dieser zur Ausführung an die Shell übergeben.
Antwort3
Wie komme ich
sudo <command>
zur Arbeit?
Bis Sie das Problem mit den Pfaden gelöst haben, verwenden Sie einen vollständigen Pfadnamen
sudo /usr/local/bin/vim /var/www/html/index.html