Sembilan bit rwx yang kita kenal bukan seluruh cerita: model Unix klasik menyimpan tiga bit ekstra yang lebih tua dari Linux sendiri — setuid, setgid, dan sticky bit. Ketiganya memecahkan masalah yang tidak bisa dijawab bit biasa: bagaimana user biasa mengubah password-nya padahal hasilnya ditulis ke /etc/shadow milik root, bagaimana folder tim otomatis berbagi group, dan bagaimana /tmp yang bisa ditulis semua orang tetap tidak saling merusak. Chapter ini menyalakan ketiga bit tersebut, membaca tampilannya di stat, dan menimbang risikonya.
Digit Keempat dalam Mode Oktal #
Mode oktal yang kita pakai pada chmod sebenarnya punya empat digit — tiga digit pertama sudah kita kenal, dan digit paling kiri menyimpan ketiga bit khusus ini. Nilainya dijumlahkan seperti biasa: 4 untuk setuid, 2 untuk setgid, 1 untuk sticky.
| Digit | Nama | Tampilan di posisi execute | Efek |
|---|---|---|---|
4000 | setuid | s/S pada kelas owner | program berjalan dengan identitas pemiliknya |
2000 | setgid | s/S pada kelas group | program berjalan dengan group pemiliknya; pada direktori, isi baru mewarisi group |
1000 | sticky | t/T pada kelas other | di direktori yang bisa ditulis bersama, hanya owner yang boleh menghapus |
Bentuk hurufnya menempati slot x: s kecil berarti bit x juga aktif, S besar berarti bit khusus terpasang tanpa execute — kombinasi yang umumnya pertanda kesalahan konfigurasi. Bentuk simboliknya juga ada: chmod u+s, chmod g+s, chmod o+t.
setuid: Menjalankan Program sebagai Pemiliknya #
Kasus klasiknya adalah passwd. Mengganti password berarti menulis hash baru ke /etc/shadow — file yang bahkan tidak bisa dibaca user biasa — tetapi setiap user harus bisa mengganti password sendiri. Jalan keluarnya: program /usr/bin/passwd dipasang dengan bit setuid, sehingga prosesnya berjalan sebagai root:
stat -c '%A %a %U %n' /usr/bin/passwdOutput yang Dihasilkan:
-rwsr-xr-x 4755 root /usr/bin/passwdHuruf s di posisi execute owner dan angka 4 pada digit pertama 4755 menandakan setuid. Kita bisa menyalakan bit yang sama pada file milik sendiri untuk melihat bentuknya dari dekat:
printf '#!/bin/bash\necho "alat internal"\n' > alat-internal.sh
chmod 4755 alat-internal.sh
stat -c '%A %a %n' alat-internal.sh
chmod 4644 alat-internal.sh
stat -c '%A %a %n' alat-internal.shOutput yang Dihasilkan:
-rwsr-xr-x 4755 alat-internal.sh
-rwSr--r-- 4644 alat-internal.sh- Baris 1-2: membuat script kecil sebagai fixture, lalu
chmod 4755menyalakan setuid (4) di atas mode755. - Baris 3:
statmenampilkan-rwsr-xr-x 4755—skecil karena bitxowner ikut aktif. - Baris 4-5:
chmod 4644melepasxowner tetapi membiarkan setuid;statkini menampilkanSbesar — bit khusus terpasang tanpa execute, kombinasi yang tidak berdampak.
setgid pada Direktori: Group yang Diwariskan #
Bit kedua punya dua wajah. Pada binary, setgid membuat program berjalan dengan group pemilik file — kebalikan setuid pada posisi group. Wajah yang jauh lebih sering dipakai ada di direktori: file baru di dalam direktori setgid mewarisi group direktori itu, bukan group utama pembuatnya:
mkdir -p proyek-bersama
chmod 2775 proyek-bersama
stat -c '%A %a %n' proyek-bersamaOutput yang Dihasilkan:
drwxrwsr-x 2775 proyek-bersamaMode 2775 menghasilkan drwxrwsr-x — s pada posisi execute group. Bayangkan folder kerja tim media yang group-nya tim-media: setiap anggota yang membuat file di dalamnya otomatis menghasilkan file dengan group tim-media, sehingga seluruh anggota bisa langsung bekerja tanpa chgrp manual per file. Tanpa setgid, file baru membawa group utama pembuatnya dan berbagi akses harus dibereskan satu per satu — persoalan yang juga dijawab default ACL pada Chapter Access Control Lists
.
Sticky Bit: /tmp yang Tertib #
Direktori yang bisa ditulis semua orang punya masalah serius: permission write pada direktori mencakup hak menghapus dan mengganti nama entri di dalamnya. Tanpa pengaman, siapa pun bisa menghapus file siapa pun di folder bersama. Sticky bit memotong hak itu — penghapusan dan rename hanya boleh dilakukan owner file, owner direktori, atau root:
stat -c '%A %a %n' /tmpOutput yang Dihasilkan:
drwxrwxrwt 1777 /tmpMode /tmp adalah 1777: semua boleh menulis, tetapi huruf t di posisi execute other menandakan sticky. Inilah alasan /tmp dan /var/tmp aman dipakai bersama — setiap user bisa membuat file di sana, tetapi file itu hanya bisa dihapus pemiliknya. Kombinasi yang sama berguna untuk folder upload aplikasi atau scratch space tim.
Ketiga bit khusus ini mengubah identitas dan hak hapus — sisi operasional permission. Pertanyaan berikutnya lebih mendasar: bagaimana sistem memastikan orang yang baru login adalah benar pemilik akun itu? Jawabannya melibatkan alur login, PAM, dan hash password — materi Chapter Authentication Basics . Dokumentasi lengkap keempat digit mode tersedia di halaman manual chmod(1) dan wiki Arch Linux tentang permission file .