Model permission yang kita pakai sejauh ini menyediakan tiga kotak: owner, group, dan other. Model itu sederhana, tetapi juga cepat menabrak batasnya. Bayangkan laporan yang harus bisa diedit Siti, dibaca seluruh anggota tim desain, dan tetap tertutup bagi yang lain — sedangkan satu file hanya bisa memiliki satu group. Access Control List (ACL) memperluas model tiga kotak itu menjadi daftar aturan per user dan per group pada file yang sama. Chapter ini membaca dan menyusun daftar tersebut dengan getfacl dan setfacl.

Batas Model Tiga Kelas #

Saat memeriksa akses, kernel memilih tepat satu kelas: owner bila UID kita cocok dengan pemilik, group bila salah satu GID kita cocok, other bila tidak ada yang cocok. Tidak ada gabungan dan tidak ada fallback — kelas lain tidak pernah ditimbang. Kita buktikan lewat satu eksperimen kecil: sebuah file yang permission ownernya kosong, sementara group dan other diberi akses penuh:

bash
printf 'catatan proyek bersama\n' > catatan.txt
chmod 077 catatan.txt
stat -c '%A %04a %n' catatan.txt
cat catatan.txt 2>&1

Output yang Dihasilkan:

text
----rwxrwx 0077 catatan.txt
cat: catatan.txt: Permission denied
  1. Baris 1-2: membuat file latihan, lalu mengosongkan bit owner (0) sementara group dan other dibuka penuh (77).
  2. Baris 3: stat menampilkan mode ----rwxrwx 0077 — owner ---, group dan other rwx.
  3. Baris 4: sebagai pemilik, kita tetap ditolak. Kernel melihat UID kita cocok dengan owner, memeriksa bit owner saja, dan berhenti di situ; bit rwx milik group dan other tidak pernah dilihat.

Hambatan kedua: berbagi lewat jalur group juga kaku. User biasa hanya boleh menetapkan group yang dia ikuti sendiri — mencoba meminjamkan file ke group lain langsung ditolak:

bash
printf 'desain banner kampanye\n' > banner.txt
chmod 660 banner.txt
chgrp adm banner.txt 2>&1

Output yang Dihasilkan:

text
chgrp: changing group of 'banner.txt': Operation not permitted

Dua hambatan ini saling bertumpuk: satu group per file, dan mengganti group berarti group lama kehilangan akses. Untuk kebutuhan berbagi yang lebih kaya dari itu, kita membutuhkan ACL.

ACL: Daftar Aturan pada Satu File #

ACL POSIX memperluas sembilan bit mode klasik menjadi daftar entri. Setiap entri menempel pada satu file dan berdiri sendiri:

EntriPadanan mode klasikFungsi
user::rwxownerpermission pemilik file
user:siti:rw-—slot khusus untuk satu user bernama
group::r-xgrouppermission group pemilik
group:tim-desain:r-x—slot khusus untuk satu group bernama
mask::rwx—batas atas efektif entri bernama dan group pemilik
other::r--othersemua yang tidak cocok dengan entri lain

ACL disimpan sebagai extended attribute pada file yang sama; filesystem modern seperti ext4, XFS, dan Btrfs mendukungnya tanpa setup tambahan. Perintah getfacl dan setfacl berasal dari paket acl di Debian dan Ubuntu — alat kecil yang tidak selalu terpasang di lingkungan minimal, jadi kita bedah bentuk outputnya lewat contoh tampilan getfacl laporan.txt pada file yang sudah diberi entri untuk Siti:

text
# file: laporan.txt
# owner: budi
# group: budi
user::rw-
user:siti:rw-
group::r--
mask::rw-
other::---
  1. Baris 1-3: komentar header — nama file, owner, dan group pemilik.
  2. Baris 4 (user::rw-): permission pemilik — padanan bit owner klasik.
  3. Baris 5 (user:siti:rw-): entri bernama — Siti mendapat slot sendiri tanpa perlu menjadi owner atau anggota group pemilik.
  4. Baris 6 (group::r--): permission group pemilik.
  5. Baris 7 (mask::rw-): batas atas efektif entri bernama dan group pemilik.
  6. Baris 8 (other::---): semua yang di luar entri di atas tidak mendapat apa-apa.

File seperti ini tampil di ls -l sebagai -rw-rw----+ — tanda + menandakan ada ACL, dan kolom group yang tercetak kini menampilkan nilai mask, bukan permission group pemilik.

Mengatur dengan setfacl #

Perintah setfacl mengubah daftar itu dengan subcommand singkat: -m memodifikasi atau menambah entri, -x menghapus satu entri, dan -b menghapus seluruh ACL. Format entri sama seperti tabel di atas. Pola yang paling sering dipakai:

PerintahEfek
setfacl -m u:siti:rw- laporan.txtberi atau perbarui entri rw- untuk Siti
setfacl -m g:tim-desain:r-x laporan.txtentri baca-jalan untuk group bernama
setfacl -m m::r-- laporan.txtkecilkan mask menjadi baca saja
setfacl -x u:siti laporan.txthapus entri milik Siti
setfacl -b laporan.txthapus seluruh ACL, kembali ke mode klasik
setfacl -m d:u:siti:rw- proyek/pasang default ACL pada direktori

Urutan pemeriksaan ketika sebuah proses meminta akses:

  1. Proses berjalan sebagai pemilik file → entri user:: yang menentukan; selesai.
  2. Ada entri user:nama: untuk UID proses itu → entri tersebut (dibatasi mask) yang menentukan; tidak jatuh ke group.
  3. Group proses cocok dengan group:: atau salah satu group:nama: → cukup satu entri yang cocok memberi izin (setelah mask) agar akses diberikan; bila ada yang cocok tetapi semuanya menolak, akses ditolak.
  4. Tidak ada entri yang cocok → entri other:: yang menentukan.

Default ACL pada Direktori #

Entri ACL menempel pada file, jadi file baru di folder proyek tidak mewarisinya — tanpa mekanisme lain kita harus mengulang setfacl untuk setiap file baru. Mekanismenya bernama default ACL: dipasang pada direktori dengan awalan d:, dan setiap file atau subdirektori baru di dalamnya mewarisi entri tersebut sebagai ACL aksesnya. Berikut contoh tampilan getfacl pada direktori proyek yang dilengkapi entri default untuk Siti:

text
# file: proyek
# owner: budi
# group: budi
user::rwx
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:siti:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

Bagian atas adalah ACL akses untuk direktori itu sendiri; baris berawalan default: adalah cetakan bagi isi baru. File yang dibuat di dalam proyek/ otomatis mendapat entri user:siti:rw-. Pada direktori ber-default ACL, umask tidak lagi berlaku — yang memotong permission hanya mode yang diminta program pembuat file.

ACL memperluas siapa yang boleh mengakses sebuah file. Tiga bit permission khusus berikutnya menjawab pertanyaan yang berbeda: dengan identitas siapa sebuah program berjalan, dan siapa yang boleh menghapus file di folder terbuka — setuid, setgid, dan sticky bit, materi Chapter Special Permissions . Rangkuman praktiknya tersedia di wiki Arch Linux tentang ACL .