Ringkasan eksekutif: "root" adalah nama sebenarnya dari akun administrator. "sudo" adalah perintah yang memungkinkan pengguna biasa melakukan tugas administratif. "Sudo" bukan pengguna.
Jawaban panjang:
"root" (alias "pengguna super") adalah nama akun administrator sistem. Asal usul nama itu agak kuno, tapi itu tidak masalah.
Pengguna root memiliki id pengguna 0 dan secara nominal memiliki hak tak terbatas. Root dapat mengakses file apa pun, menjalankan program apa pun, menjalankan panggilan sistem apa pun, dan mengubah pengaturan apa pun. (Tapi lihat di bawah¹).
Sebelum penemuan perintah "sudo", jika Anda ingin melakukan tugas administratif, Anda harus login sebagai root, entah dengan cara mendapatkan prompt login², atau dengan su
perintah ("su" adalah kependekan dari pengguna pengganti.) ³
Itu sedikit merepotkan, dan juga tidak membiarkan Anda memberi pengguna sebagian kekuasaan administratif. Jadi perintah "sudo" (kependekan dari "user pengganti lakukan") diciptakan.
Perintah "sudo" memungkinkan Anda menjalankan perintah dengan hak superuser selama id pengguna Anda ada di file sudoers, memberi Anda otorisasi yang diperlukan.
Jadi, mis. sudo vi /etc/hosts
Akan memungkinkan Anda untuk mengedit file host seolah-olah Anda menjalankan sebagai root. Anda bahkan tidak memerlukan kata sandi root, cukup kata sandi login Anda sendiri.
Dan tentu saja, sudo su
akan memungkinkan Anda untuk menjadi root. Hasilnya sama seperti jika Anda telah login sebagai root atau menjalankan su
perintah, kecuali bahwa Anda tidak perlu mengetahui kata sandi root tetapi Anda harus berada di file sudoers.
File sudoers menentukan siapa yang dapat menggunakan perintah sudo dan apa yang dapat mereka lakukan dengannya.
File sudoers inilah yang memberi Anda banyak administrator administ. Secara efektif, administrator Anda adalah root, ditambah semua orang yang tercantum dalam file sudoers. Tanpa file sudoers, satu-satunya administrator adalah root.
Faktanya, di organisasi di mana orang lain mengelola komputer Anda untuk Anda, cukup umum untuk tidak mengetahui kata sandi root komputer Anda sendiri - selama Anda berada di file sudoers, itu tidak masalah.
Di satu perusahaan tempat saya bekerja, dengan server farm yang sangat besar, hanya sedikit sekali orang yang mengetahui kata sandi root. Sebagai gantinya, ada database yang diizinkan bekerja di server mana. Proses otomatis akan menambahkan Anda ke file sudoers dari server yang diizinkan untuk Anda akses, dan menghapus Anda ketika otorisasi Anda kedaluwarsa.
¹ Satu hal lagi: versi Unix modern sekarang dapat membatasi apa yang dapat dilakukan oleh pengguna root.
Di bawah SELinux (Security Enhanced Linux), ada secara efektif daftar kontrol akses yang menentukan program mana yang dapat melakukan apa, dan bahkan root tidak dapat melewati batasan itu.
Di bawah sistem Apple System Integrity Protection (SIP) (alias "rootless"), file dan direktori tertentu dikunci sehingga hanya aplikasi pada daftar putih yang sesuai yang dapat mengaksesnya.
Sistem ini ada untuk melindungi sistem dari kasus di mana pengguna jahat berhasil mendapatkan akses root. (Atau dalam beberapa kasus, untuk mencegah pengguna melakukan jailbreak terhadap perangkat yang disematkan.) Untuk alasan yang jelas, sangat sulit untuk melewati pembatasan ini, bahkan dengan akses root.
² Prompt "login:" adalah bagian kuno lain dari sejarah Unix, yang berasal dari saat kita semua menggunakan terminal ascii pada baris serial, alih-alih sistem jendela. Anda masih bisa mendapatkan prompt "login:" hanya dengan mengetikkan login
jendela terminal apa pun, atau dengan membuka koneksi ssh (atau telnet atau rsh) ke komputer Anda dari tempat lain. Anda bisa masuk sebagai pengguna lain dari sana jika mau. (Dan jika komputer Anda memiliki port serial, Anda masih dapat mengonfigurasinya untuk mengizinkannya masuk.)
³ Program individual juga dapat diberikan akses root. Program-program ini dapat melakukan apa saja yang dapat dilakukan oleh pengguna dengan akses root, bahkan ketika dijalankan oleh pengguna biasa. Ini biasanya terbatas pada tugas tertentu. Sebagai contoh, program crontab memiliki hak akses root sehingga dapat mengedit tabel cron. Jelas, "sudo" memiliki hak akses root sehingga dapat melakukan apa yang dilakukannya.
⁴ Saya akan membahas satu hal lagi yang saya bahas sebelumnya. Saya telah menggunakan "administrator" dan "root" secara bergantian, tetapi ada jenis administrator lainnya. Ini sering disebut "akun peran", yang berarti bahwa akun ini bukan milik manusia yang sebenarnya, tetapi ada untuk melakukan beberapa peran khusus pada sistem. Jika Anda melihat /etc/passwd
file di sistem Anda, Anda akan menemukan lusinan akun tersebut.
Misalnya, jika mysql diinstal pada sistem Anda, akan ada pengguna "mysql", dan semua file database, file konfigurasi, dan sebagainya semua akan dimiliki oleh pengguna itu. Hanya pengguna yang akan memiliki izin yang diperlukan untuk mengakses file dan menjalankan server mysql. Dalam arti tertentu, pengguna itu akan menjadi akun administrator, tetapi hanya untuk mysql.
Jika Anda perlu melakukan tugas administrasi basis data, Anda akan menjadi "mysql" dengan su mysql
perintah, atau menggunakan sudo
tempat file sudoers memberi Anda hak istimewa mysql untuk perintah khusus tersebut.