Apa perbedaan antara perintah "su -s" dan "sudo -s"?

23

Apa perbedaan antara dua perintah pengguna super, su -sdan sudo -s?

Keduanya memberi shell dengan akses ke akun superuser.

Callum
sumber

Jawaban:

30

Dalam praktiknya, mereka berdua akan menjadikan Anda superuser. Namun, mereka melakukan hal yang sedikit berbeda, dengan cara yang sedikit berbeda.

Pertama, su -mengalihkan Anda ke shell login, sedangkan sudo -stidak. Dalam praktiknya, ini sering berarti bahwa variabel lingkungan Anda tidak akan beralih ke rootuntuk sudo -s. Perhatikan bahwa Anda dapat menjalankan hanya suuntuk tidak mendapatkan shell login, atau sudo -iuntuk mendapatkan shell login [tidak dalam semua versi].

Kedua, sudan su -beralih ke pengguna baru dengan meminta Anda untuk mengautentikasi sebagai pengguna baru. sudo -sdan sudo -i(dan hanya biasa sudo foo) memungkinkan Anda menjalankan perintah yang Anda pra-otorisasi [lihat /etc/sudoers], mungkin dengan meminta Anda untuk mengkonfirmasi ID Anda saat ini .

Jika Anda ingin benar-benar imut, Anda juga dapat menjalankan sudo su -, yang akan meminta untuk login sebagai root ( su -) dijalankan oleh pengguna root ( sudobagian).

Jika pengguna root dikunci (seperti di Ubuntu), Anda tidak akan bisa login sebagai root su. Dalam hal ini, Anda harus menggunakan sudo -satausudo -i

Mikeage
sumber
5
Perlu juga dikatakan bahwa pada banyak distribusi sudotidak memberikan hak default untuk pengguna biasa. Pada sistem itu, suadalah satu-satunya pilihan.
Telemachus
12
su -s

Akan beralih ke pengguna (dalam hal ini root) dan meluncurkan shell yang Anda tentukan, atau salah satu dari beberapa metode lain untuk menentukan shell. Ini berguna jika Anda ingin menggunakan zsh atau shell lain sebagai root dengan sangat cepat ... dan untuk beberapa alasan Anda tidak menggunakan sudo.

sudo -s

Cukup jalankan shell menggunakan sudo, yang akan memberi Anda shell root. Anda bisa memberikan shell untuk itu juga.

su -s lebih tua, jauh lebih tua dari perintah sudo -s. Dugaan saya adalah bahwa pengembang mencoba membuatnya semudah mungkin untuk beralih menggunakan sudo.

Mark Turner
sumber
9

su adalah perintah untuk berubah ke pengguna lain, baik untuk menjalankan shell atau menjalankan perintah tertentu. Anda harus mengautentikasi sebagai pengguna lain. Jika Anda ingin su untuk melakukan root, Anda memerlukan kata sandi root.

sudo adalah perintah untuk mengeksekusi perintah lain (opsional shell) sebagai pengguna yang berbeda. Anda harus mengautentikasi sebagai pengguna Anda sendiri . Izin untuk menggunakan sudo (dan hal-hal spesifik yang dapat Anda lakukan dengannya) ditentukan oleh administrator di file sudoers.

Jika Anda memberi seseorang akses ke su (dengan, misalnya, memberi mereka kata sandi root), maka mereka dapat melakukan apa saja dengan su - jalankan perintah lain, buka shell, ubah kata sandi, login dari jarak jauh melalui ssh, dan sebagainya. Anda pada dasarnya memberi mereka akses ke akun lain, dengan 'su' menjadi satu hal yang dapat mereka lakukan dengannya.

sudo jauh lebih halus. Anda dapat memberikan hak istimewa kepada pengguna, atau ke grup. Anda dapat mengizinkan pengguna atau grup untuk sudo dalam jangka waktu tertentu (mis. Senin hingga Jumat, jam 9 pagi hingga jam 5 sore). Anda dapat menentukan daftar perintah tertentu yang diizinkan untuk dijalankan (mis. Hanya / usr / local / bin / run_backup) atau Anda dapat menentukan pengguna tertentu yang diizinkan untuk menjalankan perintah seperti (misalnya www, cadangan, staf, dll. ).

Selain fleksibilitasnya, sudo adalah solusi yang lebih baik dalam semua kasus, karena sudo tidak memerlukan akses ke apa pun yang belum dimiliki pengguna. Jika Anda memberi seseorang akses sudo, Anda dapat mencabutnya dengan menghapus baris mereka di file sudoers, atau menghapusnya dari grup sudoers. Jika Anda menghapus akun mereka, akses mereka hilang.

Jika Anda memberi mereka kata sandi root, bahkan dengan asumsi mereka tidak melakukan sesuatu yang tidak menyenangkan dengannya, maka mereka akan mengetahuinya selamanya. Jika Anda memiliki banyak orang yang memerlukan akses root untuk tugas administratif, ini berarti mengubah semua kata sandi root setiap kali seseorang pergi, atau dengan anggapan bahwa boleh saja mereka memiliki akses penuh ke sistem Anda setelah Anda pergi.

Dan Udey
sumber
penjelasan yang baik tentang perbedaan antara dua perintah su dan sudo.
John aka hot2use
5
  • su akan menanyakan kata sandi pengguna root .
  • sudo akan menanyakan kata sandi Anda (dan Anda perlu dibersihkan untuk akses sudo untuk melakukan itu).
badp
sumber
2
Umumnya ini adalah perilaku default untuk sudo, tetapi juga dapat dikonfigurasi untuk meminta Anda untuk root atau kata sandi lainnya.
theotherreceive
2

Dari Wikipedia :

su (kependekan dari pengguna pengganti atau pengguna beralih) adalah perintah Unix yang digunakan untuk menjalankan shell dari pengguna lain tanpa keluar.

Perintah terkait bernama sudo mengeksekusi perintah sebagai pengguna lain tetapi mengamati sekumpulan kendala tentang pengguna mana yang dapat mengeksekusi perintah mana yang dilakukan pengguna lain (umumnya dalam file konfigurasi bernama / etc / sudoers, paling baik diedit oleh perintah visudo). Tidak seperti su, sudo mengotentikasi pengguna terhadap kata sandi mereka sendiri daripada kata sandi pengguna target (untuk memungkinkan pendelegasian perintah khusus kepada pengguna tertentu pada host tertentu tanpa berbagi kata sandi di antara mereka dan sambil mengurangi risiko terminal yang tidak diawasi).

Yaakov Ellis
sumber
2

Satu hal yang tidak dikatakan sepenuhnya adalah ini: yang mana yang dapat Anda gunakan sering tergantung pada distribusi apa yang Anda gunakan dan siapa yang menjalankannya. Satu atau yang lain ( suatau sudo) mungkin tidak diatur untuk penggunaan penuh secara default. Jadi misalnya, seperti yang disebutkan beberapa orang, OS X dan Ubuntu menonaktifkan akun root ( su) secara default. Demikian pula, Debian tidak memberikan hak default kepada pengguna reguler sudo. (Pada semua sistem ini, Anda dapat mengubah default ini, tetapi hanya jika Anda memiliki semacam hak administratif untuk memulai. Saya kira kita sedang berbicara tentang situasi non-server dan Anda mengelola mesin karena kita menggunakan SU bukan dari SF, tetapi untuk berjaga-jaga.)

Terakhir, jika Anda ingin menggunakan sudocara yang lebih halus, Anda harus melihat man sudoerscara mengedit file / etc / sudoers . Namun, Anda tidak boleh mengeditnya dengan tangan. Gunakan program visudo - ini akan mencegah Anda menyimpan suntingan Anda kecuali mereka setidaknya waras minimal. Ini adalah perlindungan besar terhadap kesalahan sederhana yang dapat mengunci Anda dari hak admin sistem Anda sendiri.

Telemakus
sumber
1

Pada sistem di mana akun pengguna super dinonaktifkan, seperti Mac OS X, sutidak akan berfungsi; sudo -sakan.

Juga, tampaknya tidak ada yang su -stersedia, setidaknya di komputer saya.

jtbandes
sumber
Kebalikannya sering benar. Yaitu, pada banyak distribusi unix-like yang lebih lama, pengguna biasa tidak memiliki hak default di bawah sudo(yang bahkan tidak selalu diinstal).
Telemachus
1

Pendahuluan ini dapat membantu Anda. suadalah singkatan su root, dan Anda menjaga hak-hak Anda sebagai pengguna lain tanpa batas. Lebih berbahaya, tetapi juga lebih nyaman jika Anda melakukan banyak perintah akses root selama periode waktu tertentu.

Nikhil Chelliah
sumber
1

su pada dasarnya akan membuat shell login baru dengan hak pengguna lain (login) sudo hanya sementara akan memungkinkan Anda untuk mengeksekusi perintah menggunakan pengguna yang Anda tentukan. Pada beberapa UNIX seperti FreeBDS tidak ada opsi '-s'.

hendrasaputra
sumber