Nama login seperti budi atau root nyaman dibaca manusia, tetapi kernel Linux tidak pernah menyimpannya. Identitas yang dibawa setiap proses dan tercatat pada setiap file adalah sepasang angka: UID (User ID) dan GID (Group ID). Nama hanyalah label di /etc/passwd dan /etc/group yang diterjemahkan bolak-balik hanya saat perlu ditampilkan. Pada Chapter ini kita membedah pasangan angka tersebut lewat perintah id, melihat kenapa kekuasaan root melekat pada UID 0, dan memetakan rentang UID untuk user sistem dan user biasa.
Kernel Mengenal Angka, Bukan Nama #
Saat sebuah proses berjalan, kernel mencatat UID dan GID aktif pada proses tersebut — angka inilah yang diperiksa setiap kali proses mencoba membuka file atau mengakses sumber daya. Hal yang sama berlaku di sisi penyimpanan: setiap inode di filesystem menyimpan UID dan GID pemilik sebagai angka, bukan nama. Dengan demikian pengecekan permission tidak perlu membuka /etc/passwd dan tetap cepat.
Nama berperan hanya di lapisan tampilan. Ketika ls -l menampilkan budi sebagai pemilik, perintah itu sebenarnya membaca angka UID dari inode lalu mencocokkannya ke baris /etc/passwd. Bila angka UID tidak memiliki nama — misalnya usernya sudah dihapus tetapi file-filenya tersisa — ls -l menampilkan angka telanjang, dan file seperti itu disebut orphaned.
Membaca Identitas dengan Perintah id #
Perintah id menampilkan identitas lengkap user yang menjalankannya:
idOutput yang Dihasilkan:
uid=1001(z) gid=1001(z) groups=1001(z)Kita bedah tiga bagian output tersebut:
uid=1001(z)— UID akun ini beserta namanya; angka1001adalah nilai khas mesin tempat latihan ini dijalankan, dan di komputer pembaca angkanya bisa berbeda (user pertama biasanya1000).gid=1001(z)— GID group primer akun ini; pada banyak sistem, group primer user biasa dibuat otomatis dengan nama yang sama.groups=1001(z)— daftar lengkap group tempat akun menjadi anggota, dipisah koma; pada mesin pembaca daftar ini biasanya lebih panjang.
Berbagai opsinya memungkinkan kita mengambil satu bagian saja — berguna di dalam skrip:
| Perintah | Keluaran |
|---|---|
id -u | UID sebagai angka |
id -g | GID primer sebagai angka |
id -un | nama user |
id -G | semua GID, dipisah spasi |
Kita jalankan keempatnya sekaligus:
id -u
id -g
id -un
id -GOutput yang Dihasilkan:
1001
1001
z
1001Angka 1001 muncul tiga kali karena UID, GID primer, dan satu-satunya keanggotaan group akun ini kebetulan sama. Dokumentasi lengkap opsinya ada di id(1)
.
UID 0 Adalah root #
Kekuasaan penuh root tidak melekat pada nama root, melainkan pada UID 0 — siapa pun yang login dengan UID nol diperlakukan sebagai root oleh kernel. Kita bisa membuktikan bahwa baris root memang bernomor nol:
grep '^root:' /etc/passwd | cut -d: -f1,3Output yang Dihasilkan:
root:0Rentang UID: Sistem dan User Biasa #
Pembagian angka UID tidak acak. File /etc/login.defs menetapkan UID_MIN 1000 sebagai titik awal user biasa, sedangkan user sistem — akun untuk daemon dan layanan — diberi angka di bawahnya hingga batas SYS_UID_MAX 999. Ringkasnya, rentangnya begini:
| Rentang | Jenis akun | Contoh |
|---|---|---|
0 | root | root |
1–999 | user sistem untuk layanan | www-data, sshd |
1000–60000 | user biasa | budi, siti |
Pemisahan ini punya manfaat praktis: akun layanan yang kepemilikan filenya ber-UID rendah langsung terlihat di listing ps maupun ls, dan admin dapat memindahkan seluruh file user biasa dengan menyaring rentang UID. Aturan rentangnya sendiri didokumentasikan di login.defs(5)
.
Angka itu pula yang sebenarnya tersimpan di file. Format %u dan %g pada stat menampilkan UID dan GID mentah tanpa penerjemahan nama:
mkdir -p latihan
printf 'data penting\n' > latihan/data.txt
stat -c '%u %g %n' latihan/data.txtOutput yang Dihasilkan:
1001 1001 latihan/data.txtDua angka 1001 pada output adalah UID dan GID akun ini — sama dengan hasil id -u dan id -g sebelumnya, karena file memang dibuat oleh akun yang menjalankan perintahnya. Mesin pembaca akan menampilkan angka milik akun pembaca, dan stat -c '%U:%G %n' akan menampilkan versi namanya.
Inilah hulu dari seluruh pembahasan permission: kelas owner, group, dan other pada file membandingkan UID serta GID proses terhadap angka yang tersimpan di inode. Cara membaca notasi rwx yang mengatur perbandingan itu kita bahas pada Chapter File Permissions
.