Belajar LDAP - Password Policies
Series/Belajar LDAP/Episode 12
Episode 12 of 31

Belajar LDAP - Password Policies

Menerapkan kebijakan password pada OpenLDAP dengan ppolicy overlay: pwdMinLength, pwdMaxLength, pwdMaxAge, pwdInHistory, lockout akun, grace login, password hashing SSHA, serta validasi eksternal cracklib.

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

Pendahuluan

Di episode 11 kalian mengenal overlay sebagai mekanisme modular OpenLDAP, termasuk sekilas tentang ppolicy dan syncprov. Episode 12 ini menurunkan konsep itu menjadi praktik nyata: kebijakan password lengkap yang mengatur panjang, umur, sejarah, dan lockout akun. Ini salah satu fitur yang paling sering diminta begitu organisasi mulai memperlakukan LDAP sebagai sumber kebenaran autentikasi — karena tanpa kebijakan, userPassword hanyalah kata sandi tanpa aturan.

Password Policy Overlay

ppolicy adalah overlay yang menghadirkan atribut kebijakan password ke dalam direktori. Modul ini menegakkan aturan kualitas, umur, sejarah, dan lockout pada setiap operasi bind dan perubahan password, tanpa mengubah kode aplikasi klien sama sekali.

Kualitas password (quality requirements) diukur lewat pwdCheckQuality dan pwdMinLength: level kualitas menentukan seberapa ketat password baru diuji, sementara panjang minimum menjadi garis dasar keamanan. Penerapan kebijakan (policy application) dilakukan per-entri lewat pwdPolicySubentry, atau secara global lewat policy default yang dipasang di konfigurasi overlay.

LinuxMemuat modul ppolicy
dn: cn=module{0},cn=config
objectClass: olcModuleList
olcModulePath: /usr/lib/ldap
olcModuleLoad: ppolicy.la

Pada Debian dan Ubuntu, modul overlay tinggal di /usr/lib/ldap dan dimuat dengan olcModuleLoad: ppolicy.la. Jika kalian menulis modul ulang (misalnya setelah kompilasi dari sumber), jangan lupa jalankan slaptest -u untuk memastikan konfigurasi valid.

Atribut Kebijakan Password

Kebijakan didefinisikan sebagai sebuah entry dengan objectClass pwdPolicy. Atribut-atributnya bekerja berpasangan untuk membentuk aturan yang utuh:

AtributFungsi
pwdMinLengthPanjang minimum password
pwdMaxLengthPanjang maksimum password
pwdMinAgeUmur minimum sebelum password boleh diganti (detik)
pwdMaxAgeUmur maksimum sebelum password kedaluwarsa (detik)
pwdInHistoryJumlah password lama yang tidak boleh dipakai ulang
pwdCheckQualityLevel pengecekan kualitas (0, 1, atau 2)
pwdMaxFailureBatas kegagalan bind sebelum akun dikunci
pwdLockoutAktifkan atau nonaktifkan lockout akun
pwdLockoutDurationDurasi lockout dalam detik
pwdGraceAuthNLimitJumlah grace login setelah password kedaluwarsa

Dua atribut operasional menyertai mekanisme ini: pwdChangedTime mencatat kapan password terakhir diubah, dan pwdFailureTime mencatat setiap waktu kegagalan bind — keduanya diisi otomatis oleh overlay, tidak perlu di-set manual. pwdMaxAge dan pwdMinAge dalam satuan detik, jadi 90 hari sama dengan 7776000.

Membuat Policy Entry

Entry kebijakan dibuat seperti entry biasa, tetapi dengan objectClass pwdPolicy dan person (untuk atribut cn dan sn):

Policy default di ou=policies
dn: cn=default,ou=policies,dc=example,dc=com
objectClass: pwdPolicy
objectClass: person
cn: default
sn: default policy
pwdAttribute: userPassword
pwdMinLength: 12
pwdMaxLength: 64
pwdMinAge: 1
pwdMaxAge: 7776000
pwdInHistory: 5
pwdCheckQuality: 2
pwdMaxFailure: 5
pwdLockout: TRUE
pwdLockoutDuration: 900
pwdGraceAuthNLimit: 3

Masukkan dengan ldapadd -x -D cn=admin,dc=example,dc=com -W dari file LDIF ini. pwdCheckQuality: 2 berarti kualitas dicek saat password diset dan saat bind pertama kali; pwdLockout: TRUE dengan pwdMaxFailure: 5 dan pwdLockoutDuration: 900 mengunci akun 15 menit setelah lima kegagalan.

Menghubungkan Policy ke Database

Agar overlay tahu kebijakan mana yang menjadi default, pasang olcPPolicyDefault pada konfigurasi overlay di cn=config:

LinuxKonfigurasi overlay ppolicy
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=example,dc=com
olcPPolicyHashCleartext: FALSE
olcPPolicyUseLockout: TRUE

Urutan efektif sebuah kebijakan mengikuti kaidah ini:

  1. Jika entry user memiliki pwdPolicySubentry, kebijakan tersebut yang berlaku (per-user policy).
  2. Jika tidak, olcPPolicyDefault menjadi fallback untuk seluruh database.
  3. Jika keduanya tidak ada, tidak ada kebijakan yang diterapkan.

Kebijakan per-user dipasang langsung di entry orangnya, misalnya pada uid=budi,ou=people,dc=example,dc=com ditambahkan pwdPolicySubentry: cn=strict,ou=policies,dc=example,dc=com. Ini berguna untuk akun-akun sensitif seperti admin atau akun service yang butuh aturan lebih ketat.

Password Hashing

Cara password disimpan di userPassword menentukan seberapa besar usaha yang dibutuhkan penyerang untuk membaliknya. OpenLDAP menyimpan nilai password bersama label skema hash:

SkemaKekuatanCatatan
{SSHA}SedangSalted SHA-1, standar default lama
{SSHA256}BaikSalted SHA-256
{SSHA512}BaikSalted SHA-512, rekomendasi modern
{CRYPT}TergantungMemakai crypt sistem, bisa dipakai dengan shadow
{MD5}LemahTanpa salt, deprecated
{ARGON2}KuatArgon2, modern, butuh dukungan build slapd

Default hash diatur pada cn=config dengan olcPasswordHash. Untuk nilai yang lebih aman dibanding {SSHA} bawaan, ubah ke {SSHA512}:

LinuxMengubah default hash
dn: cn=config
changetype: modify
replace: olcPasswordHash
olcPasswordHash: {SSHA512}

Perlu diingat: mengubah default hanya memengaruhi password yang di-hash setelahnya. Password lama tetap memakai skema lamanya sampai user mengganti password.

Validasi Password Eksternal

pwdMinLength dan pwdCheckQuality hanya mengecek bentuk dasar. Untuk aturan yang lebih cerdas — misalnya melarang kata yang ada di kamus atau kombinasi keyboard — ppolicy mendukung validasi eksternal melalui pwdCheckModule pada entry policy:

Mengaktifkan modul pemeriksa eksternal
dn: cn=default,ou=policies,dc=example,dc=com
changetype: modify
replace: pwdCheckModule
pwdCheckModule: check_password.so

Modul ini bisa mengintegrasikan cracklib, pustaka yang sama dengan cracklib-unix yang dipakai pam_cracklib di sistem Linux, atau validator kustom yang kalian tulis sendiri dan kompilasi sebagai pustaka berbagi. Di Debian dan Ubuntu, pastikan paket pendukung modul terpasang dan modul berada di direktori yang terbaca oleh slapd. Ini lapisan opsional — banyak deployment memilih tetap di pwdCheckQuality demi kesederhanaan.

Menguji Kebijakan

Setiap bagian kebijakan harus diuji terpisah, dan semua pengujian bisa dilakukan dengan client standard:

Menguji perubahan password dan lockout
ldapmodify -x -D uid=budi,ou=people,dc=example,dc=com -W
ldapwhoami -x -D uid=budi,ou=people,dc=example,dc=com -w salah
ldapsearch -x -D cn=admin,dc=example,dc=com -W \
  -b uid=budi,ou=people,dc=example,dc=com pwdAccountLockedTime
  • Password change testing — ubah password user lalu cek pwdChangedTime ikut ter-update.
  • Lockout testing — salah bind lima kali; bind keenam gagal dan pwdAccountLockedTime muncul.
  • Expiration testing — set pwdMaxAge kecil, tunggu sampai lewat, lalu bind; server menolak dengan result code 49 dan pesan password expired.
  • Grace login testing — setelah kedaluwarsa, user masih bisa bind sebanyak pwdGraceAuthNLimit, dan pesan peringatan kedaluwarsa muncul di hasil bind.

Important

Waspadai satu jebakan umum: mengetes lockout terhadap akun admin. Jika cn=admin ikut kebijakan default dan terkunci, jalan masuk utama ke direktori ikut terkunci. Dalam lab, beri admin pwdPolicySubentry menunjuk kebijakan longgar, atau uji lockout pada akun user biasa dulu.

Penutup

Pada episode 12 ini kalian menerapkan ppolicy overlay: memuat modul, memahami atribut pwdMinLength sampai pwdGraceAuthNLimit, membuat policy entry default dan per-user, memilih skema hash dari {SSHA} hingga {ARGON2}, mengaktifkan validasi eksternal lewat pwdCheckModule, dan menguji perubahan password, lockout, kedaluwarsa, serta grace login.

Inti yang harus dibawa pulang:

  • Kebijakan tidak aktif tanpa overlay — load ppolicy.la, pasang olcPPolicyDefault, dan buat entry pwdPolicy.
  • Inheritance itu berurutanpwdPolicySubentry mengalahkan policy default, policy default mengalahkan tanpa policy.
  • Hash menentukan biaya serangan — naikkan ke {SSHA512} dan hindari {MD5} yang deprecated.
  • Uji setiap jalur — lockout, kedaluwarsa, dan grace login harus diverifikasi sebelum dipakai di produksi.

Di episode 13 berikutnya, kita membahas LDAP replication — bagaimana satu provider mendistribusikan datanya ke consumer dengan syncrepl, dari refreshOnly hingga multi-master. Kebijakan password yang kalian buat di sini akan ikut tereplikasi dan harus berperilaku identik di semua server.

Belajar LDAP - Password Policies | Belajar LDAP