Apa perbedaan fungsional antara sudo su dan sudo -i?

19

Mengapa satu lebih disukai daripada yang lain dalam contoh ini?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Harap berikan tautan ke dokumentasi Ubuntu.

cabai555
sumber
Harap pertimbangkan kembali jawaban "diterima" Anda. Yang memilih paling rendah sebenarnya adalah satu-satunya yang benar.
Kyle Strand

Jawaban:

15

The sudo superintah singkatan dari "switch user", dan memungkinkan Anda untuk menjadi pengguna lain. Ini memungkinkan pengguna yang diizinkan untuk menjalankan perintah sebagai superuser atau pengguna lain, sebagaimana ditentukan dalam file sudoers.

Opsi i (mensimulasikan login awal) menjalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti .profile atau .login akan dibaca oleh shell. Jika suatu perintah ditentukan, perintah itu diteruskan ke shell untuk dieksekusi melalui opsi shellc shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan.

Sumber: ManPage

Mitch
sumber
1
"Menggunakan su menciptakan masalah keamanan, dan pada dasarnya berbahaya." Apa?
Stop Harming Monica
1
Jika Anda menjalankan sudo suAnda diminta kata sandi, bukan kata sandi root. Pengguna root bahkan tidak perlu memiliki kata sandi. Bagaimanapun juga, jika admin menggunakan kata sandi root, itu tidak berarti bahwa semua pengguna biasa mengetahuinya.
Stop Harming Monica
2
Tidak, tidak akan. sudoberjalan susebagai root, dan root bisa suke pengguna mana pun tanpa mengetahui kata sandi mereka. Kesalahpahaman mendasar tentang cara kerja sistem yang layak mendapatkan IMO downvote.
Stop Harming Monica
3
Dan menghapus komentar Anda hanya menambah kebingungan.
Stop Harming Monica
1
Anda tidak membuatnya lebih baik. sudo -ijuga tidak akan meminta kata sandi root, jadi tidak relevan dengan pertanyaan.
Stop Harming Monica
14

sudo suhanya mengubah pengguna saat ini untuk melakukan root. Pengaturan lingkungan (seperti PATH) tetap sama.

sudo -i menciptakan lingkungan baru seolah-olah root baru saja masuk.

Perbedaannya lebih terlihat jika Anda menggunakan pengguna lain. Setelah sudo su bobAnda akan menjadi bob, tetapi di tempat yang sama. Setelah sudo -i -u bobAnda menjadi bob, di direktori home bob, dengan shell default bob dan dengan bob .profiledan semua skrip login lainnya telah dijalankan.

Lihat man sudountuk detail lebih lanjut tentang apa yang -idilakukan. Sayangnya, man sudetailnya ringan.


Menemukan versi man su(dari login-1: 4.1.4.2 + svn3283-3ubuntu5.1) yang memiliki yang berikut sebagai berikut:

Reset $ PATH sesuai dengan opsi /etc/login.defs ENV_PATH atau ENV_SUPATH (lihat di bawah);

$ IFS diatur ulang ke “<spasi> <tab> <newline>”, jika disetel.

Perhatikan bahwa perilaku default untuk lingkungan adalah sebagai berikut:

Variabel lingkungan $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH, dan $ IFS diatur ulang.

Jika --login tidak digunakan, lingkungan akan disalin, kecuali untuk variabel di atas.

Jika --login digunakan, variabel lingkungan $ TERM, $ COLORTERM, $ DISPLAY, dan $ XAUTHORITY disalin jika disetel.

Lingkungan lain mungkin diatur oleh modul PAM.

Jadi apakah dan sejauh mana sudo superubahan lingkungan tergantung pada distribusi dan pengaturan Anda. Dengan demikian sudo -isecara teori lebih portabel.

Berhenti Membahayakan Monica
sumber
su tidak mengubah pengaturan lingkungan, dan dapat digunakan untuk mensimulasikan login menggunakan -atau -l. Bahkan tanpa -l, $PATH yang berubah. Uji klaim ini sebelum mengajukannya! (Apakah maksud Anda itu PWDtetap sama?)
Kyle Strand
Pertanyaan sebenarnya adalah, apakah ada perbedaan antara sudo su -dan sudo -i?
Kyle Strand
1
Anda jelas menaruh beberapa pemikiran dalam hal ini dan benar-benar melakukan beberapa pengujian di shell, jadi saya minta maaf atas komentar "menguji klaim ini". Yang mengatakan, pada sistem saya saya amati bahwa $PATHitu berubah ketika saya gunakan sutanpa sudo(menggunakan kata sandi root). Menurut info su(yang mungkin merupakan hal yang lebih baik untuk ditautkan dalam jawaban Anda), sumemang membaca entri kata sandi untuk pengguna yang Anda menjadi. Mungkin $PATHperubahan yang saya amati tergantung pada sistem (I'm on Debian 7).
Kyle Strand
1
Hmmm. man suKata saya (yang lebih panjang dari yang Anda tautkan) mengatakan bahwa itu bagian dari shadow-utils 4.1.5.1. manHalaman saya juga mengatakan bahwa $PATHini diatur bahkan jika --preserve-environmentdigunakan. Jadi saya kira itu hanya perbedaan antara versi yang berbeda su.
Kyle Strand
1
Perilaku ini juga dipengaruhi oleh konfigurasi PAM Anda. /etc/pam.d/sudodan /etc/pam.d/sudapat diatur untuk melakukan hal yang sama sekali berbeda atau persis sama.
Stop Harming Monica
7

Masalah utama adalah salah satu (tidak begitu) pengaturan lingkungan waras.

Menggunakan sudo sushell baru mendapatkan lingkungannya dari pengguna yang mengeluarkan perintah - yang mungkin bermasalah.

Dengan sudo -iAnda mendapatkan shell root bersih.

Lihat Catatan khusus tentang sudo dan kerang

Tetaplah mengamati bahwa jarang diperlukan sama sekali untuk membuat shell root.

Guntbert
sumber
"Catatan khusus" yang Anda tautkan sudo -imirip dengan sudo su -, yang sebenarnya tidak mendapatkan lingkungannya dari pengguna yang mengeluarkan perintah.
Kyle Strand
@KyleStrand thx untuk menunjukkan ini - itu salah ketik, pertanyaannya benar-benar tentang sudo suvs sudo -i.
guntbert