Untuk memohon shell login sudo
hanya menggunakan -i
. Ketika perintah tidak ditentukan Anda akan mendapatkan prompt shell login, jika tidak, Anda akan mendapatkan output dari perintah Anda.
Contoh (shell login):
sudo -i
Contoh (dengan pengguna yang ditentukan):
sudo -i -u user
Contoh (dengan perintah):
sudo -i -u user whoami
Contoh (pengguna cetak $HOME
):
sudo -i -u user echo \$HOME
Catatan: Karakter backslash memastikan bahwa tanda dolar mencapai shell pengguna target dan tidak ditafsirkan dalam shell pengguna panggilan.
Saya baru saja memeriksa contoh terakhir dengan strace yang memberi tahu Anda apa yang sebenarnya terjadi. Output di bawah ini menunjukkan bahwa shell sedang dipanggil dengan --login
dan dengan perintah yang ditentukan, seperti pada panggilan eksplisit Anda ke bash, tetapi di samping itu sudo dapat melakukan pekerjaannya sendiri seperti mengatur $HOME
.
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
Saya perhatikan bahwa Anda menggunakan -S
dan saya pikir itu umumnya bukan teknik yang baik. Jika Anda ingin menjalankan perintah sebagai pengguna yang berbeda tanpa melakukan otentikasi dari keyboard, Anda mungkin ingin menggunakan SSH sebagai gantinya. Ini berfungsi localhost
baik untuk host lain dan menyediakan otentikasi kunci publik yang berfungsi tanpa input interaktif apa pun.
ssh user@localhost echo \$HOME
Catatan: Anda tidak memerlukan opsi khusus dengan SSH karena server SSH selalu membuat shell login untuk diakses oleh klien SSH.