Nie wierzę, że moje pytanie jest klasycznym pytaniem env_keep, które czasami pojawia się ponownie. zachowanie zmiennych środowiskowych między powłokami.
Chcę zachować wyeksportowaną funkcję i wyeksportowaną zmienną środowiskową w nie tylko sudo -s
, ale także wtedy, gdy dana osoba działa sudo command
. Nie mogę edytować pliku / etc / sudoers, który wygląda tak:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Jestem jednak w stanie edytować /etc/sudoers.d
. Próbowałem Defaults! Env_reset, ale to nie pomaga. Próbowałem także env_keep, ale to też nie działa. W końcu próbowałem Defaults env_keep + = "mojafunkcja".
Kiedy mówię, to nie działa, to znaczy, że jeśli biegnę sudo -s
, a potem env
widzę, jest ochrona, jednak zmienne i funkcje nie są zachowane, jeśli biegnę sudo somecommand
. Celem jest zapewnienie, aby zmienna środowiskowa była zawsze przekazywana do pliku binarnego, niezależnie od tego, czy jest wywoływana jako zwykły użytkownik, czy jako root.
Krótko mówiąc, to działa:
test_var="hello world"
sudo -s
echo $test_var
Ale to nie działa i chciałbym
test_var="hello world"
sudo /bin/bash -c echo $test_var
Jeśli ktoś może doradzić, byłoby to bardzo wskazane. Nie jestem pewien, czy jest to możliwe, biorąc pod uwagę ograniczenia związane z niemożnością edycji / etc / sudoers, pomimo możliwości edycji /etc/sudoers.d.
Z góry dziękuję
sudo -E
rozwiązuje twój problem? Jeśli chcesz, nie musisz przepuszczać opcji za każdym razem, gdy możesz utworzyć aliassudo -E
.sudo -E echo $test_var
wtedy otrzymam odpowiedźHello world
.