Jawaban:
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 -s
tidak. Dalam praktiknya, ini sering berarti bahwa variabel lingkungan Anda tidak akan beralih ke root
untuk sudo -s
. Perhatikan bahwa Anda dapat menjalankan hanya su
untuk tidak mendapatkan shell login, atau sudo -i
untuk mendapatkan shell login [tidak dalam semua versi].
Kedua, su
dan su -
beralih ke pengguna baru dengan meminta Anda untuk mengautentikasi sebagai pengguna baru. sudo -s
dan 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 ( sudo
bagian).
Jika pengguna root dikunci (seperti di Ubuntu), Anda tidak akan bisa login sebagai root su
. Dalam hal ini, Anda harus menggunakan sudo -s
atausudo -i
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.
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.
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).
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 ( su
atau 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 sudo
cara yang lebih halus, Anda harus melihat man sudoers
cara 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.
Pada sistem di mana akun pengguna super dinonaktifkan, seperti Mac OS X, su
tidak akan berfungsi; sudo -s
akan.
Juga, tampaknya tidak ada yang su -s
tersedia, setidaknya di komputer saya.
sudo
(yang bahkan tidak selalu diinstal).
Pendahuluan ini dapat membantu Anda. su
adalah 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.
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'.
sudo
tidak memberikan hak default untuk pengguna biasa. Pada sistem itu,su
adalah satu-satunya pilihan.