Mengapa sudo lebih baik daripada sudo su?

28

Saya telah melihat banyak komentar di sini di Tanya Ubuntu tentang preferensi dalam menggunakan sudo -sdaripada sudo su.

Bagi saya, kedua perintah itu melakukan hal yang persis sama. Tetapi mengapa sudo -sseharusnya lebih baik?

fitojb
sumber
1
Saya pikir sudo -iatau sudo sulebih baik daripada sudo -suntuk alasan yang disebutkan di sini: ubuntuforums.org/showpost.php?p=6188826&postcount=4 Juga: ini adalah kemungkinan duplikat dari superuser.com/questions/29/…
atur
Saya pikir pertanyaan ini harus dipindahkan ke unix.stackexchange.com
igi

Jawaban:

26

Saya pikir sudo -stidak "lebih baik", hanya saja berbeda.

sudo -s

menyimpan direktori $ HOME Anda, jadi ketika Anda memulai program, mereka akan menggunakan file konfigurasi Anda (dan bukan root) dll. Kerugian: mereka juga dapat mengubah kepemilikan file Anda di direktori $ HOME, contoh khasnya adalah .Xauthorityfile, tetapi saya tidak pernah mengalami masalah dengan itu.

sudo su atau sudo -i

program akan menggunakan direktori home root dan file konfigurasinya. Ini mungkin lebih intuitif, tetapi itu juga berarti bahwa itu tidak akan menggunakan konfigurasi apa pun yang mungkin Anda tetapkan untuk diri sendiri (alias, bash history, ...).

mengatur
sumber
1
Oke, sekarang saya mengerti perbedaannya. Terima kasih!
fitojb
1
"sudo su" tidak sama dengan "sudo -i". "sudo -i" sama dengan "sudo su -" tetapi "sudo su -" menjaga direktori kerja saat ini sementara "sudo -i" memindahkan Anda ke rumah root
Gregory Pakosz
13

Karena sudo -stidak akan mengubah variabel lingkungan Anda, terutama $HOMEyang akan tetap ada HOME=/home/USER. Jika Anda menggunakan sudo suini akan berubah HOME=/rootyang dapat memiliki efek samping negatif ketika program Anda mulai mencoba mengakses direktori home pengguna Anda.

Jadi pada dasarnya itu seperti sudovs gksudoketika menjalankan program grafis.

htorque
sumber
5

Selain perbedaan yang telah disebutkan dengan variabel lingkungan, saya menemukan sudo sukonyol dan boros karena Anda meminta sudountuk menjalankan susebagai root, dan meminta untuk menjalankan shell sebagai root. Mengapa meminta sebuah program untuk meminta sebuah program untuk memberi Anda shell root, ketika Anda bisa meminta program pertama memberi Anda shell itu? Apakah itu penting secara praktis? Tidak, saya hanya bertele-tele.

psusi
sumber
Anda benar, itu agak berlebihan.
fitojb
Yah, tidak sepenuhnya begitu: jika Anda menggunakan sudo suuntuk menjadi root, ya, langsung saja sudo -i, misalnya. Tapi itu tidak membantu ketika Anda ingin menjadi pengguna yang berbeda: sudo su - myuser.
hggdh
2
Ada perbedaan lain: sudo -iakan berubah ke /rootdirektori dan sudo suakan tetap di direktori Anda.
laurent
1
@ hggdh sudo -u myuser,.
psusi
3

Saya tidak setuju dengan jawaban lain ketika mempertimbangkan kasus ketika Anda ingin masuk sebagai pengguna yang tidak memiliki shell. Itu adalah kasus yang sangat umum dengan pengguna yang ditugaskan ke layanan.

Menggunakan "sudo su" akan memulai shell yang ditentukan oleh pengguna. Namun dalam kasus pengguna yang ditugaskan untuk proses server, shell adalah / usr / bin / false dan logging akan gagal. Sebaliknya, Anda harus memasukkan sebagai:

sudo -sHu <server-user>

yang akan masuk Anda dan cd ke jalur home-nya, bahkan jika pengguna tidak memiliki shell yang ditugaskan

SystematicFrank
sumber