Dengan su
, Anda menjadi pengguna lain - root secara default, tetapi berpotensi menjadi pengguna lain. Jika Anda berkata su -
, lingkungan Anda akan diganti dengan lingkungan login pengguna itu juga, sehingga apa yang Anda lihat tidak dapat dibedakan dengan masuk sebagai pengguna itu. Tidak ada cara sistem dapat mengatakan apa yang Anda lakukan sementara su
ke pengguna lain dari tindakan oleh pengguna itu ketika mereka login.
Hal-hal yang sangat berbeda dengan sudo
:
Perintah yang Anda jalankan sudo
dijalankan sebagai target pengguna - root secara default, tetapi dapat diubah dengan -u
- tetapi mencatat perintah yang Anda jalankan melaluinya, menandai mereka dengan nama pengguna Anda sehingga kesalahan dapat diberikan sesudahnya. :)
sudo
sangat fleksibel. Anda dapat membatasi perintah yang diberikan pengguna atau grup pengguna untuk dijalankan, misalnya. Dengan su
, semuanya atau tidak sama sekali.
Fitur ini biasanya digunakan untuk mendefinisikan peran. Misalnya, Anda dapat mendefinisikan grup "cadangan" yang diizinkan untuk dijalankan dump
dan tar
, masing-masing memerlukan akses root untuk mencadangkan disk sistem dengan benar.
Saya menyebutkan ini di sini karena itu berarti Anda dapat memberi seseorang sudo
hak istimewa tanpa memberi mereka sudo -s
atau sudo bash
kemampuan. Mereka hanya memiliki izin yang mereka butuhkan untuk melakukan pekerjaan mereka, sedangkan dengan su
mereka telah menjalankan seluruh sistem. Anda harus berhati-hati dengan ini: jika Anda memberi seseorang kemampuan untuk mengatakan sudo vi
, misalnya, mereka dapat keluar vi
dan secara efektif memiliki kekuatan yang sama dengan sudo -s
.
Karena mengambil kata sandi sudoer dan bukannya kata sandi root, sudo
mengisolasi izin antara banyak sudoer.
Ini menyelesaikan masalah administrasi dengan su
, yaitu ketika kata sandi root berubah, semua orang yang harus mengetahuinya su
harus diberitahu. sudo
memungkinkan kata sandi sudoers berubah secara mandiri. Faktanya, adalah umum untuk mengunci kata sandi akun pengguna root pada suatu sistem dengan sudo
memaksa semua tugas sysadmin dilakukan sudo
. Dalam sebuah organisasi besar dengan banyak sudoer tepercaya, ini berarti ketika salah satu sysadmin pergi, Anda tidak perlu mengubah kata sandi root dan mendistribusikannya ke admin yang masih ada.
Perbedaan utama antara sudo bash
dan sudo -s
adalah -s
lebih pendek dan memungkinkan Anda memberikan perintah untuk dieksekusi di shell default pengguna Anda dalam beberapa cara:
Anda bisa mengatakan sudo -s some-command
yang berjalan di some-command
bawah shell Anda. Ini pada dasarnya singkatan sudo $SHELL -c some-command
.
Sebagai gantinya, Anda dapat meneruskan perintah ke input standar shell sudo -s < my-shell-script
. Anda bisa menggunakan ini dengan heredoc untuk mengirim beberapa perintah ke satu sudo
panggilan, menghindari keharusan mengetik sudo
berulang kali.
Kedua perilaku tersebut bersifat opsional. Jauh lebih umum, Anda memberi -s
sendiri, jadi itu hanya menjalankan shell pengguna Anda secara interaktif. Dalam mode itu, ini berbeda dari sudo bash
yang mungkin menjalankan shell yang berbeda dari bash
, karena terlihat pertama di SHELL
variabel lingkungan, dan kemudian jika itu tidak disetel, pada pengaturan shell login pengguna Anda, biasanya di /etc/passwd
.
Shell dijalankan dengan sudo -s
mewarisi lingkungan pengguna Anda saat ini. Jika yang Anda inginkan sebenarnya adalah lingkungan yang bersih, seperti yang Anda dapatkan setelah masuk, yang Anda inginkan adalah sudo -i
penambahan yang relatif baru sudo
. Secara kasar, sudo -i
adalah untuk sudo -s
sebagai su -
adalah untuk su
: itu me-reset semua tetapi variabel lingkungan kunci dan menyuruhmu kembali ke direktori home pengguna Anda. Jika Anda juga tidak memberikan perintah untuk dijalankan di bawah shell itu melalui input standar atau sudo -i some-command
, itu akan menjalankan shell itu sebagai shell login interaktif, sehingga skrip startup shell pengguna Anda (mis. .bash_profile
) Dijalankan kembali.
Semua ini membuat sudo -i
jauh lebih aman daripada sudo -s
. Mengapa? Karena jika seseorang dapat memodifikasi lingkungan Anda sebelumnya sudo -s
, itu dapat menyebabkan perintah yang tidak diinginkan dijalankan. Kasus yang paling jelas adalah modifikasi SHELL
, tetapi juga bisa terjadi secara kurang langsung, seperti melalui PAGER
jika Anda mengatakannya di man foo
bawah sudo -s
.
Anda mungkin berkata, "Jika mereka dapat memodifikasi PAGER
, mereka dapat memodifikasi PATH
, dan kemudian mereka bisa mengganti sudo
program jahat ," tetapi seseorang yang cukup paranoid dapat mengatakan /usr/bin/sudo /bin/bash
untuk menghindari jebakan itu. Anda mungkin tidak begitu paranoid sehingga Anda juga menghindari jebakan dalam semua variabel lingkungan rentan lainnya . Apakah Anda juga ingat untuk memeriksa EDITOR
, misalnya, sebelum menjalankan perintah VCS ? Demikianlah sudo -i
.
Karena sudo -i
juga mengubah direktori kerja Anda menjadi direktori home pengguna Anda, Anda mungkin masih ingin menggunakannya sudo -s
untuk situasi-situasi di mana Anda tahu Anda ingin tetap berada di direktori yang sama dengan cd
ketika Anda berlari sudo
. Ini masih aman untuk sudo -i
dan cd
kembali ke tempat Anda, meskipun.
sudo su -
cara ini Anda tidak perlu kata sandi root, dan-
memastikan direktori home diatur dengan benar.