Belajar LDAP - Access Control List (ACL)
Series/Belajar LDAP/Episode 10
Episode 10 of 31

Belajar LDAP - Access Control List (ACL)

Mengendalikan siapa bisa melihat dan mengubah apa di direktori: konsep subject, object, dan permission, delapan level akses, sintaks olcAccess, contoh ACL untuk akses anonim, self password, dan grup, plus praktik least privilege.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 9 kalian bebas mencari apa pun sebagai admin. Di dunia nyata, bukan itu yang terjadi — direktori dipakai ratusan user dan setiap user hanya boleh melihat sebagian data. Episode 10 membahas access control list (ACL): bahasa untuk menjawab tiga pertanyaan — siapa (who), terhadap apa (what), dan dengan kemampuan apa (how).

Konsep Dasar ACL

Sebuah aturan ACL punya tiga komponen:

KomponenPertanyaanContoh
WhoSiapa subjeknya?by dn.exact="cn=admin,dc=example,dc=com" write
WhatObjeknya entry atau atribut apa?to attrs=userPassword
HowPerizinan apa yang diberikan?write

Subjek bisa berupa DN spesifik, pola DN (dn.subtree), grup, atau kategori khusus seperti self, users (yang berhasil bind), anonymous, dan * (semua). Objek bisa seluruh entry (to *) atau atribut tertentu (to attrs=mail). Cara evaluasinya: aturan dibaca dari atas ke bawah, dan yang cocok pertama yang menang.

Level Akses

OpenLDAP 2.5 mendefinisikan delapan level, dari paling lemah ke paling kuat:

LevelKemampuan
noneTanpa akses sama sekali
discloseHanya boleh tahu bahwa entry atau atribut itu ada
authBoleh dipakai untuk bind dan autentikasi, tanpa membaca isi
compareBoleh dibandingkan dengan ldapcompare
searchBoleh muncul sebagai hasil pencarian dan dipakai filter
readBoleh dibaca isi atributnya
writeBoleh ditambah, diubah, dan dihapus
manageKontrol administratif penuh, termasuk pengaturan ACL

Hierarki level bersifat kumulatif: read mengimplikasikan search dan compare; write mengimplikasikan read; manage mencakup semuanya.

Sintaks olcAccess

ACL disimpan sebagai atribut olcAccess pada entry olcDatabase di cn=config. Format barisnya: urutan indeks (0, 1, 2, dan seterusnya), lalu to untuk objek, diikuti satu atau lebih by untuk subjek dan perizinan:

LinuxAturan ACL pada database mdb
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to * by dn.exact="cn=admin,dc=example,dc=com" write by * read

Baca aturan ini: untuk semua objek, admin dengan DN persis dapat write, selain itu semua dapat read. Bila sebuah klausa by tidak cocok, evaluasi lanjut ke by berikutnya dalam aturan yang sama; bila seluruh aturan tidak cocok, lanjut ke olcAccess berikutnya.

Pola default slapd saat instalasi biasanya sudah memuat aturan untuk userPassword dan dasar lainnya. Aturan paling bawah menentukan apa yang terjadi bila tidak ada aturan yang cocok:

LinuxAturan default
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to * by * read

Aturan pertama membatasi userPassword: pemilik bisa menulis, anonim boleh auth (untuk bind), yang lain none. Aturan kedua memberi akses baca umum untuk seluruh isi direktori.

Contoh ACL

Akses baca anonim

Untuk data publik seperti direktori telepon:

LinuxAkses baca anonim
olcAccess: {0}to dn.subtree="ou=People,dc=example,dc=com" by * read

Ganti password sendiri

Aturan klasik yang memungkinkan user mengubah passwordnya sendiri tanpa bisa membaca password orang lain:

LinuxSelf password change
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none

Admin dengan kendali penuh

LinuxAdmin full access
olcAccess: {0}to * by dn.exact="cn=admin,dc=example,dc=com" manage by * none

Akses berbasis grup

Memberi akses baca ke anggota grup tertentu:

LinuxGroup-based access
olcAccess: {0}to dn.subtree="ou=People,dc=example,dc=com" by group.exact="cn=devel,ou=Groups,dc=example,dc=com" read by * none

Akses per atribut

Memisahkan atribut publik dari atribut privat dalam entry yang sama:

LinuxAttribute-level access
olcAccess: {0}to attrs=mail,telephoneNumber by users read by * none
olcAccess: {1}to * by self read by * none

Penerapannya: setiap orang boleh membaca mail dan telephoneNumber user lain, tetapi hanya pemiliknya yang bisa membaca atribut lain pada entry-nya.

Urutan Evaluasi & Prioritas

Karena evaluasi memakai prinsip first-match-wins, aturan yang lebih spesifik harus diletakkan lebih dulu. Aturan to attrs=userPassword harus muncul sebelum to *, dan to dn.subtree="ou=People,dc=example,dc=com" harus muncul sebelum to *. Melanggar urutan ini adalah sumber bug ACL paling umum: aturan luas di depan "menelan" request sebelum aturan spesifik sempat dievaluasi.

Important

Saat menambahkan olcAccess baru, selalu sebutkan urutan indeksnya secara eksplisit. Menambahkan tanpa indeks akan menaruh aturan di posisi pertama — dan bisa tiba-tiba menghalangi akses yang tadinya diizinkan oleh aturan lama.

Best Practices

  • Least privilege — beri hak sekecil mungkin untuk menjalankan tugas.
  • Deny by default — tutup aturan dengan by * none, bukan by * read.
  • Uji ACL secara menyeluruh — jangan cuma sebagai admin; uji sebagai user biasa:
Menguji ACL sebagai user biasa
ldapsearch -x -D "uid=budi,ou=People,dc=example,dc=com" -W -b dc=example,dc=com "(objectClass=*)"

Perhatikan bahwa atribut yang tidak boleh dilihat akan disembunyikan dari hasil, atau muncul dengan nilai kosong, tergantung level yang diberikan.

  • Dokumentasikan aturan — beri komentar pada file LDIF dan simpan di version control.
  • Audit berkala — review seluruh olcAccess secara rutin bersama tim keamanan.

Penutup

Episode 10 memberi kalian kendali penuh atas visibilitas data: tiga komponen ACL who, what, how; delapan level akses dari none sampai manage; sintaks olcAccess dengan direktif to dan by; beragam contoh mulai dari akses anonim, self password, admin, grup, sampai per atribut; serta aturan emas first-match-wins dengan spesifik di depan.

Inti yang harus dibawa pulang:

  • ACL dijawab tiga hal: siapa, terhadap apa, dengan kemampuan apa.
  • Level akses bersifat kumulatif; manage adalah yang tertinggi.
  • Evaluasi first-match-wins — taruh aturan spesifik lebih dulu.
  • Tutup dengan by * none dan terapkan least privilege.

Di episode 11 berikutnya, kita menambah fitur modular OpenLDAP: overlays. Kalian akan mengaktifkan memberOf untuk pelacakan keanggotaan otomatis, ppolicy untuk kebijakan password, hingga syncprov untuk replikasi.

Belajar LDAP - Access Control List (ACL) | Belajar LDAP