Seperti yang Anda nyatakan dalam pertanyaan Anda, perbedaan utama adalah lingkungan.
sudo su - vs. sudo -i
Dalam kasus sudo su -itu adalah shell login, jadi /etc/profile, .profiledan .bashrcdieksekusi dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.
sudo -ihampir sama dengan sudo su -The -i(mensimulasikan login awal) pilihan menjalankan shell yang ditentukan oleh masuknya database password dari target pengguna sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti .profile, .bashrcatau .loginakan dibaca dan dieksekusi oleh shell.
sudo su vs. sudo -s
sudo supanggilan sudodengan perintah su. Bash disebut sebagai shell non-login interaktif. Jadi bashhanya dieksekusi .bashrc. Anda dapat melihat bahwa setelah beralih ke root, Anda masih berada di direktori yang sama:
user@host:~$ sudo su
root@host:/home/user#
sudo -smembaca $SHELLvariabel dan mengeksekusi konten. Jika $SHELLberisi /bin/bashitu memanggil sudo /bin/bash, yang berarti /bin/bashdimulai sebagai shell non-login, jadi semua file dot tidak dieksekusi, tetapi bashitu sendiri berbunyi. bashrcdari pengguna panggilan. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda root, tetapi di lingkungan pengguna panggilan.
Kesimpulan
The -ibendera telah ditambahkan ke sudodalam 2004 , untuk memberikan fungsi yang serupa dengan sudo su -, sehingga sudo su -menjadi acuan bagi sudo -idan dimaksudkan untuk bekerja seperti itu. Saya pikir tidak masalah yang Anda gunakan, kecuali jika lingkungan tidak penting.
Tambahan
Poin dasar yang harus disebutkan di sini adalah yang sudodirancang untuk menjalankan hanya satu perintah tunggal dengan hak istimewa lebih tinggi dan kemudian menjatuhkan hak istimewa tersebut ke yang asli. Itu tidak pernah dimaksudkan untuk benar-benar mengganti pengguna dan membiarkan shell root terbuka. Seiring waktu, sudodiperluas dengan mekanisme seperti itu, karena orang-orang kesal mengapa harus menggunakan sudodi depan setiap perintah.
Jadi makna sudodisalahgunakan. sudodimaksudkan untuk mendorong pengguna untuk meminimalkan penggunaan hak akses root.
Apa yang kita miliki sekarang, sudomenjadi semakin populer. Ini terintegrasi di hampir setiap distribusi linux yang terkenal. Alat asli untuk beralih ke akun pengguna lain adalah su. Bagi seorang veteran sekolah tua, hal seperti itu sudomungkin tampak tidak perlu. Ini menambah kompleksitas dan berperilaku lebih mungkin untuk mekanisme yang kita tahu dari keluarga Microsoft, dan dengan demikian bertentangan dengan filosofi kesederhanaan sistem * nix.
Saya bukan benar-benar seorang veteran, tetapi juga menurut saya sudoselalu duri di sisi saya, sejak saat diperkenalkan dan saya selalu bekerja di sekitar penggunaan sudo, jika mungkin. Saya paling enggan untuk digunakan sudo. Di semua sistem saya, akun root diaktifkan. Tetapi hal-hal berubah, mungkin saatnya akan tiba, ketika suakan ditinggalkan dan sudodiganti susepenuhnya.
Karena itu saya pikir, ini akan menjadi yang terbaik untuk menggunakan sudomekanisme internal ( -s, -i) daripada mengandalkan alat lama seperti su.
ubuntuyang mencegah pengguna dari standarsu -. Mereka menciptakan masalah dan sekarang ada diskusi tanpa akhir tentang bagaimana menyelesaikannya.