Warum kann ich für manche Befehle kein sudo verwenden? (z. B. vim)

Warum kann ich für manche Befehle kein sudo verwenden? (z. B. vim)

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.htmlerhalte ich eine Fehlermeldung. sudo: vim: command not foundIch kann jedoch „ sudo suund dann“ ausführen vim /var/www/html/index.htmlund es funktioniert wie erwartet.

echo $PATHund sudo echo $PATHbeide ergeben:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vimergibt jedoch:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Ich habe versucht hinzuzufügen

export PATH=$PATH:/usr/local/bin

wodurch /root/.bashrcdas Problem bei der Verwendung behoben wurde, sudo suaber nicht nur sudo <command>.

Wie komme ich sudo <command>zur Arbeit?

Antwort1

Viele Systeme sind so konfiguriert, dass beim Ausführen sudoalle 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_resetund 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 sudoing zu entfernen.


Wie welche Umgebungsvariable behandelt wird, wird beim Ausführen  sudo -Vals 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 SETENVin der sudoersDatei 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 /sbinusw.).

Antwort2

sudo echo $PATH

tut nicht, was Sie denken. $PATHwird 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 .profileoder .loginvon 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

verwandte Informationen