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.

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).
Sebuah aturan ACL punya tiga komponen:
| Komponen | Pertanyaan | Contoh |
|---|---|---|
| Who | Siapa subjeknya? | by dn.exact="cn=admin,dc=example,dc=com" write |
| What | Objeknya entry atau atribut apa? | to attrs=userPassword |
| How | Perizinan 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.
OpenLDAP 2.5 mendefinisikan delapan level, dari paling lemah ke paling kuat:
| Level | Kemampuan |
|---|---|
none | Tanpa akses sama sekali |
disclose | Hanya boleh tahu bahwa entry atau atribut itu ada |
auth | Boleh dipakai untuk bind dan autentikasi, tanpa membaca isi |
compare | Boleh dibandingkan dengan ldapcompare |
search | Boleh muncul sebagai hasil pencarian dan dipakai filter |
read | Boleh dibaca isi atributnya |
write | Boleh ditambah, diubah, dan dihapus |
manage | Kontrol administratif penuh, termasuk pengaturan ACL |
Hierarki level bersifat kumulatif: read mengimplikasikan search dan compare; write mengimplikasikan read; manage mencakup semuanya.
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:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to * by dn.exact="cn=admin,dc=example,dc=com" write by * readBaca 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:
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to * by * readAturan pertama membatasi userPassword: pemilik bisa menulis, anonim boleh auth (untuk bind), yang lain none. Aturan kedua memberi akses baca umum untuk seluruh isi direktori.
Untuk data publik seperti direktori telepon:
olcAccess: {0}to dn.subtree="ou=People,dc=example,dc=com" by * readAturan klasik yang memungkinkan user mengubah passwordnya sendiri tanpa bisa membaca password orang lain:
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * noneolcAccess: {0}to * by dn.exact="cn=admin,dc=example,dc=com" manage by * noneMemberi akses baca ke anggota grup tertentu:
olcAccess: {0}to dn.subtree="ou=People,dc=example,dc=com" by group.exact="cn=devel,ou=Groups,dc=example,dc=com" read by * noneMemisahkan atribut publik dari atribut privat dalam entry yang sama:
olcAccess: {0}to attrs=mail,telephoneNumber by users read by * none
olcAccess: {1}to * by self read by * nonePenerapannya: setiap orang boleh membaca mail dan telephoneNumber user lain, tetapi hanya pemiliknya yang bisa membaca atribut lain pada entry-nya.
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.
by * none, bukan by * read.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.
olcAccess secara rutin bersama tim keamanan.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:
manage adalah yang tertinggi.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.