GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit `sudo`, aby zachoval $path?

Mám program, který je nainstalován ve vlastním adresáři pod /opt. Aby bylo snazší jej spouštět, upravil jsem svůj bashrc tak, aby do mé cesty přidal uvedený adresář:

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

To funguje dobře, pokud chci spustit program bez sudo. Pokud se to však pokusím spustit pomocí sudo, selže s chybou „příkaz nenalezen“.

$ sudo godi_console
sudo: godi_console: command not found

Kontrola proměnné PATH po použití sudo odhalí, že nezahrnuje stejnou PATH jako normální uživatel:

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Proč není PATH stejná? Dělám něco špatně? Jsem na Debianu Jessie, pokud to má nějaký význam.

Jedna věc, kterou jsem zkusil, bylo vyvolat /opt/godi/sbin/godi_console přímo a předat absolutní cestu ke spustitelnému souboru. Bohužel to v tomto konkrétním případě nepomohlo, protože samotná godi_console závisí na správném nastavení PATH.

Přijatá odpověď:

Vždy můžete:

sudo env "PATH=$PATH" godi_console

Jako bezpečnostní opatření v Debianu /etc/sudoerssecure_path možnost nastavena na bezpečnou hodnotu.

Všimněte si, že:

sudo "PATH=$PATH" godi_console

Kde sudo zpracovává úvodní argumenty obsahující = znaky jako samostatné přiřazení proměnných prostředí by také fungovaly při spuštění godi_console s vaším $PATH (na rozdíl od secure_path ) ve svém prostředí, ale neovlivní to sudo 's vyhledávací cesta pro spustitelný soubor, takže by nepomohlo sudo při hledání té godi_console .


Linux
  1. Jak nastavit vHosts v Apache

  2. Jak správně přidat cestu k cestě?

  3. Jak čistě přidat do $path?

  1. Jak na `alias Sudo !!`?

  2. Jak zpětně zajistit, aby skript běžel jako root?

  3. Jak vytvořit VPN

  1. Jak bych mohl přidat dir do $PATH v Makefile?

  2. Jak udělat alias pro dlouhou cestu?

  3. Jak zajistit, aby sdílené klíče .ssh/authorized_keys a sudo spolupracovaly?