To je obvykle nastaveno pomocí secure_path
možnost v /etc/sudoers
. Od 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.
Chcete-li spustit příkazy, které nejsou ve výchozím nastavení $PATH
, můžete buď
-
Použijte úplnou cestu:
sudo ~/bin/my-command
; nebo -
Přidejte adresář obsahující příkaz do
secure_path
. Spusťtesudo visudo
a upravte zabezpečenou cestu:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Uložte soubor a při příštím spuštění
sudo
, adresář~/bin
bude ve svých$PATH
.
Toto jsem použil pro řešení:
sudo cp $(which my-command) /usr/bin
...
which
příkaz se provádí v podshellu, který není root, takže je schopen najít my-command
, pak sudo zkopíruje spustitelný soubor do cesty, která má root
uživatel může přistupovat. Není to skvělé pro zabezpečení, ale bylo v pořádku, když jsem spouštěl bitovou kopii dockeru, která byla zničena hned po spuštění příkazu.