Pertanyaan 'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - kapankah masalah yang digunakan, atau apakah itu penting?


Ketika saya melakukan sesuatu yang membutuhkan root diketik dalam lusinan kali berturut-turut, saya lebih memilih untuk mengganti sesi saya ke sesi root. Dalam berbagai tutorial dan instruksi yang saya gunakan di Internet, saya paham sudo su, sudo su -, sudo -i dan sudo /bin/bash digunakan untuk membuka sesi root, tetapi saya tidak jelas tentang perbedaan antara ini dan kapan atau apakah perbedaan itu penting.

Bisakah seseorang membersihkan ini untukku?


195
2017-11-12 23:30


asal


Anda lupa bertanya tentang sudo -s dan sudo su. - Radu Rădeanu
Terkait: Perbedaan antara "su", "sudo -s", "sudo -i" - Radu Rădeanu
Terkait: Apa perbedaan antara perintah 'sudo command' dan 'sudo sh? - Radu Rădeanu
Terkait: Apa perbedaan fungsional antara sudo su dan sudo -i? - Radu Rădeanu
@ RaduRădeanu Ketika saya mengetik pertanyaan di saya, saya mengulas pertanyaan yang disarankan dan tidak ada yang benar-benar menjawab pertanyaan lengkap saya. Hal yang sama berlaku untuk pertanyaan yang Anda tautkan. Meskipun mereka memang mengandung banyak informasi baru untuk saya, dan terima kasih karena telah menautkan ke mereka, saya menemukan mereka tidak selengkap yang diberikan oleh kekacauan pengguna di bawah ini, yang jauh lebih sesuai dengan apa yang saya cari. - Paul


Jawaban:


Untuk menjelaskan ini Anda perlu tahu apa yang dilakukan program:

su - Perintah su digunakan untuk beralih ke pengguna lain (s penyihir kamu ser), tetapi Anda juga dapat beralih ke pengguna root dengan menjalankan perintah tanpa parameter. su meminta Anda untuk memasukkan kata sandi pengguna, setelah mengetik kata sandi yang Anda ubah ke lingkungan pengguna.

sudo - sudo dimaksudkan untuk menjalankan satu perintah dengan hak akses root. Tapi tidak seperti itu su itu meminta Anda untuk kata sandi pengguna saat ini. Pengguna ini harus berada dalam file sudoers (atau grup yang ada di file sudoers). Secara default, Ubuntu "ingat" kata sandi Anda selama 15 menit, sehingga Anda tidak perlu mengetikkan kata sandi Anda setiap waktu.

bash - Antarmuka teks untuk berinteraksi dengan komputer. Penting untuk memahami perbedaan antara login, non-login, shell interaktif dan non-interaktif:

  • shell login: Log shell akan memasukkan Anda ke dalam sistem sebagai pengguna yang ditentukan, yang diperlukan untuk ini adalah nama pengguna dan kata sandi. Ketika kamu memukul ctrl+alt+F1 untuk masuk ke terminal virtual yang Anda dapatkan setelah berhasil masuk ke shell login.
  • shell non-login: Sebuah shell yang dieksekusi tanpa login, yang diperlukan untuk ini adalah pengguna yang sedang login. Ketika Anda membuka terminal grafis di gnome itu adalah shell non-login.
  • shell interaktif: Sebuah shell (login atau non-login) di mana Anda dapat secara interaktif mengetik atau menginterupsi perintah. Misalnya terminal gnome.
  • shell non-interaktif: A (sub) shell yang mungkin dijalankan dari proses otomatis. Anda tidak akan melihat input atau output.

sudo su Panggilan sudo dengan perintah su. Bash disebut sebagai shell non-login interaktif. Jadi bash hanya mengeksekusi .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 su - Kali ini adalah shell login, jadi /etc/profile, .profile dan .bashrc dijalankan dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.

sudo -i Ini hampir sama dengan sudo su - Opsi -i (simulasikan masuk awal) menjalankan shell yang ditentukan oleh entri basis data kata sandi dari pengguna target sebagai shell login. Ini berarti file sumber daya khusus login seperti .profile, .bashrc atau .login akan dibaca dan dieksekusi oleh shell.

sudo /bin/bash Ini berarti Anda menelepon sudo dengan perintah /bin/bash. /bin/bash dimulai sebagai shell non-login sehingga semua dot-file tidak dieksekusi, tetapi bash sendiri membaca .bashrc dari pemanggil pengguna. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda adalah root, tetapi di lingkungan pengguna yang menelepon.

sudo -smembaca $SHELL variabel dan mengeksekusi konten. Jika $SHELL mengandung /bin/bash itu memanggil sudo /bin/bash (Lihat di atas).

Memeriksa: Untuk memeriksa apakah Anda berada dalam shell login atau tidak (hanya berfungsi di bash karena shopt adalah perintah bawaan):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

257
2017-11-13 09:43



Hanya klarifikasi: sudo memungkinkan pengguna yang diizinkan untuk menjalankan perintah sebagai superuser atau pengguna lain. Bagaimanapun, +1 untuk usaha Anda. - Radu Rădeanu
@chaos Terima kasih atas jawaban luar biasa ini! Ini sebagian besar menjawab pertanyaan saya, jadi saya pergi ke depan dan menandai pertanyaan yang dijawab, tetapi saya tidak memahami kapan diinginkan untuk menjalankan shell tertentu. Saya benar-benar hanya menggunakan Ubuntu melalui baris perintah dan saya menemukan penggunaan yang paling umum untuk membuka file root sesi pengguna (vs. menggunakan sudoadalah ketika saya melakukan sesuatu yang membutuhkan banyak penggunaan root hak istimewa, seperti ketika menginstal sesuatu yang baru atau melakukan rekonfigurasi besar. Saya telah menggunakan sudo /bin/bash, tetapi ternyata metode itu memiliki rap yang buruk untuk beberapa alasan yang saya tidak mengerti. - Paul
Juga, lebih "benar" untuk mengatakan bahwa su singkatan dari pengguna berpindah, daripada pengguna super. Yaitu. jalankan skrip php: su www-data /usr/share/script.php atau hanya su-data www untuk shell interaktif. Tapi su tanpa nama pengguna akan mengasumsikan akun root (super user). - oblivian
Chaos - "shopt -q login_shell && echo 'Login shell' || echo 'No login shell'" Saran-saran seperti ini yang sering saya lihat, tetapi mengapa begitu lama? Operator && berarti jika kode keluar 0 lalu "lakukan perintah selanjutnya" dan pipa ganda (||) berarti lain (jika tidak 0) maka lakukan perintah ini. Jadi apa yang pada dasarnya dikatakan jika keluar kode 0 maka gema "Login Shell", jika keluar kode 1 (gagal) maka gema "No login". Mengapa tidak hanya "shopt -q login_shell; echo $?" $? berarti hasil / kode keluar dari perintah sebelumnya. Dalam kebanyakan, jika tidak semua program 0 berarti sukses, 1 atau lebih berarti gagal. Jadi jika gema adalah 0 = sukses ... - oblivian
@Paul: sudo -i disarankan. Baca di sini: ubuntuforums.org/showthread.php?t=1817402 dan di sini: unix.stackexchange.com/questions/98531/… - Marco Sulla