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 suke 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. :)
sudosangat 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 dumpdan tar, masing-masing memerlukan akses root untuk mencadangkan disk sistem dengan benar.
Saya menyebutkan ini di sini karena itu berarti Anda dapat memberi seseorang sudohak istimewa tanpa memberi mereka sudo -satau sudo bashkemampuan. Mereka hanya memiliki izin yang mereka butuhkan untuk melakukan pekerjaan mereka, sedangkan dengan sumereka telah menjalankan seluruh sistem. Anda harus berhati-hati dengan ini: jika Anda memberi seseorang kemampuan untuk mengatakan sudo vi, misalnya, mereka dapat keluar vidan secara efektif memiliki kekuatan yang sama dengan sudo -s.
Karena mengambil kata sandi sudoer dan bukannya kata sandi root, sudomengisolasi izin antara banyak sudoer.
Ini menyelesaikan masalah administrasi dengan su, yaitu ketika kata sandi root berubah, semua orang yang harus mengetahuinya suharus diberitahu. sudomemungkinkan kata sandi sudoers berubah secara mandiri. Faktanya, adalah umum untuk mengunci kata sandi akun pengguna root pada suatu sistem dengan sudomemaksa 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 bashdan sudo -sadalah -slebih pendek dan memungkinkan Anda memberikan perintah untuk dieksekusi di shell default pengguna Anda dalam beberapa cara:
Anda bisa mengatakan sudo -s some-commandyang berjalan di some-commandbawah 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 sudopanggilan, menghindari keharusan mengetik sudoberulang kali.
Kedua perilaku tersebut bersifat opsional. Jauh lebih umum, Anda memberi -ssendiri, jadi itu hanya menjalankan shell pengguna Anda secara interaktif. Dalam mode itu, ini berbeda dari sudo bashyang mungkin menjalankan shell yang berbeda dari bash, karena terlihat pertama di SHELLvariabel lingkungan, dan kemudian jika itu tidak disetel, pada pengaturan shell login pengguna Anda, biasanya di /etc/passwd.
Shell dijalankan dengan sudo -smewarisi 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 -ipenambahan yang relatif baru sudo. Secara kasar, sudo -iadalah untuk sudo -ssebagai 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 -ijauh 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 PAGERjika Anda mengatakannya di man foobawah sudo -s.
Anda mungkin berkata, "Jika mereka dapat memodifikasi PAGER, mereka dapat memodifikasi PATH, dan kemudian mereka bisa mengganti sudoprogram jahat ," tetapi seseorang yang cukup paranoid dapat mengatakan /usr/bin/sudo /bin/bashuntuk 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 -ijuga mengubah direktori kerja Anda menjadi direktori home pengguna Anda, Anda mungkin masih ingin menggunakannya sudo -suntuk situasi-situasi di mana Anda tahu Anda ingin tetap berada di direktori yang sama dengan cdketika Anda berlari sudo. Ini masih aman untuk sudo -idan cdkembali ke tempat Anda, meskipun.
sudo su -cara ini Anda tidak perlu kata sandi root, dan-memastikan direktori home diatur dengan benar.