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
, .profile
dan .bashrc
dieksekusi dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.
sudo -i
hampir 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
, .bashrc
atau .login
akan dibaca dan dieksekusi oleh shell.
sudo su
vs. sudo -s
sudo su
panggilan sudo
dengan perintah su
. Bash disebut sebagai shell non-login interaktif. Jadi bash
hanya 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 -s
membaca $SHELL
variabel dan mengeksekusi konten. Jika $SHELL
berisi /bin/bash
itu memanggil sudo /bin/bash
, yang berarti /bin/bash
dimulai sebagai shell non-login, jadi semua file dot tidak dieksekusi, tetapi bash
itu sendiri berbunyi. bashrc
dari pengguna panggilan. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda root, tetapi di lingkungan pengguna panggilan.
Kesimpulan
The -i
bendera telah ditambahkan ke sudo
dalam 2004 , untuk memberikan fungsi yang serupa dengan sudo su -
, sehingga sudo su -
menjadi acuan bagi sudo -i
dan 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 sudo
dirancang 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, sudo
diperluas dengan mekanisme seperti itu, karena orang-orang kesal mengapa harus menggunakan sudo
di depan setiap perintah.
Jadi makna sudo
disalahgunakan. sudo
dimaksudkan untuk mendorong pengguna untuk meminimalkan penggunaan hak akses root.
Apa yang kita miliki sekarang, sudo
menjadi 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 sudo
mungkin 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 sudo
selalu 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 su
akan ditinggalkan dan sudo
diganti su
sepenuhnya.
Karena itu saya pikir, ini akan menjadi yang terbaik untuk menggunakan sudo
mekanisme internal ( -s
, -i
) daripada mengandalkan alat lama seperti su
.
ubuntu
yang mencegah pengguna dari standarsu -
. Mereka menciptakan masalah dan sekarang ada diskusi tanpa akhir tentang bagaimana menyelesaikannya.