Jako przykład mojego pytania mój ~/.bashrc
plik zawiera następujące wiersze:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH
export LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so
aby Numpy (Python) mógł znaleźć biblioteki, które musi uruchomić, ponieważ jest budowany z kompilatorami MKL i Intel. Ten przepływ pracy nie jest najlepszy, ale to już inna historia.
Moje pytanie brzmi: w jaki sposób mogę przekazać dowolne zmienne (takie jak te w ~/.bashrc
), kiedy uruchamiam program z 'sudo' (ale nie rootem)?
Obecnie, jeśli uruchomię:
sudo python -c "import numpy"
Dostaję błąd:
ImportError: libimf.so: cannot open shared object file: No such file or directory*
Niektóre sugestie co sudo -i
albo sudo -E
nie robi nic tu zmienić.
Edytować:
Nie mogę odpowiedzieć na moje pytanie (za mało punktów: D), ale skomentuję tutaj, mając nadzieję, że inni początkujący użytkownicy Linuksa zastanawiają się nad sudo
pułapkami.
[Tylko tymczasowo!] To działa dla mnie ( ~/.bashrc
):
alias sudo='sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
Wspomniana
-E
opcja wydaje się działać dobrze:źródło
sudo python -c "import numpy"
zLD_LIBRARY_PATH
iLD_PRELOAD
zdefiniowane jako napisane powyżej?SECURITY NOTES
nasudo
stronie podręcznika.man sudo
nie wyjaśnia tego, a kiedy użytkownik próbuje zastosować wskazane tam referencje, bardzo łatwo jest zniechęcić się wszystkimi gałęziami, których należy przestrzegać, aby móc odszyfrować przypuszczalne znaczenie.Możesz użyć
-E
opcji sudo, aby zachować obecne środowisko (jeśli masz do tego uprawnienia)źródło
Trzeba zmieniać swoich
sudoers
przezsudo visudo
co prawdopodobnie masz włączoną wtyczkę polityki bezpieczeństwa, która będzie używana zamiastPATH
przezsecure_path
opcję. Dodaj ścieżkę do listy, aenv_keep
zamiast tego możesz również użyć , na przykład:Aby sprawdzić, czy twój
PATH
jest przesłonięty, uruchom następujące polecenie:Zobacz także: Dlaczego zmienne PATH różnią się podczas uruchamiania przez sudo i su? w Unix SE
źródło
env_keep
nie działa na ŚCIEŻCE (w tym sensie, żesudo
nadal używa gosecure_path
, szukając polecenia)To działa dla mnie (
~/.bashrc
):Źródło: zgodnie z edycją OP
źródło
sudo
mniej bezpieczne