Kamis, 22 November 2012

Export and Import ldif file with Slapadd



OpenLDAP Clients dan Utilities

 | January 5th, 2010
Sampai sejauh ini, kita telah melihat operasi2 server, dan membuat file LDIF, mewakili inisial DIT kita. Lab  kali ini kita akan melihat dua kelompok tools, yaitu OpenLDAP utilities dan OpenLDAP clients.
Membuat File LDIF
Menerangkan  kegunaan dasar dari OpenLDAP utilities.
Melihat beberapa flags yg berguna,( lihat manpages jika anda ingin mengetahui lebih details).
Penambahan, Pengubahan/modifikasi, dan Penghapusan

1: Menggunakan Utilities untuk menyiapkan the Directory
1.1: slapadd

A. Membuat file LDIF dan me-Loading file LDIF
Anda bisa buat dari file kosong, sekarang  kita akan mencoba me-load LDIF file tsb. Ada 4 langkah, Stop  slapd server, Test  LDIF file dengan slapadd, Load directory tsb dengan slapadd dan Restart the slapd server

B. Menghentikan slapd server
$ sudo invoke-rc.d slapd stop
$ sudo kill `pgrep slapd`

C. Menjalankan ldapadd dalam Modus Test
Indikasi  LDIF file kita berhasil di load maka, output-nya akan terlihat seperti ini:

$ sudo slapadd -v -u -c -f /etc/ldap/slapd.conf -l basics.ldif
added: “dc=example,dc=com”
added: “ou=Users,dc=example,dc=com”
added: “ou=Groups,dc=example,dc=com”
added: “ou=System,dc=example,dc=com”
added: “uid=christo,ou=Users,dc=example,dc=com”
added: “uid=ika,ou=Users,dc=example,dc=com”
added: “cn=LDAP Admins,ou=Groups,dc=example,dc=com”
added: “uid=authenticate,ou=System,dc=example,dc=com”
No errors. We are ready to proceed to the third step: importing the records into the directory.

D. Meng-Import Records Menggunakan slapadd
Setelah di test berhasil maka lakukan importing record, dengan cara:
$ sudo slapadd -v -f /etc/ldap/slapd.conf -l basics.ldif

Dan hasilnya akan seperti ini:
added: “dc=example,dc=com” (00000001)
added: “ou=Users,dc=example,dc=com” (00000002)
added: “ou=Groups,dc=example,dc=com” (00000003)
added: “ou=System,dc=example,dc=com” (00000004)
added: “uid=christo,ou=Users,dc=example,dc=com” (00000005)
added: “uid=ika,ou=Users,dc=example,dc=com” (00000006)
added: “cn=LDAP Admins,ou=Groups,dc=example,dc=com” (00000007)
added: “uid=authenticate,ou=System,dc=example,dc=com” (00000008)

Catatan: hasil keluaran kali ini sedikit berbeda pada saat kita test, perhatikan pada the-end-of-line, ada sebuah angka ID yg berada di dalam kurung. Ini adalah angka ID yg membuat sebuah attribute entryCSN, yg akan digunakan secara internal open OpenLDAP untuk memonitor record.
E. Menghancurkan dan Membuat ulang file-file Directory
Jika terjadi sesuatu yg tidak diharapkan terhadap database ldap, misalnya data korup, atau kita salah meng-import LDIF file.
Perintah di bawah ini akan menghapus database:
$ cd /var/lib/ldap
$ sudo rm __db.* *.bdb log.*

Sekarang ldap kita hanya mempunyai bbrp file:
alock DB_CONFIG DB_CONFIG.example

Karena kita sudah berhasil menghancurkan database, sekarang kita bisa re-create database ldap kita dengan menggunakan LDIF file yg benar.
Berhentikan dulu slapd service sebelum melakukan perintah di bawah ini:

$ sudo slapadd -v -l basics.ldif
added: “dc=example,dc=com” (00000001)
added: “ou=Users,dc=example,dc=com” (00000002)
added: “ou=Groups,dc=example,dc=com” (00000003)
added: “ou=System,dc=example,dc=com” (00000004)
added: “uid=christo,ou=Users,dc=example,dc=com” (00000005)
added: “uid=ika,ou=Users,dc=example,dc=com” (00000006)
added: “cn=LDAP Admins,ou=Groups,dc=example,dc=com” (00000007)
added: “uid=authenticate,ou=System,dc=example,dc=com” (00000008)
_#################### 100.00% eta   none elapsed            none fast!
Closing DB…

Begitulah caranya menhancurkan dan membuat ulang sebuah directory.
1.2:slapindex
Seperti halnya slapadd, slapindex tidak boleh dijalankan pada saat server running. Sebelum menjalankan slapindex, hentikan dulu slapd.

slapindex  dijalankan demikian:
$ sudo slapindex -q -f /etc/ldap/slapd.conf

Jika ada error seperti dibawah ini:
WARNING!
Runnig as root!
There’s a fair chance slapd will fail to start.
Check file permissions!

Coba perintah dengan user openldap di bawah:
$ sudo -u openldap slapindex -q -f /etc/ldap/slapd.conf

Perintah di atas akan membangun ulang semua index2 untuk database pertama kita yg terdefinisi di slapd.conf.
1.3: slapcat
Di sequence 1.1 kita telah membahas penggunaan slapadd untuk mereload records di basics.ldif ke dalam directory. Sekarang kita akan menggunakan slapcat untuk melihat isi dari record2 tsb, dan hasil keluarannya kita taruh di file basics-out.ldif.
$ sudo slapcat -l basics-out.ldif

Kita juga bisa menggunakan flag –a untuk men-dump hanya bbrp subtree, contohnya, kita ingin men-dump record2 di OU users dengan menggunakan perintah:
$ sudo slapcat -a “(entryDN:dnSubtreeMatch:=ou=Users, dc=example,dc=com)”
dn: ou=Users,dc=example,dc=com
ou: Users
description: Example.Com Users
objectClass: organizationalUnit
structuralObjectClass: organizationalUnit
entryUUID: 13ab54a8-1f79-102e-8408-f3f871750024
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20090817125608Z
entryCSN: 20090817125608.518939Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20090817125608Z

dn: uid=christo,ou=Users,dc=example,dc=com
ou: Users
uid: christo
cn: Christo Moa
sn: Moa
givenName: Christo
givenName: Christophorus
displayName: Christo Moa
title: Systems Integrator
description: Systems Integration and IT for Example.Com
employeeType: Employee
departmentNumber: 001
employeeNumber: 001-08-98
mail: cmoa@example.com
mail: christo@example.com
roomNumber: 301
telephoneNumber: +1 555 555 4321
mobile: +1 555 555 6789
st: Illinois
l: Chicago
street: 1234 Cicero Ave.
homePhone: +1 555 555 9876
homePostalAddress: 1234 home street $ Chicago, IL $ 60699-1234
userPassword:: c2VjcmV0
preferredLanguage: en-us,en-gb
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
entryUUID: 13ac0786-1f79-102e-840b-f3f871750024
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20090817125608Z
entryCSN: 20090817125608.523522Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20090817125608Z

dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
entryUUID: 13ad8d7c-1f79-102e-840c-f3f871750024
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20090817125608Z
entryCSN: 20090817125608.533501Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20090817125608Z

Operational Attributes
Mari kita lihat dan coba perintah2 lain dengan menggunakan slapcat, misal kita ingin mengetahui record dari Base DN:
$ sudo slapcat -a “(dc=example)”
dn: dc=example,dc=com
description: Example.Com, your trusted non-existent corporation.
dc: example
o: Example.Com
objectClass: top
objectClass: dcObject
objectClass: organization
structuralObjectClass: organization
entryUUID: 13a6eaf8-1f79-102e-8407-f3f871750024
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20090817125608Z
entryCSN: 20090817125608.489878Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20090817125608Z

Kita coba lagi dengan perintah berikut:
$ sudo slapcat -a ‘(uid=ika)’
dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
entryUUID: 13ad8d7c-1f79-102e-840c-f3f871750024
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20090817125608Z
entryCSN: 20090817125608.533501Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20090817125608Z

1.4: slapacl
Di Lab sebelumnya (pengenalan OpenLDAP), kita menambahkan ACL seperti berikut di slapd.conf:
access to attrs=userPassword
by anonymous auth
by self write
by * none

Sekarang kita bisa mengetest-nya dengan menggunakan utility seperti berikut:
$ sudo slapacl -v -D “uid=christo,ou=Users,dc=example,dc=com” -b
“uid=ika,ou=Users,dc=example,dc=com” “userPassword/write”
authcDN: “uid=christo,ou=users,dc=example,dc=com”
write access to userPassword: DENIED

1.5: slapauth
slapauth tool digunakan untuk mengetest SASL otentikasi terhadap directory server. Ketika sebuah aplikasi mencoba binding menggunakan SASL, daripada menggunakan complete DN (seperti uid=christo,ou=Users,dc=example,dc=com), sang aplikasi akan melewatkan sebuah user ID saja (misal u:christo) bersama dengan bbrp informasi lain, seperti realm identifier dan mekanisme otentikasi.

Kita akan bahas  lebih jauh SASL authentication di topik openldap yg lain.
Sementara itu mari kita tambahkan directives konfigurasi SASL berikut ke dalam slapd.conf kita: (anda bisa membuang tanda pagar # di file slapd.conf anda)
authz-policy from
authz-regexp “^uid=([^,]+).*,cn=auth$”
“uid=$1,ou=Users,dc=example,dc=com”

Format-nya  ke LDAP DN seperti berikut:
$ sudo slapauth -U “christo” -X “u: christo”
ID: <christo>
authcDN: <uid=christo,ou=users,dc=example,dc=com>
authzDN: <uid=christo,ou=users,dc=example,dc=com>
authorization OK

Parameter pertama , -U christo, akan mengirimkan test request dengan SASL authcID dari user christo. Parameter -X “u: christo” mengirimkan test request dengan  authzID u: christo.  Hal tsb di atas akan memberikan ouput DN yg terformat, menurut, expresi regular di dalam authz-regexp.
Kita akan menggunakan slapauth lebih banyak di part 4 dimana kita akan men-setup SASL authentication.
1.6: slapdn
slapdn tool digunakan untuk mengetest, apakah DN yg diberikan valid atau tidak untuk directory server ini. Secara khusus, tool ini akan menge-test sebuah DN terhadap schema2 yg terdefinisi untuk menyakinkan bahwa DN tsb valid.

Di bawah ini ada bbrp contoh slapdn in action:
$ sudo slapdn ‘cn=Foo,dc=example,dc=com’
DN: <cn=Foo,dc=example,dc=com> check succeeded
normalized: <cn=foo,dc=example,dc=com>
pretty: <cn=Foo,dc=example,dc=com>

$ sudo slapdn ‘ou=New Unit,dc=example,dc=com’
DN: <ou=New Unit,dc=example,dc=com> check succeeded
normalized: <ou=new unit,dc=example,dc=com>
pretty: <ou=New Unit,dc=example,dc=com>

Pada contoh2 di atas, DN berhasil di check. slapdn berhasil mengetest DN, dan menghasilkan versi hasil normalized (maksudnya, semua hurup kecil, semua extra spaces dibuang) dan hasil pretty (format asli)
Contoh yg salah:
$ sudo slapdn ‘fakeAttr=test,dc=example,dc=com’
DN: <fakeAttr=test,dc=example,dc=com> check failed 21
(Invalid syntax)

Dalam kasus yg salah tsb, tidak ditemukan schema yg memiliki attribute fakeAttr.
Ini contoh yg salah lagi:
$ sudo slapdn ‘documentSeries=Series 18,dc=example,dc=com’
DN: <documentSeries=Series 18,dc=example,dc=com> check failed 21
(Invalid syntax)
Walaupun documentSeries didefinisikan di dalam schema, tapi dia adalah sebuah object class, dan bukan sebuah attribute, nama object class  tidak dapat digunakan untuk men-konstruksi-kan DN.

Kegunaan utama dari slapdn program terbatas hanya untuk kasus2 jarang dimana kita perlu menge-test sebuah DN terhadap sebuah directory tanpa dapat melihat slapd.conf file untuk mengetahui schema apa saja yg ter-load (atau, cara lain, cari schema2 tsb menggunakan program ldapsearch)
1.7: slappasswd
slappasswd adalah sebuah tool untuk meng-enkripsi password sesuai dengan schema2 yg di support oleh OpenLDAP, seperti yg dijelaskan di dalam RFC 2307 (http://rfc-editor.org/rfc/rfc2307.txt).

Men-generasi sebuah Password dengan slappasswd
Setelah kita mengerti dasar dari bagaimana passwords digunakan dan disimpan, kita bisa mencoba sekarang slappasswd. Program ini digunakan untuk meng-enkripsi sebuah password dan mem-format-nya untuk bisa dimasukan ke dalam sebuah file LDIF . Perintahnya bisa dijalankan tanpa arguments:

$ slappasswd
New password:
Re-enter new password:
{SSHA}71xEB2E59cuoPEQLErY44bYMHwCCgbtR

Dalam contoh di atas, karena tidak ada parameters di masukan ke baris perintah, slappasswd akan mengeluarkan prompt untuk masukan password, dan kemudian mengeluarkan prompt lagi untuk mem-verifikasi password tsb.  Kemudian hasil encypted-nya dari password dihasilkan di layar. Kita bisa menggunakan hasil tsb untk dimasukan ke LDIF record kita:
dn: uid=bernard,ou=Users,dc=example,dc=com
cn: Bernard Setiawan
sn: Setiawan
uid: bernard
ou: Users
userPassword: {SSHA}71xEB2E59cuoPEQLErY44bYMHwCCgbtR
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

kalau kita tidak ingin mengetik dan mengetik ulang password, kita bisa menggunakan parameter –T untuk kita arahkan ke sebuah file yg berisi list dari clear-text passwords untuk kita hashed, atau kita bisa juga memasukan password tsb ke dalam baris perintah dengan –s.
$ for i in foo bar baz ; do slappasswd -s $i; done
{SSHA}p3zm8Sq/jgAMxYkniwnu+ym954qjIRiG
{SSHA}Fklv7m0n0wIw8sLQOe2IxDRsexZegzUT
{SSHA}FOLOLnR0fgmw7jP8p1WRQEJXoX3fJsyG

Dalam contoh diatas, masing2 dari 3 clear-text passwords, foo, bar dan baz berhasil di encrypted dengan perintah slappasswd.
Dengan menggunakan parameter –h, kita juga bisa menentukan algoritma hashing yg slappasswd akan gunakan:
$ slappasswd -h {MD5} -s test
{MD5}CY9rzUYh03PK3k6DJie09g==

$ slappasswd -h {SMD5} -s test
{SMD5}vWw5aAcoIbJ1PS9BMnp/KF5XS5g=

$ slappasswd -h {SHA} -s test
{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

1.8: slaptestslaptest digunakan untuk mengecek format dan directives yg digunakan di dalam file slapd.conf (dan tentu setiap file2 yg di include-kan oleh slapd.conf)
Menjalankan slaptest sederhana seperti demikian:
$ slaptest -v -f /etc/ldap/slapd.conf
config file testing succeeded

2: Menjalankan Operasi-operasi Directory Menggunakan Clients
Coba lihat file /etc/ldap/ldap.conf, di situ kita set beberapa default yg berguna.
URI ldap://localhost
BASE dc=example,dc=com
BINDDN cn=Manager,dc=example,dc=com

Sekarang kita akan praktekan beberapa perintah yg menggunakan clients
2.1: ldapsearch
2.1.1 Pencarian Sederhana
Mari kita lihat bbrp perintah pencarian sederhana , di sini kita akan masuk sbg manager dan me-request record dengan entry user ID ika:

$ ldapsearch -x -W -D ‘cn=Manager,dc=example,dc=com’ -b
‘ou=Users,dc=example,dc=com’ ‘(uid=ika)’

Inilah hasilnya:
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=example,dc=com> with scope subtree
# filter: (uid=ika)
# requesting: ALL
#
# ika, Users, example.com
dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Bbrp baris komentar memberikan informasi dasar ttg pencarian tsb:
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=example,dc=com> with scope subtree
# filter: (userID=ika)
# requesting: ALL
#

Ringkasan dari hasil:
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

$ ldapsearch -x -w secret -D ‘cn=Manager,dc=example,dc=com’ -b
‘ou=Users,dc=example,dc=com’ -LLL ‘(userID=christo)’ mail cn

Dan inilah hasil sebenarnya:
dn: uid=christo,ou=Users,dc=example,dc=com
cn: Christo Moa
mail: cmoa@example.com
mail: christo@example.com

2.1.2 Me-request Atribut-atribut OperasionalKita telah bahas slapcat di sequence 1, sekarang mari kita bandingkan slapcat dengan ldapsearch.
Pertama, output dari ldapsearch:
$ ldapsearch -x -w secret -D ‘cn=Manager,dc=example,dc=com’ -b
‘ou=Users,dc=example,dc=com’ -LLL ‘(userID=ika)’
dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

Yang ini adalah output dari slapcat:
$ sudo slapcat -a ‘(uid=ika)’
dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
entryUUID: bec561c4-c5b0-102a-81c0-81bc30f92d57
creatorsName: cn=Manager,dc=example,dc=com
modifiersName: cn=Manager,dc=example,dc=com
createTimestamp: 20060821223300Z
modifyTimestamp: 20060821223300Z
entryCSN: 20060821223300Z#000005#00#000000

Dibandingkan dengan ldapsearch,  hasil dari slapcat mempunyai attribut2 tambahan – yg dinamakan attribut2  operational khusus yg dimaintain oleh directory tsb secara internal. Kita juda dapat me-retrieve attribut2 operasional tsb dengan ldapsearch, baik dengan men-specifikasi mereka dg nama bersamaan dengan list dari attribute yg di inginkan, atau dengan menggunakan tanda khusus plus (+) attribute list specifier pada ujung perintah ldapsearch:
$ ldapsearch -x -w secret -D ‘cn=Manager,dc=example,dc=com’ –b ‘ou=Users,dc=example,dc=com’ -LLL ‘(userID=ika)’ +
Dan, inilah yg kita dapatkan:
dn: uid=ika,ou=Users,dc=example,dc=com
structuralObjectClass: inetOrgPerson
entryUUID: bec561c4-c5b0-102a-81c0-81bc30f92d57
creatorsName: cn=Manager,dc=example,dc=com
modifiersName: cn=Manager,dc=example,dc=com
createTimestamp: 20060821223300Z
modifyTimestamp: 20060821223300Z
entryCSN: 20060821223300Z#000005#00#000000
entryDN: uid=ika,ou=Users,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

Menambahkan tanda plus (+) tidak akan menghasilkan seluruh attribute2 – hanya attribute2 operasional. Untuk mendapatkan seluruh attribute2 regular dan seluruh attribute2 operasional, kita harus menambahkan tanda plus (+) dan tanda asterisk (*).
Specifier asterisk (*) menandakan bahwa kita menginginkan seluruh attribute2 standard. Dan inilah hasilnya:

$ ldapsearch -x -w secret -D ‘cn=Manager,dc=example,dc=com’ -b
‘ou=Users,dc=example,dc=com’ -LLL ‘(userID=ika)’ ‘*’ +
dn: uid=ika,ou=Users,dc=example,dc=com
ou: Users
uid: ika
sn: Nurdiana
cn: Ika Nurdiana
givenName: Ika
displayName: Ika Nurdiana
mail: ika@example.com
userPassword:: c2VjcmV0
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
entryUUID: bec561c4-c5b0-102a-81c0-81bc30f92d57
creatorsName: cn=Manager,dc=example,dc=com
modifiersName: cn=Manager,dc=example,dc=com
createTimestamp: 20060821223300Z
modifyTimestamp: 20060821223300Z
entryCSN: 20060821223300Z#000005#00#000000
entryDN: uid=ika,ou=Users,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

2.1.3: Searching Using a File
ldapsearch  dapat menggunakan sebuah file untuk membuat dan mengeksekusi multiple queries. Katakanlah kita punya sebuah file yg berisi list dari user ID, dan kita ingin mendapatkan lastname dari masing2 user ID. File userIDs.txt isinya seperti berikut:
christo
Ika

Kita dapat menggunakan ldapsearch untuk secara dinamis membangun sebuah filter dan menjalankan sebuah pencarian untuk masing2 surname/namakeluarga user2 tsb. Untuk melakukan ini, kita menggunakan flag –f, dan mengarahkan ke file userIDs.txt , dan kemudian kita bangun sebuah filter khusus. Kira2 beginilah baris perintah yg akan di jalankan
$ ldapsearch -x -D ‘cn=Manager,dc=example,dc=com’ -b
‘ou=Users,dc=example,dc=com’ -w secret -f userIDs.txt ‘(uid=%s)’ sn

Anda mestinya sudah terbiasa dg perintah di atas, tapi perhatikan filter: ‘(uid=%s)’. Filter ini menggunakan tanda khusus %  untuk mengindikasikan dimana values dari file tsb seharusnya ditempatkan. Begitu ldapsearch jalan, dia akan membaca file userIDs.txt baris per baris, dan pada setiap baris, dia akan menjalankan sebuah pencarian, menggantikan value dari baris tsb dengan %s di filter. Hasilnya akan seperti berikut:
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=example,dc=com> with scope subtree
# filter pattern: (uid=%s)
# requesting: sn
#
#
# filter: (uid=christo)
#
# christo, Users, example.com
dn: uid=christo,ou=Users,dc=example,dc=com
sn: Moa
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
#
# filter: (uid=ika)
#
# ika, Users, example.com
dn: uid=ika,ou=Users,dc=example,dc=com
sn: Nurdiana
# search result
search: 3
result: 0 Success
# numResponses: 2
# numEntries: 1

Di dalam contoh ini, client ldapsearch sebenarnya menjalankan dua operasi pencarian yg berbeda. Pertama dia akan menterjemahkan (uid=%s) menjadi  (uid=christo) dan menjalankan sebuah pencarian; kemudian, dia menterjemahkan  (uid=%s) menjadi (uid=ika), dan menjalankan pencarian yg lain. Pada setiap kasus, dia mengembalikan hanya dn (yg selalu mengembalikan nilai yg cocok/match) dan atribute sn yg diminta.
Anda juga dapat membuat filters di dalam sebuah file, dan menjalankan beberapa pencarian multiple sekaligus. Sebagai contoh, kita dapat membuat sebuah file dengan nama  filters.txt dengan isi sbb:
&(ou=System)(objectClass=account)
&(uid=b*)(ou=Users)

karena masing-masing baris akan di selipkan ke dalam sebuah filter, kita tidak perlu lagi the outer set of parentheses. Sekarang kita dapat menggunakan baris2 tsb untuk secara dinamis membuat filters dengan:
$ ldapsearch -x -D ‘cn=Manager,dc=example,dc=com’ -b
‘dc=example,dc=com’ -w secret -f filters.txt ‘(%s)’ cn description
inilah output yg kita dapatkan:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter pattern: (%s)
# requesting: cn description
#
#
# filter: (&(ou=System)(objectClass=account))
#
# authenticate, System, example.com
dn: uid=authenticate,ou=System,dc=example,dc=com
description: Special account for authenticating users
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
#
# filter: (&(uid=b*)(ou=Users))
#
# ika, Users, example.com
dn: uid=ika,ou=Users,dc=example,dc=com
cn: Ika Nurdiana

# search result
search: 3
result: 0 Success
# numResponses: 2
# numEntries: 1
dalam kasus ini filter (%s) diterjemahkan menjadi, dalam kasus pertama
(&(ou=System)(objectClass=account))
, dan dalam kasus kedua menjadi
(&(uid=b*)(ou=Users))

Menggunakan teknik-teknik ini, menjadikannya memumungkinkan untuk menjalankan sejumlah pencarian-pencarian yg rumit dengan hanya satu perintah.
2.2: ldapadd
ini adalah sebuah program baris perintah (command-line) untuk menambahkan entries ke dalam sebuah directory LDAP. Perintah ldapadd sebenarnya bukan client yg stand-alone. Dia hanya sebuah link ke program ldapmodify. Ketika ldapmodify melihat bahwa dia sedang dipanggil sbg ldapadd, dia berasumsi bahwa dia harus melakukan operasi penambahan thd sang server, dan bukan operasi modifikasi.

Sequence 2.2.1  Penambahan Records dari Command Line
Dalam banyak kasus sederhana, ldapadd dapat digunakan untuk memasukan sebuah record baru dari baris perintah:

$ ldapadd -x -W -D ‘cn=Manager,dc=example,dc=com’
Enter LDAP Password:

Sekali kita berhasil terautentikasi, kursor akan pindah ke baris berikutnya dan menunggu untuk masukan/input. Kita dapat secara langsung memasukan sebuah record. Ketika kita menekan enter dua kali (membuat baris blank, yg menandakan akhir record), ldapadd akan mengirim record tsb ke sang server.
dn: uid=didieb,ou=Users,dc=example,dc=com
cn: Didieb Ajibaskoro
sn: Ajibaskoro
uid: didieb
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
adding new entry “uid=didieb,ou=Users,dc=example,dc=com”

Bagian yg di tebali di atas menandakan text yg kita masukan. Dia menandakan satu record keseluruhan (sebuah record untuk seorang user bernama Didieb Ajibaskoro).
Setelah kita menekan tombol Enter/Return dua kali, memasukan sebuah beris kosong, record tsb dikirim ke sang server. client tsb memperlihatkan bahwa dia sedang membahkan record :
adding new entry “uid=didieb,ou=Users,dc=example,dc=com”.
Tidak ada pesan kesalahan.  Ini artinya proses penambahan sukses.

Setelah sebuah record ditambahkan cursor akan pindah ke sebuah baris kosong, menunggu untuk atribut dn dari record selanjutnya.
dn: cn=Foo,dc=example,dc=com
farble: gork
objectClass: account
adding new entry “cn=Foo,dc=example,dc=com”
ldap_add: Undefined attribute type (17)
additional info: farble: attribute type undefined

Dalam contoh ini record yg kita masukan, berisi sebuah atribute tidak terdefinisi, dan akan mengeluarkan pesan kesalahan yg sama. Dalam kasus dimana server mengirim sebuah pesan kesalahan, client ldapadd mengeluarkan pesan kesalahan dan exits. Untuk memasukan kembali record tsb anda harus menjalankan ulang ldapadd.
Tetapi selama records baru adalah valid dan sang server tidak mengeluarkan sebuah error, ldapadd akan melanjutkan prompting (atau mendengarkan) untuk records baru. Ketika selesai, gunakan CTRL-C  untuk exit dari program tsb.
2.2.2  Penambahan Records dari sebuah File
Walaupun memasukan sebuah record secara langsung ke dalam client tsb mungkin berguna dalam bbrp kesempatan, dalam banyak kasus akan jauh lebih nyaman (dan lebih jarang error) untuk membuat records tsb di dalam file text biasa, dan me-load-nya sekaligus dengan program ldapadd

Sebagaimana biasa, records dalam file text harus dimasukan dengan format LDIF. Di sini, sbg contoh, adalah isi dari file extra_user_records.ldif:
dn: uid=didieb,ou=Users,dc=example,dc=com
cn: Didieb Ajibaskoro
sn: Ajibaskoro
uid: didieb
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

dn: uid=ronaldi,ou=Users,dc=example,dc=com
cn: Ronaldi Santosa
sn: Santosa
uid: ronaldi
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

dn: uid=soniel,ou=Users,dc=example,dc=com
cn: Soniel Tulak
sn: Tulak
uid: soniel
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

Kita dapat memasukan seluruh records di dalam satu file:
$ ldapadd -x -w secret -D ‘cn=Manager,dc=example,dc=com’ -f
extra_user_records.ldif
adding new entry “uid=didieb,ou=Users,dc=example,dc=com”

adding new entry “uid=ronaldi,ou=Users,dc=example,dc=com”
adding new entry “uid=soniel,ou=Users,dc=example,dc=com”
Serupa dengan ketika memasukan records secara interactive, di sini ketidak adaan pesan kesalahan menandakan bahwa record tsb berhasil di tambah.
Selanjutnya kita akan lihat bagaimana memodifikasi records yg sudah ada di dalam directory.

2.3: ldapmodify
Program  ldapmodify digunakan untuk memodifikasi entry yg sudah ada. Dia dapat menambahkan, merubah, dan menghapus atribut2 dari sebuah entries di dalam  directory.
Dia dapat pula digunakan untuk menambahkan entries baru (bersama dengan atribut2 untuk entri tersebut). Sama seperti ldapadd, ldapmodify dapat di jalankan secara interactive. Dia dapat di gunakan untuk menambahkan, merubah dan menghapus recor-record

Sequence 2.3.1: Penambahn sebuah Record dengan ldapmodify
Syntax untuk penambahan sebuah record hampir sama dengan  ldapadd:
$ ldapmodify -w secret -x -D ‘cn=Manager,dc=example,dc=com’

Inilah hasilnya:
dn: uid=bernard,ou=Users,dc=example,dc=com
changetype: add
cn: Bernard Setiawan
sn: Setiawan
uid: bernard
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
adding new entry “uid=bernard,ou=Users,dc=example,dc=com”

Satu2nya perbedaan adalah instruksi changetype setelah dn tersebut. Hal ini akan memberitahukan ldapmodify operasi LDAP apa yg harus dijalankan pada record tsb.
Instruksi changetype bukan sebuah atribut, walaupun dia mirip. Dia bukan bagian dari sang record, tapi lebih kepada sebuah instruksi (dalam format LDIF) untuk memberi tahu server operasi apa yg harus dijalankan/digunakan.

Ada 4 nilai yg mungkin dari changetype:
add
modify
modrdn
delete

Masing2 dari mereka berhubungan dengan operasi LDAP. Changetype add digunakan untuk menambahkan sebuah record baru (secara essential sama dengan operasi penambah di ldapadd)
changetype modify mengambil record yg ada dan merubahnya dg bbrp cara (sbg contoh, dengan penambahan, perubahan, atau penghapusan atribut-atribut). change-type modrdn merubah RDN (relative DN) dari sebuah record. change-type delete menghapus seluruh record dari directory server.

2.3.2: Modifikasi Records yang ada
Umumnya lebih mudah untuk menambahkan records dengan ldapadd. Di mana client
ldapmodify lebih mempunyai fleksibilitas dalam memodifikasi records yg sudah ada., penambahan, penghapusan atau penggantian atribut2 didalam sebuah record.
Mari kita tambahkan sebuah field givenName terhadap salah satu records yg kita tambahkan pada seksi terakhir:
$ ldapmodify -x -W -D ‘cn=Manager,dc=example,dc=com’
Ini adalah keluarannya:
Enter LDAP Password:
dn: uid=ronaldi,ou=Users,dc=example,dc=com
changetype: modify
add: givenName
givenName: Ronaldi
modifying entry “uid=ronaldi,ou=Users,dc=example,dc=com”

Sama seperti ldapadd, sekali proses otentikasi telah dilakukan, , ldapmodify menunggu  untuk sebuah DN diberikan. Setelah atribut dn di tentukan, yg harus mengikutinya adalah changetype.
Ketika menggunakan changetype modify, seperti yg kita lakukan di sini. Kita juga harus menentukan secara tepat atribut apa yg akan kita rubah, dan bagaimana kita akan merubahnya. Changetype modify adalah satu2nya tipe yang diperlukan untuk penentuan berikutnya.

Dalam kasus ini, kita ingin menambahkan sebuah atribut baru ke uid=ronaldi, ou=Users, dc=example, dc=com record.  Dan atribut yg ingin kita tambahkan adalah givenName. Jadi, baris yg menentukan bahwa kita akan menambahkan atribute givenName  adalah add: givenName.
Kemudian, kita ingin menentukan atribut dan nilai atribute (attribute and attribute value):
givenName: Ronaldi

Kemudian, dengan menekan Enter dua kali, kita menunjukan bahwa record tsb komplit. Sama seperi ldapadd, ldapmodify menentukan record mana yg sedang dimodifikasi. Jika sang server tidak mengembalikan nilai kesalahan, ldapmodify akan menunggu untuk record  berikutnya yg akan dimodifikasi.
Jenis modifikasi add adalah salah satu dari tiga yg di dukung oleh ldapmodify. Operasi2 tsb hanya dapat di tentukan jika changetype di atur untuk modify. Tiga tipe modification tsb adalah::
add:  Menambahkan atribut2 baru terhadap record yg sudah ada
replace:  Menggantikan nilai atribut yg sudah ada dengan nilai atribut yg baru
delete:  menghapus atribut2 dari record

lebih dari satu jenis dari operasi2 ini dapat dilakukan dengan satu transaksi saja:
$ ldapmodify -w secret -x -D ‘cn=Manager,dc=example,dc=com’
dn: uid=soniel,ou=Users,dc=example,dc=com
changetype: modify
add: givenName
givenName: Sony
-
replace: cn
cn: Sony Tulak
modifying entry “uid=soniel,ou=Users,dc=example,dc=com”

Dalam contoh tsb, pertama kita menambahkan givenName, dan kemudian kita menggantikan nilan cn yg lama dengan nilai yg baru. Antara dua permintaan modifikasi kita menggunakan sebuah dash (-) untuk menandakan bahwa kita masih bekerja pada record yg sama. Ingat, sebuah baris kosong menandakan bahwa kita telah selesai bekerja di record tsb. Sekarang, jika kita lookup record tsb dengan perintah ldapsearch, akan terlihat seperti ini:
$ ldapsearch -x -w secret -D ‘cn=Manager,dc=example,dc=com’ -LLL  ‘(uid=soniel)’
dn: uid=soniel,ou=Users,dc=example,dc=com
sn: Tulak
uid: soniel
ou: Users
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
givenName: Sony
cn: Sony Tulak

Tidak ada komentar:

Posting Komentar