Pekerjaan sehari-hari — menulis dokumen, membolak-balik folder, menjelajah web — tidak membutuhkan hak istimewa apa pun, dan itu memang semestinya. Linux menyediakan akun root dengan kekuasaan penuh atas sistem, tetapi memakainya untuk semua keperluan berarti setiap kesalahan ketik berpotensi merusak keseluruhan sistem. Perintah sudo mengambil jalan tengah: kita tetap bekerja sebagai user biasa, lalu menaikkan hak hanya untuk satu perintah yang benar-benar membutuhkannya. Chapter ini membahas akun root, cara kerja sudo, serta file /etc/sudoers yang menentukan siapa boleh melakukan apa.

Akun root: UID 0 Tanpa Pembatasan #

Kernel tidak pernah mengenal nama login — yang diperiksanya adalah angka UID, sebagaimana dibahas pada Chapter User dan Group Identifiers . Angka 0 mendapat perlakuan khusus: proses dengan UID 0 melewati hampir seluruh pemeriksaan permission. Root bisa membaca dan menulis file apa pun, menghentikan proses siapa pun, mengganti kepemilikan file, mengikat port di bawah 1024, dan memasang filesystem.

Justru karena itulah login sebagai root sepanjang hari dihindari. Kesalahan ketik seperti rm -rf pada path yang salah langsung melumpuhkan sistem tanpa ada permission yang mencegah; jejak audit menjadi kabur karena tindakan hanya tercatat atas nama root, bukan nama manusianya; dan aplikasi yang berjalan sebagai root mewarisi seluruh kekuasaan itu, sehingga satu celah kecil berakibat besar.

sudo: Elevasi Hak Per Perintah #

Nama sudo adalah singkatan substitute user do — menjalankan satu perintah sebagai user lain, secara bawaan sebagai root. Password yang diminta adalah password user kita sendiri, bukan password root; dengan demikian password root bahkan bisa dibiarkan terkunci. Berikut tampilan pemanggilan yang paling sering dijumpai:

console
$ sudo systemctl restart nginx
[sudo] password for budi:
$

Kita mengetik password tanpa gema di layar, lalu perintah berjalan. Verifikasi password itu sendiri dikerjakan oleh PAM — kerangka autentikasi yang dibahas pada Chapter Authentication Basics . sudo lalu mengingat keberhasilan itu selama 15 menit per terminal, sehingga pemanggilan berikutnya tidak menanya lagi. Perintah sudo -v menyegarkan batas waktu itu, sudo -k menghapusnya, sudo -u siti whoami menjalankan perintah sebagai user lain, dan sudo -l mendaftar perintah apa saja yang boleh kita jalankan.

Dibanding su — yang meminta password root lalu membuka shell penuh sebagai root — sudo jauh lebih terkontrol: hak diberikan per perintah, per user, bahkan per host, dan setiap pemanggilannya tercatat di log autentikasi.

File /etc/sudoers: Siapa Boleh Apa #

Seluruh kebijakan sudo tersimpan di file /etc/sudoers — dan file ini memang tidak diperuntukkan dibaca sembarangan. Kita periksa dulu bentuk perlindungannya:

bash
stat -c '%a %U %G %n' /etc/sudoers

Output yang Dihasilkan:

text
440 root root /etc/sudoers

Mode 440 berarti hanya root yang boleh membaca dan tidak ada bit tulis bagi siapa pun — file ini memang tidak dimaksudkan diedit secara langsung. Sebagai user biasa, kita bahkan tidak bisa membacanya:

bash
cat /etc/sudoers 2>&1

Output yang Dihasilkan:

text
cat: /etc/sudoers: Permission denied

Ditolak dengan Permission denied — konfigurasi kekuasaan memang bukan bacaan umum. Lalu bagaimana sudo sendiri bisa bekerja sebagai user biasa? Jawabannya: program /usr/bin/sudo dipasang dengan permission khusus setuid root:

bash
stat -c '%A %a %U %G %n' /usr/bin/sudo

Output yang Dihasilkan:

text
-rwsr-xr-x 4755 root root /usr/bin/sudo

Huruf s pada posisi execute owner menandakan setuid: begitu dipanggil, proses sudo berjalan dengan hak root, memeriksa /etc/sudoers, meminta password, lalu memutuskan boleh atau tidak. Mekanisme setuid ini dibedah tuntas pada Chapter Special Permissions .

Setiap baris aturan di /etc/sudoers berformat user host=(runas) commands. Berikut contoh tampilan isi file tersebut pada satu mesin kantor:

text
Defaults env_reset
root    ALL=(ALL:ALL) ALL
budi    laptop-budi=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
siti    server-kantor=(root) /usr/bin/systemctl restart nginx

Mari kita baca kelima barisnya satu per satu:

  1. Baris 2 (root ...): user root boleh menjalankan perintah apa pun, sebagai user mana pun, dari host mana pun. Tiga ALL pertama berturut-turut berarti semua host, semua user dan group tujuan, semua perintah.
  2. Baris 3 (budi ...): budi memperoleh hak penuh — tetapi hanya dari mesin laptop-budi; dari komputer lain baris ini tidak berlaku.
  3. Baris 4 (%sudo ...): tanda % berarti group. Di Debian dan turunannya, seluruh anggota group sudo memperoleh hak penuh; installer biasanya otomatis memasukkan user pertama ke group ini. Di Fedora dan RHEL peran serupa dipegang group wheel.
  4. Baris 5 (siti ...): contoh granular — siti hanya boleh menjalankan satu perintah persis di satu host. Inilah pola yang tepat untuk akun dengan tugas sempit, misalnya skrip backup atau monitoring.

Setiap pemanggilan sudo juga tercatat dengan nama user asli di log autentikasi (/var/log/auth.log pada Debian, atau journal). Inilah alasan terbesar sudo dipilih dibanding sesi root penuh: pertanggungjawaban tetap jelas.

visudo dan Direktori /etc/sudoers.d #

Risiko terbesar file sudoers adalah dirinya sendiri: satu kesalahan sintaks bisa membuat sudo menolak bekerja — dan kita kehilangan satu-satunya jalan menjadi admin. Karena itu file ini tidak diedit dengan editor biasa, melainkan lewat visudo: perintah itu mengunci file agar tidak dua admin bersamaan, memeriksa sintaks sebelum menyimpan, dan menolak menyimpan bila ditemukan kesalahan.

Distribusi modern lalu memecah aturan ke direktori drop-in. Rangkuman lengkap opsi dan formatnya tersedia di wiki Arch Linux tentang sudo :

bash
ls -1 /etc/sudoers.d/

Output yang Dihasilkan:

text
README

File /etc/sudoers memuat arahan @includedir /etc/sudoers.d/, sehingga setiap file di dalamnya dibaca sebagai kelanjutan konfigurasi. Paket perangkat lunak (alat backup, misalnya) cukup menaruh satu file kecil berisi aturan khususnya tanpa menyentuh file utama. Konvensinya: satu aturan per file, nama file tanpa spasi dan tanpa titik, permission 440, dan diedit lewat visudo -f agar sintaksnya tetap diperiksa.

Kini kita tahu bagaimana menjadi root dilindungi dan diaudit. Namun permission file klasik yang membungkus sudo tadi tetap membatasi dunia menjadi tiga kelas — owner, group, other — dan satu file hanya bisa punya satu group. Ketika kebutuhan berbagi lebih rumit dari itu, Linux menyediakan Access Control Lists — materi Chapter Access Control Lists .