Bagaimana Anda menggunakan sudo untuk menjalankan perintah sebagai pengguna root yang sebenarnya di Ubuntu? Saya awalnya berpikir ini adalah perilaku default sudo, sampai saya berlari:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
Namun, ini adalah tipe perilaku yang saya inginkan, tetapi hanya dalam satu baris:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Katakan saja sudo whoami .. mengembalikan rootJawaban:
Bahkan tidak menjalankannya sebagai root. Tetapi, apa yang terjadi pada Anda adalah bahwa tick kembali sedang dievaluasi sebelum
sudo
dijalankan, karena mereka diperlukan untuk mengevaluasi perintah. Lebih langsung, mengapa tidak hanya ini:Anda
whoami
kembali kutu sebenarnya dievaluasi dalam subkulit sebagai pengguna saat ini, itulah sebabnya mengapa Anda melihat apa yang Anda lakukan.sumber
0
(nol), yang merupakan apa yang orang sebut "root". (Anda akan benar jikasudo
hanya memperluas kemampuannya tanpa benar-benar mengubah UID. Tapi bukan itu yang dilakukannya.)sudo
dilakukan. Tetapi dari membaca jawaban xyr, sepertinya ini tidak benar-benar terjadi.Subshell (
whoami
) dijalankan pertama kali, seperti Anda, dan hasilnya (myuser
) ditempatkan ke dalamsudo
perintah; apa yangsudo
dilihat adalahecho myuser
. Anggap saja sebagai jalan pintas untuk:sumber
Tampaknya ada beberapa dugaan yang terjadi di sini ...
Backticks jelas melakukan apa yang orang lain jelaskan, memperluas
whoami
sebelum memanggil 'sudo', dan meninggalkan backticks kembali 'root', seperti yang diharapkan.Tetapi berguna untuk memahami apa yang sebenarnya terjadi dengan sudo (8). Jadi saya benar-benar melihat halaman manual!
"Uid dan gid yang nyata dan efektif diatur agar sesuai dengan pengguna target ..."
Jadi tampaknya perilaku yang diamati tidak ada hubungannya dengan perbedaan antara id pengguna efektif dan nyata.
Ini juga ilustratif untuk melakukan "sudo printenv" dan dibandingkan dengan hanya "printenv," yang sebenarnya sedikit mengejutkan saya. Ini menunjukkan bahwa [i] beberapa [/ i] variabel yang diekspor tersedia dan dan lainnya tidak: itu melaporkan pengguna, HOME, PATH, PS1, SHELL, TERM, dan EDITOR pengguna yang memohon, tetapi tidak yang lain seperti MANPATH, CVSROOT, LD_LIBRARY_PATH, atau ENV. Tampaknya agak aneh, karena dapat menyebabkan program berperilaku berbeda dari yang mereka lakukan baik sebagai pengguna asli, atau sebagai root.
sumber
sudo memungkinkan Anda untuk menjalankan perintah apa pun dengan hak akses root, tetapi tidak sebagai pengguna root. Alasan ini berguna adalah bahwa dengan pengaturan ini banyak orang dapat memiliki hak root namun semua logging dan sebagainya masih menunjukkan siapa yang melakukan perubahan.
Pengaturan ini lebih baik daripada berbagi kata sandi root. Karena itu telah diganti memiliki pengguna root di banyak distribusi termasuk Ubuntu.
sudo su di sisi lain menjadikan Anda pengguna root dan oleh karena itu sebaiknya tidak benar-benar digunakan.
Perbedaan ini juga menjelaskan perilaku Anda yang diamati (benar).
sumber
Sudo untuk sementara memberikan siapa Anda (mengingat Anda diizinkan untuk sudo sejak awal) hak istimewa tingkat root.
Untuk menjadi root, Anda harus masuk sebagai root yang diblokir di Ubuntu secara default.
Anda harus berhati-hati dengan ini, sudo bukan root. Jika Anda ingin menunjukkan bahwa Fred menjalankan sesuatu sebagai sudo, dan variabel lingkungan SUDO, SUDO_COMMAND mungkin yang paling berguna.
sumber