Kiat pro:Tidak pernah ada alasan bagus untuk menjalankan sudo su
. Untuk menjalankan perintah sebagai pengguna yang berbeda, gunakan sudo -u username command
. Jika Anda menginginkan shell root, jalankan sudo -i
atau sudo -l
. Jika Anda telah mengaktifkan akun root, Anda juga dapat menjalankan su
sendiri, tetapi sudo su
hanya tidak berguna. Dan ya, saya tahu Anda melihatnya di mana-mana.
Artinya, sudo
memiliki -E
sakelar yang akan menjaga lingkungan sesi pengguna:
-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.
Jadi, pertama-tama Anda harus mengekspor variabel Anda, lalu menjalankan sudo -E
:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
bash -c
tidak diperlukan. Namun, jika saya menjalankan sudo -Eu bob echo "$DUMMY"
, variabel diperluas sebelum root shell diluncurkan sehingga tidak menunjukkan bahwa perintah benar-benar berfungsi:
$ 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
Anda dapat melakukannya tanpa memanggil shell login:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
atau:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-p
pilihan su
perintah melestarikan variabel lingkungan.
-E melakukan pekerjaan untuk saya. Dari man sudo
-
-E
,--preserve-env
Menunjukkan kebijakan keamanan yang diinginkan pengguna untuk mempertahankan variabel lingkungan mereka yang ada. Kebijakan keamanan dapat mengembalikan kesalahan jika pengguna tidak memiliki izin untuk melestarikan lingkungan.