Zasadniczo muszę to zrobić:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
To nie działa Jak mogę przekazać zmienną env $ DUMMY do su? -p nie działa z -l.
linux
sudo
environment-variables
su
Umang
źródło
źródło
sudo -iu ec2-user echo $DUMMY
?Odpowiedzi:
Możesz to zrobić bez wywoływania powłoki logowania:
lub:
-p
Opcjasu
polecenia zachowania zmiennych środowiskowych.źródło
-p
jest opcjąsu
, niesudo
w tym przypadku-m
zachowuje zmienną, inne mówią, jaka-c
jest różnica? I jeden z komentarzy w tych dniach odpowiedzi-E
stackoverflow.com/questions/10488758/…Wskazówka: nigdy nie ma dobrego powodu, aby biegać
sudo su
. Aby uruchomić polecenie jako inny użytkownik, użyjsudo -u username command
. Jeśli chcesz powłoki roota, uruchomsudo -i
lubsudo -l
. Jeśli aktywowałeś konto root, możesz również uruchomićsu
sam, alesudo su
to po prostu nie jest przydatne. I tak, wiem, że widzisz to wszędzie.To powiedziawszy,
sudo
ma-E
przełącznik, który zachowa środowisko sesji użytkownika:Najpierw musisz wyeksportować zmienną, a następnie uruchomić
sudo -E
:To
bash -c
nie jest potrzebne. Jednak jeśli uruchomięsudo -Eu bob echo "$DUMMY"
, zmienna zostanie rozwinięta przed uruchomieniem powłoki root, więc nie pokazuje, że polecenie faktycznie działa:źródło
env_keep
wsudoers
. Być może słuszne:Defaults env_keep += "DUMMY"
.sudo
. Jest to również bardziej kłopotliwe dla pojedynczej zmiennej. Jest to przydatne tylko w przypadku czegoś, co zawsze powinno być eksportowane.LD_PRELOAD
a przeniesieniemLESSCHARDEF
. Nie sądzę, żeby wygrana była wygraną ...-E wykonuje za mnie pracę. Od człowieka
sudo
-źródło
Poniżej znajduje się rozwiązanie, które nie wymaga zmiany polityki bezpieczeństwa.
Zignoruję tę
su
część, ponieważ możemy skorzystać z--user
opcjisudo
.Chcemy przekazać zmienne środowiskowe do
command
uruchomieniasudo
. Niesudo
zezwala jednak na przekazywanie zmiennych środowiskowych do komendy (istnieje uzasadniony powód bezpieczeństwa, niektóre zmienne mogą być niebezpieczne). Powłoki można używać do ustawiania zmiennych środowiskowych isudo
można uruchomić powłokę z przekazanym do niej skryptem. Dlatego każsudo
uruchomić skrypt, który ustawia zmienne środowiskowe.źródło