Bagaimana cara mengonfigurasi Reverse Keanggotaan Pemeliharaan di server openldap? (anggota dari)

18

Saat ini saya sedang berupaya mengintegrasikan otentikasi LDAP ke dalam sistem dan saya ingin membatasi akses berdasarkan pada kelompok LDAP. Satu-satunya cara untuk melakukan ini adalah melalui filter pencarian dan oleh karena itu saya percaya satu-satunya pilihan saya adalah penggunaan atribut "memberOf" di filter pencarian saya. Ini adalah pemahaman saya bahwa atribut "memberOf" adalah atribut operasional yang dapat dibuat oleh server untuk saya kapan saja atribut "anggota" baru dibuat untuk setiap entri "groupOfNames" di server. Tujuan utama saya adalah untuk dapat menambahkan atribut "anggota" ke entri "groupOfNames" yang ada dan menambahkan atribut "anggotaOf" yang cocok ditambahkan ke DN yang saya berikan.

Apa yang telah saya capai sejauh ini:

Saya masih cukup baru dalam administrasi LDAP tetapi berdasarkan apa yang saya temukan di panduan admin openldap, sepertinya Reverse Group Membership Maintence alias "overlay anggota" akan mencapai efek yang saya cari.

Server saya sedang menjalankan instalasi paket (slapd di ubuntu) dari openldap 2.4.15 yang menggunakan konfigurasi runtime gaya "cn = config". Sebagian besar contoh yang saya temukan masih merujuk pada metode konfigurasi statis "slapd.conf" yang lebih lama dan saya telah mencoba yang terbaik untuk menyesuaikan konfigurasi dengan model berbasis direktori baru.

Saya telah menambahkan entri berikut untuk mengaktifkan modul overlay anggota:

Aktifkan modul dengan olcModuleLoad

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

Mengaktifkan hamparan untuk basis data dan mengizinkannya untuk menggunakan pengaturan defaultnya (groupOfNames, anggota, memberOf, dll)

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

Hasil saya saat ini:

Dengan menggunakan konfigurasi di atas, saya dapat menambahkan "groupOfNames" BARU dengan sejumlah entri "anggota" dan memiliki semua DN yang terlibat diperbarui dengan atribut "memberOf". Ini adalah bagian dari perilaku yang saya harapkan. Meskipun saya percaya bahwa hal-hal berikut ini harus diselesaikan dengan overlay anggota, saya masih tidak tahu bagaimana melakukan hal berikut dan saya akan dengan senang hati menerima saran apa pun:

  1. Tambahkan atribut "anggota" ke "groupOfNames" yang ada dan buat atribut "memberOf" yang sesuai dibuat secara otomatis.
  2. Hapus atribut "anggota" dan minta atribut "memberOf" yang sesuai dihapus secara otomatis.
Emill
sumber

Jawaban:

10

Saya telah berjuang dengan hal yang sama, dokumentasi openldap minimalis dan hampir tidak membantu sama sekali. Ketika mereka pergi ke database konfigurasi (bukan ide yang buruk pada prinsipnya) semua opsi berubah jadi ketika orang memberi contoh dari /etc/ldap/slapd.conf itu tidak berguna dengan konfigurasi slapd modern (seperti Ubuntu).

Saya akhirnya berhasil. Inilah ringkasan ... file LDIF pertama:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

File LDIF kedua:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Tambahkan mereka ke dalam database konfigurasi menggunakan ldapadd (sama seperti hal-hal konfigurasi normal).

Itu tidak secara otomatis memperbarui data yang ada dalam database, jadi saya perlu menggunakan slapcat untuk menyalin semuanya ke file sementara, dan mengunjungi setiap grup, menghapus grup dan menambahkan grup yang sama kembali lagi (memaksa atribut memberOf untuk memperbarui benar). Jika Anda memulai dengan database kosong, maka itu akan memperbarui atribut dengan benar ketika objek ditambahkan.

Juga, perhatikan bahwa "olcDatabase = {1} hdb" sangat tipikal, tetapi tidak dijamin cocok dengan pengaturan Anda. Pastikan untuk memeriksa yang itu.

Telford Tendys
sumber
1
Bukankah slapadd(ke basis data yang dihentikan) cara yang tepat untuk melakukannya?
mad_vs
11

Saya menulis tentang ini baru-baru ini di blog saya, www.jordaneunson.com Saya menyalin dan menempel bagian yang relevan di.

Yang harus saya lakukan adalah menghentikan layanan "slapd" di server LDAP saya dan mengedit file slapd.conf saya dan menambahkan dua baris berikut.

moduleload memberof.la
overlay memberof

Saya sudah memiliki groupOfNames bernama vpn jadi saya kemudian harus membuat file LDIF dengan konten berikut:

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

Dan menambahkan ini ke database ldap saya

slapadd -f file.ldif

Setelah ini, saya menyalakan server ldap di debug untuk memeriksa kesalahan

slapd -d 99 -f /etc/ldap/slapd.conf 

dan memeriksa untuk memastikan bahwa keanggotaan grup saya "vpn" terdaftar di entri pengguna saya.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

dan bam! keberhasilan!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

Jadi saya menyalakan kembali layanan slapd dan mendapatkan banyak kesuksesan sejak itu. Untuk alat manajemen GUI baru, saya menggunakan phpLDAPAdmin dan tidak memiliki masalah dengan atribut memberOf yang ditugaskan dan tidak ditugaskan kepada pengguna saya.

Satu hal terakhir yang perlu diperhatikan adalah bahwa atribut "memberOf" bukan bagian dari skema dasar LDAP v3 dan dengan demikian melakukan ldapsearch tidak akan mengungkapkan atribut ini kecuali jika secara spesifik ditanyai. Itulah sebabnya dalam contoh saya di atas dinyatakan pada akhir parameter ldapsearch.

Semoga ini membantu.

Sunting: Saya baru saja menguji masalah Anda dengan Apache Directory Studio: selama saya memasukkan nilai anggota atribut secara keseluruhan seperti yang disebutkan di atas, ia berfungsi dengan baik. Namun atribut memberOf tidak muncul di entri pengguna. Ini karena atribut memberOf bukan bagian dari skema LDAPv3. Untuk memverifikasi bahwa itu ada, gunakan alat baris perintah ldapsearch:

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 
Jordan Eunson
sumber
1
Memuat modul dan menambahkan overlay persis apa yang saya lakukan sayangnya. Seperti yang saya nyatakan masalahnya bukan bahwa atribut "memberOf" tidak ditambahkan untuk entri groupOfNames baru, itu adalah mereka tidak ditambahkan ketika saya cukup menambahkan atribut "anggota" ke grup yang ada. Saat ini saya menggunakan Apache Directory Studio untuk menelusuri dan mengkonfigurasi LDAP saya sehingga tidak menunjukkan entri memberOf ketika saya menelusuri. Bukan masalah mereka disembunyikan.
Mengisi
1
Bagaimana Anda membuat atribut anggota di groupOfNames? Apakah menggunakan seluruh DN? seperti: "uid = pengguna, ou = Orang, dc = corp, dc = org" atau Anda hanya mengisi nama pengguna mereka? Agar pemetaan terbalik berfungsi, Anda harus menggunakan seluruh DN sehingga memberOf tahu di mana harus menempatkan peta terbalik.
Jordan Eunson
1
Sunting: Saya baru saja menguji masalah Anda dengan Apache Directory Studio, selama saya memasukkan nilai anggota atribut secara keseluruhan seperti yang disebutkan di atas, ia berfungsi dengan baik. Namun atribut memberOf tidak muncul di entri pengguna. Ini karena atribut memberOf bukan bagian dari skema LDAPv3. Untuk memverifikasi itu ada gunakan alat baris perintah ldapsearch. <code> ldapsearch -h ldap -x -b "dc = shop, dc = lan" '(uid = jordan)' memberOf </code>
Jordan Eunson
1
Saya menggunakan DN di entri anggota. Bukan masalah tidak melihatnya, seperti yang sudah saya nyatakan, mereka hanya akan ditambahkan (dan karenanya terlihat) dengan groupOfNames baru ditambahkan, bukan ketika saya menambahkan atribut anggota ke grup yang ada.
Mengisi
1
<quote> mereka hanya ditambahkan (dan karenanya terlihat) </quote> Maaf, pernyataan ini salah. Atribut memberOf tidak terlihat kecuali Anda secara khusus menanyakannya. Bisakah Anda memposting output dari perintah ldapsearch yang tercantum di atas? Ubah pengguna menjadi yang seharusnya memiliki atribut memberOf tetapi tidak.
Jordan Eunson