No. 4 コマンドを使ってみる。
manの翻訳を見つけた。
http://www.ldap.jp/openldap/v23/man/start
検索
manで確認すると、非常にオプションが多いので、使いそうな部分のみ。
まずは、今まで使っている、以下のコマンドの確認をする。
ldapsearch -x -LLL -D "uid=namakuwa,ou=user,dc=kuwalab,dc=net" -W -b " uid=namakuwa,ou=user,dc=kuwalab,dc=net" "(objectClass=*)"
-xは簡易認証。SASLを用いない場合に指定する。SASLがどんなものかよくわかってなくて言ってるが。SASLはまた確認する。
-LLLは検索結果の書式の指定。-Lや-LLもある。
参考までに、-LLLの出力結果。
# ldapsearch -x -LLL -D "uid=namakuwa,ou=user,dc=kuwalab,dc=net" -W -b " ui d=namakuwa,ou=user,dc=kuwalab,dc=net" "(objectClass=*)" Enter LDAP Password: dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa
-LLの出力結果。-LLLと比べると、LDIFバージョンが付加されている。
# ldapsearch -x -LL -D "uid=namakuwa,ou=user,dc=kuwalab,dc=net" -W -b "uid=namakuwa,ou=user,dc=kuwalab,dc=net" "(objectClass=*)" Enter LDAP Password: version: 1 dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa
-Lの出力結果。-LLと比べるとコメント行が増えている。
# ldapsearch -x -L -D "uid=namakuwa,ou=user,dc=kuwalab,dc=net" -W -b "uid=namakuwa,ou=user,dc=kuwalab,dc=net" "(objectClass=*)" Enter LDAP Password: version: 1 # # LDAPv3 # base < uid=namakuwa,ou=user,dc=kuwalab,dc=net> with scope sub # filter: (objectClass=*) # requesting: ALL # # namakuwa, user, kuwalab.net dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa # search result # numResponses: 2 # numEntries: 1
-Dは、認証に使うDNを指定。指定しないと匿名接続となる。
-Wは、-Dで指定したDNで認証するパスワードを、プロンプトから入力する。バッチ処理とかでは難しいが、対話でコマンドを書く場合にはこれにしておいたほうがいい(パスワードが見えないから)。
-bは、検索の開始位置のDNを指定する。
一番最後のobjectClass=*は、検索のフィルタ。これがちょっと厄介。ちなみに、指定しない場合には、objectClass=*を指定したのと同じとなる。
例のコマンドでは、-bで指定のDN以下すべてを検索している。
検索フィルタは、RFC4515で定義されている。ドキュメントは、以下に日本語の訳を見つけた。
http://www.asahi-net.or.jp/~aa4t-nngk/rfc4515.html
上記サイトから例を引用。
(!(cn=Tim Howes)) (&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))
andやorの条件がやや複雑。andやorは、以下のように書く必要がある。
(&(xx=xx1)(yy=yy2)) (|(xx=xx1)(yy=yy2))
追加
ldapsearchとほとんど同じオプションが使用できる。
-xや-D、-Wはldapsearchと同じ。LDIFファイルは-fで指定する。-fを指定しない場合には、標準入力からLDIFを入力する。以前にあげていた例は以下。
# ldapadd -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f user.ldif
削除
削除もほとんど同じオプションとなる。最後に削除するDNを指定するだけとなる。
以下、例。
# ldapadd -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f user3.ldif Enter LDAP Password: adding new entry "uid=deletetest,ou=user,dc=kuwalab,dc=net" # ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc=kuwalab,dc=net" "uid=delete*" Enter LDAP Password: dn: uid=deletetest,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid:: ZGVsZXRldGVzdCA= cn: deletetest userPassword:: e1NTSEF9OFRHQU54Z3Y2bjJoamtOYUhtRy85WEUwTnMzcmx2V2U= loginShell: /bin/bash uidNumber: 2003 gidNumber: 2000 homeDirectory: /home/deletetest # ldapdelete -x -D "cn=Manager,dc=kuwalab,dc=net" -W "uid=deletetest,ou= user,dc=kuwalab,dc=net" Enter LDAP Password: # ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc=kuwalab,dc=net" "uid=delete*" Enter LDAP Password: #
user3.ldifは以下。
dn: uid=deletetest,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: deletetest cn: deletetest userPassword: {SSHA}8TGANxgv6n2hjkNaHmG/9XE0Ns3rlvWe loginShell: /bin/bash uidNumber: 2003 gidNumber: 2000 homeDirectory: /home/deletetest
変更
属性の追加
変更も、オプションはほぼ同じ。
修正用のLDIFファイルを用意する。
まずは、属性追加。usermod1.ldifファイルとする。
dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net changetype: modify add: description description: namakuwa user - add: gecos gecos: testgecos -
複数の属性の追加も可能だが、その場合には「-」で区切る。
これを追加する。
# ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc =kuwalab,dc=net" "uid=namakuwa" Enter LDAP Password: dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa userPassword:: e1NTSEF9OFRHQU54Z3Y2bjJoamtOYUhtRy85WEUwTnMzcmx2V2U= loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa # ldapmodify -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f "usermod1.ldif" Enter LDAP Password: modifying entry "uid=namakuwa,ou=user,dc=kuwalab,dc=net" # ldapmodify -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f "usermod1.ldif" Enter LDAP Password: modifying entry "uid=namakuwa,ou=user,dc=kuwalab,dc=net" # ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc =kuwalab,dc=net" "uid=namakuwa" Enter LDAP Password: dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa userPassword:: e1NTSEF9OFRHQU54Z3Y2bjJoamtOYUhtRy85WEUwTnMzcmx2V2U= loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa description: namakuwa user gecos: testgecos
属性の変更
属性の変更は以下のようにする。
まずは、ldifファイル。usermod2.ldifとする。
dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net changetype: modify replace: description description: namakuwa user mod - replace: gecos gecos: testgecos mod -
ファイルを実行。
# ldapmodify -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f "usermod2.ldif" Enter LDAP Password: modifying entry "uid=namakuwa,ou=user,dc=kuwalab,dc=net" # ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc =kuwalab,dc=net" "uid=namakuwa" Enter LDAP Password: dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa userPassword:: e1NTSEF9OFRHQU54Z3Y2bjJoamtOYUhtRy85WEUwTnMzcmx2V2U= loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa description: namakuwa user mod gecos: testgecos mod
属性の削除
最後に削除。同じく、ldifファイルを用意。usermod3.ldifとする。
dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net changetype: modify delete: description - delete: gecos gecos: testgecos aa -
ファイルを実行。
# ldapmodify -x -D "cn=Manager,dc=kuwalab,dc=net" -W -f "usermod3.ldif" Enter LDAP Password: modifying entry "uid=namakuwa,ou=user,dc=kuwalab,dc=net" # ldapsearch -x -LLL -D "cn=Manager,dc=kuwalab,dc=net" -W -b "ou=user,dc =kuwalab,dc=net" "uid=namakuwa" Enter LDAP Password: dn: uid=namakuwa,ou=user,dc=kuwalab,dc=net objectClass: account objectClass: posixAccount objectClass: top uid: namakuwa cn: namakuwa userPassword:: e1NTSEF9OFRHQU54Z3Y2bjJoamtOYUhtRy85WEUwTnMzcmx2V2U= loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/namakuwa gecos: testgecos aa
削除時に、削除する属性値まで指定した場合には、それが一致した場合のみ削除される。そのため、gecosは削除されていない。
次回は、Javaでつついてみる。