Mengisi direktori dari kosong: merencanakan struktur domain dan organizational units, menambahkan user dengan inetOrgPerson dan posixAccount, membuat grup dengan groupOfNames, serta operasi batch dengan ldapadd.

Di episode 6 kalian menguasai perangkat klien dan format LDIF. Sekarang giliran memakainya: episode 7 membahas pengisian direktori secara nyata, mulai dari merencanakan struktur pohon direktori, membuat domain entry dan organizational units, menambahkan user dengan ldapadd, membuat grup, hingga impor banyak entry sekaligus lewat operasi batch.
Sebelum menambah entry pertama, rancang dulu bentuk pohonnya. Struktur direktori (DIT) yang rapi menentukan mudah tidaknya ACL dan pencarian di episode berikutnya. Prinsip dasarnya:
dc=example,dc=com.ou= (organizational unit).Contoh layout yang umum dipakai: dc=example,dc=com di puncak, lalu ou=People untuk semua user dan ou=Groups untuk semua grup. Kalau organisasi membesar, kalian bisa menambah cabang seperti ou=Contractors atau ou=Departments tanpa memindahkan entry yang sudah ada.
Struktur dasar berisi domain entry dan dua OU. Simpan dalam satu file LDIF:
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: GroupsImpor dengan ldapadd:
ldapadd -x -H ldap://localhost -D "cn=admin,dc=example,dc=com" -W -f struktur-dasar.ldifOpsi -f membaca seluruh file sekaligus; antar-entry dipisahkan baris kosong. Setelah dijalankan, cek hasilnya dengan ldapsearch -x -b dc=example,dc=com -s sub "(objectClass=*)" dan pastikan ketiga entry muncul.
Note
Entry dc=example,dc=com harus dibuat paling awal karena LDAP bersifat hierarkis — entry anak tidak bisa ada sebelum orang tuanya. Konfigurasi dpkg-reconfigure slapd di episode 5 biasanya sudah membuat domain entry ini saat instalasi, jadi cukup memastikannya ada.
User direpresentasikan dengan kombinasi object class. Standar untuk direktori enterprise:
inetOrgPerson — atribut personal seperti cn, sn, givenName, dan mail.posixAccount — atribut Unix seperti uidNumber, gidNumber, homeDirectory, dan loginShell.dn: uid=budi,ou=People,dc=example,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uid: budi
cn: Budi Santoso
sn: Santoso
givenName: Budi
mail: budi@example.com
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/budi
loginShell: /bin/bash
userPassword: {SSHA}1K0vX...Aturan wajib: inetOrgPerson mewajibkan cn dan sn; posixAccount mewajibkan uid, uidNumber, gidNumber, dan homeDirectory. Nilai uidNumber dan gidNumber harus unik agar tidak bentrok saat dipakai sistem.
Atribut userPassword jangan pernah diisi password mentah. Buat hash dulu dengan slappasswd:
slappasswd
New password:
Re-enter new password:
{SSHA}1K0vX...OpenLDAP 2.5 mendukung salted hash SSHA, SSHA256, SSHA512, serta CRYPT dan ARGON2 (bila modul dibangun). Hash yang dihasilkan lalu disalin ke userPassword di LDIF. Detail lengkap tentang hashing dibahas di episode 12.
Tambahkan user-nya dengan ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f budi.ldif.
Important
Selalu tulis userPassword sebagai hash dari slappasswd, bukan teks polos. Di lingkungan nyata, teks polos bisa dengan mudah terbaca oleh siapa saja yang punya akses baca ke atribut ini.
Grup dibedakan menjadi dua kebutuhan: grup untuk pengelolaan direktori dan grup untuk pemetaan Unix.
groupOfNames — memerlukan cn dan minimal satu member, cocok untuk grup aplikasi.posixGroup — memerlukan cn dan gidNumber, memakai memberUid untuk daftar anggota ala Unix.Kedua object class sering digabung dalam satu entry:
dn: cn=devel,ou=Groups,dc=example,dc=com
objectClass: groupOfNames
objectClass: posixGroup
cn: devel
gidNumber: 1001
member: uid=budi,ou=People,dc=example,dc=com
member: uid=sari,ou=People,dc=example,dc=com
memberUid: budi
memberUid: sariMember diisi sebagai DN penuh pada atribut member. Atribut memberOf di sisi user tidak perlu diisi manual — atribut ini dipelihara otomatis oleh overlay memberOf yang akan kalian aktifkan di episode 11.
Tambahkan dengan ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group-devel.ldif.
File LDIF boleh memuat banyak entry sekaligus — pisahkan dengan baris kosong, dan setiap entry tetap dimulai dengan dn::
dn: uid=sari,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: sari
cn: Sari Wulandari
sn: Wulandari
uidNumber: 1002
gidNumber: 1001
homeDirectory: /home/sari
dn: uid=aji,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: aji
cn: Aji Pratama
sn: Pratama
uidNumber: 1003
gidNumber: 1001
homeDirectory: /home/ajiUntuk jumlah besar, impor bisa dipanggil berulang kali dari skrip. Perhatikan dua perilaku default: ldapadd berhenti pada error pertama, dan return code-nya mencerminkan keberhasilan. Tambahkan -c untuk melanjutkan walau ada entry yang gagal:
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f semua-user.ldifLDAP tidak menjamin atomikitas penuh seperti basis data relasional: setiap entry diproses sebagai operasi terpisah. Jika satu file memuat seratus entry dan entry ke-50 gagal, entry 1 sampai 49 tetap tersimpan. Karena itu uji file di server development, dan untuk perubahan yang harus all-or-nothing, pecah menjadi file kecil yang diverifikasi bertahap.
Episode 7 membawa direktori dari kosong menjadi terisi: perencanaan struktur domain dan OU, pembuatan entry user dengan inetOrgPerson plus posixAccount, grup dengan groupOfNames plus posixGroup, hash password via slappasswd, hingga operasi batch dengan mode -c.
Inti yang harus dibawa pulang:
inetOrgPerson butuh cn dan sn; posixAccount butuh uid, uidNumber, gidNumber, homeDirectory.userPassword — selalu hash dengan slappasswd.Di episode 8 berikutnya, kalian akan memodifikasi dan menghapus apa yang sudah dibuat: menambah, mengganti, dan menghapus atribut, merename RDN, memindahkan entry, dan menghapus entry secara aman.