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.
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.
Odpowiedzi:
Możesz to zrobić bez wywoływania powłoki logowania:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
lub:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-pOpcja supolecenia zachowania zmiennych środowiskowych.
-pjest opcją su, nie sudow tym przypadku
-mzachowuje zmienną, inne mówią, jaka -cjest 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żyj sudo -u username command. Jeśli chcesz powłoki roota, uruchom sudo -ilub sudo -l. Jeśli aktywowałeś konto root, możesz również uruchomić susam, ale sudo suto po prostu nie jest przydatne. I tak, wiem, że widzisz to wszędzie.
To powiedziawszy, sudoma -Eprzełącznik, który zachowa środowisko sesji użytkownika:
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may
return an error if the user does not have permission to
preserve the environment.
Najpierw musisz wyeksportować zmienną, a następnie uruchomić sudo -E:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
To bash -cnie 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:
$ sudo -u bob echo $DUMMY ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected
D:dummy
env_keepw sudoers. 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_PRELOADa przeniesieniem LESSCHARDEF. Nie sądzę, żeby wygrana była wygraną ...
-E wykonuje za mnie pracę. Od człowieka sudo-
-E, Wskazuje na politykę bezpieczeństwa, która życzenia użytkownika do pre- służyć istniejących zmiennych środowiskowych. Polityka bezpieczeństwa może zwrócić błąd, jeśli użytkownik nie ma uprawnień do ochrony środowiska.--preserve-env
Poniżej znajduje się rozwiązanie, które nie wymaga zmiany polityki bezpieczeństwa.
Zignoruję tę suczęść, ponieważ możemy skorzystać z --useropcji sudo.
Chcemy przekazać zmienne środowiskowe do commanduruchomienia sudo. Nie sudozezwala 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 i sudomożna uruchomić powłokę z przekazanym do niej skryptem. Dlatego każ sudouruchomić skrypt, który ustawia zmienne środowiskowe.
var_a=someThing
var_b=someOtherThing
sudo bash -c "
export var_a=\"${var_a}\"
export var_b=\"${var_b}\"
the_command some_args
"
sudo -iu ec2-user echo $DUMMY?