Dies wird normalerweise durch den secure_path
gesetzt Option in /etc/sudoers
. Ab man sudoers
:
secure_path Path used for every command run from sudo. If you don't
trust the people running sudo to have a sane PATH environ‐
ment variable you may want to use this. Another use is if
you want to have the “root path” be separate from the “user
path”. Users in the group specified by the exempt_group
option are not affected by secure_path. This option is not
set by default.
Um Befehle auszuführen, die nicht im Standard $PATH
sind , können Sie entweder
-
Verwenden Sie den vollständigen Pfad:
sudo ~/bin/my-command
; oder -
Fügen Sie das Verzeichnis, das den Befehl enthält, zu
secure_path
hinzu . Führen Siesudo visudo
aus und bearbeiten Sie die sichere Pfadzeile:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Speichern Sie die Datei und führen Sie beim nächsten Mal
sudo
aus , das Verzeichnis~/bin
wird in seinem$PATH
sein .
Dies ist, was ich für eine Problemumgehung verwendet habe:
sudo cp $(which my-command) /usr/bin
...
Die which
Der Befehl wird in einer Nicht-Root-Subshell ausgeführt, sodass er my-command
finden kann , dann kopiert sudo die ausführbare Datei in einen Pfad, der root
Benutzer zugreifen kann. Nicht gut für die Sicherheit, aber es war in Ordnung für mich, ein Docker-Image auszuführen, das direkt nach der Ausführung des Befehls zerstört wurde.