Tip pro profesionály:Pro spuštění sudo su
není nikdy dobrý důvod . Chcete-li spustit příkaz jako jiný uživatel, použijte sudo -u username command
. Pokud chcete root shell, spusťte sudo -i
nebo sudo -l
. Pokud jste aktivovali účet root, můžete také spustit su
sám, ale sudo su
prostě není užitečné. A ano, vím, že to vidíte všude.
To znamená sudo
má -E
přepínač, který zachová prostředí uživatelské relace:
-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.
Nejprve tedy budete muset exportovat svou proměnnou a poté spustit sudo -E
:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
bash -c
není potřeba. Pokud však spustím sudo -Eu bob echo "$DUMMY"
, proměnná se rozbalí před spuštěním kořenového shellu, takže nedemonstruje, že příkaz skutečně funguje:
$ 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
Můžete to udělat bez volání přihlašovacího shellu:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
nebo:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-p
možnost su
příkaz zachovat proměnné prostředí.
-E to udělá za mě. Od muže sudo
-
-E
,--preserve-env
Označuje bezpečnostní politiku, že si uživatel přeje zachovat své stávající proměnné prostředí. Bezpečnostní politika může vrátit chybu, pokud uživatel nemá oprávnění k ochraně prostředí.