コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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でつついてみる。