Adakah alasan yang baik untuk menjalankan sudo su?

78

Untuk meluncurkan shell root pada mesin di mana akun root dinonaktifkan, Anda dapat menjalankan salah satu dari:

  • sudo -i: jalankan shell login interaktif (baca /root/.bashrcdan /root/.profile)
  • sudo -s: jalankan shell interaktif non-login (baca /root/.bashrc)

Di dunia Ubuntu, saya sangat sering melihat sudo susaran sebagai cara untuk mendapatkan shell root. Mengapa menjalankan dua perintah terpisah ketika seseorang akan melakukannya? Sejauh yang saya tahu, sudo -isama dengan sudo su -dan sudo -ssama dengan sudo su.

Satu-satunya perbedaan tampaknya (membandingkan sudo -idi sebelah kiri dan sudo su -di kanan):

tangkapan layar meld membandingkan 'sudo -i' dan 'sudo su -'

Dan membandingkan sudo -s(kiri) dan sudo su(kanan):

tangkapan layar berbaur membandingkan 'sudo -s' dan 'sudo su'

Perbedaan utama (mengabaikan SUDO_foovariabel dan LS_COLORS) tampaknya merupakan XDG_foovariabel sistem dalam sudo suversi.

Apakah ada kasus di mana perbedaan itu menjamin menggunakan yang agak tidak sopan sudo su? Dapatkah saya memberi tahu orang (seperti yang sering saya lakukan) dengan aman bahwa tidak pernah ada gunanya berlari sudo suatau saya kehilangan sesuatu?

terdon
sumber
8
Saya tidak pernah mengerti sistem mewah seperti itu ubuntuyang mencegah pengguna dari standar su -. Mereka menciptakan masalah dan sekarang ada diskusi tanpa akhir tentang bagaimana menyelesaikannya.
jimmij
16
@jimmij Apakah Anda tidak perlu tahu kata sandi root su -? Tidakkah Anda berpikir hal itu menimbulkan lubang keamanan di lingkungan multi-pengguna, di mana lebih dari satu orang perlu memiliki akses root?
Erathiel
4
@Christopher Masalahnya bukan salah satu pengguna yang memiliki hak akses sudo atau kata sandi root untuk meretas sistem. Masalahnya adalah tentang keamanan kata sandi. Saat Anda mengganti kata sandi root, Anda harus memberi tahu semua pengguna yang membutuhkannya, yang mungkin sulit. Dengan sudo, Anda tidak mengalami kesulitan ini.
Huygens
4
Apa alat diff?
Josh The Geek
5
@jimmij Bagaimana cara Ubuntu mencegah penggunaan su -? Ya, seseorang harus mengatur kata sandi root, tapi itu sepele.
Phizes

Jawaban:

62

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.

kekacauan
sumber
4
Ah, jadi sebelum 2004 sebenarnya ada alasan untuk lari sudo su? Saat itu saya menggunakan distro tanpa sudo dan akun root aktif jadi saya tidak tahu. Itu mungkin menjelaskan prevalensi memo sudo di dunia Ubuntu.
terdon
8
Saya tidak pernah tahu tentang sudo -iatau sudo -ssebelumnya - saya telah menjalankan berbagai jenis UNIX sejak 1991 dan bagi saya sudo su -hanyalah kebiasaan yang sudah mendarah daging pada saat ini.
fluffy
2
Apakah sudo -ssama dengan sudo $SHELLitu?
Samuel Edwin Ward
3
(Setuju dengan @chaos) Alasan penggunaannya sudo su -adalah 1) itu berfungsi dan Anda tahu persis apa yang dilakukannya, dan 2) bahwa Anda tidak harus mengingat opsi lain untuk sudo(ketika Anda sudah tahu su -) dan 3) Anda tidak perlu Anda tidak harus mengingat versi sudoapa yang sedang Anda kerjakan saat ini. Mengapa mengingat satu hal sepele lagi ketika apa yang sudah Anda miliki berfungsi dengan baik? Apakah ada sesuatu yang su -ilebih baik selain menghindari entri log? Saya tidak sudo su -cukup menggunakan untuk mengkhawatirkan hal itu.
jrw32982
3
Saya baru saja melihat pembaruan, sangat bagus! Sebagai catatan, izinkan saya menyatakan bahwa saya juga memotong gigi * nix saya pada sistem tanpa sudodan sangat terbiasa su. Kombinasi keduanya yang menggangguku.
terdon
16

Untuk menjawab pertanyaan Anda secara langsung: tidak, tidak ada alasan bagus untuk melakukan ini. Juga, sudo su menghasilkan dua entri log ketika satu sudah cukup.

Saya telah melihat banyak orang melakukan ini, dan ketika saya bertanya mengapa mereka tidak lari saja sudo -s, jawabannya adalah mereka tidak tahu tentang -sbendera ke sudo, dan umumnya mereka beralih setelah saya tunjukkan.

Namun, ke daftar Anda sudo -sdan sudo -i, saya ingin menambahkan satu opsi lagi sudo -sE, yang merupakan jenis pengganti su -m. sudo -sEmenjaga lingkungan Anda termasuk direktori home. Ini memiliki risiko jika direktori home Anda tidak aman (di NFS). Tetapi di lingkungan di mana banyak orang menggunakan root, ini menyelamatkan Anda dari keharusan menyetujui isi .bashrcfile root . My .bashrcberisi banyak spesialisasi untuk root, jadi saya tidak mendapatkan lingkungan yang persis sama dengan root, tetapi setidaknya saya mendapatkan persis lingkungan yang saya inginkan.

pengguna3188445
sumber
4
Jika itu menjaga lingkungan Anda, termasuk $HOME, itu berarti semua file baru yang dibuat di bawah folder rumah dimiliki oleh root, bukan oleh Anda. Saya sudah mengalami ini menyebabkan banyak sulit untuk mendiagnosis kesalahan izin.
Eris
sudo -sEdan kemudian echo $HOMEberikan /rootpada CentOS 7, bash 4.2. -sEtampaknya tidak menyimpan direktori home seperti yang Anda nyatakan.
jeremysprofile