Ich habe auf dem Server meines Freundes Sudo-Zugriff, auf dem Centos-6.3 ausgeführt wird. Wenn ich jedoch versuche, einige Befehle auszuführen sudo vim /var/www/html/index.html
, wird eine Fehlermeldung angezeigt. sudo: vim: command not found
Ich kann sie jedoch ausführen sudo su
und dann vim /var/www/html/index.html
funktioniert sie 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
jedoch ergibt:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Ich habe versucht hinzuzufügen
export PATH=$PATH:/usr/local/bin
an dem /root/.bashrc
was wie behoben das problem bei der verwendung sudo su
aber nicht nur sudo <command>
.
Wie komme ich sudo <command>
zur Arbeit?
Antworten:
Bei der Ausführung
sudo
sind viele Systeme so konfiguriert, dass alle nicht auf der Whitelist aufgeführten Werte aus der Umgebung entfernt und die Variable PATH auf einen bereinigten Wert zurückgesetzt werden.Sie finden die ersteren als
Defaults env_reset
und mehrereDefaults env_keep += "SOME_VARIABLE_NAME"
in/etc/sudoers
. Die letztgenannte "sichere"PATH
Überschreibung ist wie folgt angegeben:Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
- Diese Zeile löschen, um dieses Verhalten bei dersudo
Eingabe zu entfernen .Wie welche Umgebungsvariable behandelt wird, wird gedruckt, wenn Sie
sudo -V
als ausführenroot
.Wenn Sie diese Standardeinstellungen nicht entfernen möchten, können Sie Programme immer mit ihrem vollständigen Pfad (
sudo /usr/local/bin/vim
) angeben .Alternativ können Sie zulassen, dass Ihr Konto
SETENV
in dersudoers
Datei enthalten ist. Beispiel:Auf diese Weise können Sie Umgebungsstandards wie die folgende überschreiben:
sudo PATH=$PATH which vim
Da die Variable von Ihrer Shell interpretiert wird, bevor der Befehl ausgeführt wird, führt dies zu einer geerbten VariablePATH
(die jedoch wahrscheinlich kein/sbin
usw. enthält).quelle
tut nicht was du denkst.
$PATH
wird durch die (Ihre) Shell ersetzt, bevor der Befehl ausgeführt wird.Um das gewünschte Verhalten zu erreichen, können Sie verwenden
sudo -i
.Vom Mann sudo :
quelle
Verwenden Sie einen vollständigen Pfadnamen, bis Sie das Problem mit den Pfaden gelöst haben
quelle