とほほのOpenLDAP入門

目次

環境

参考

下記のサイトを参考にさせていただきました。

OpenLDAP をインストールする

OpenLDAPをインストールする

# yum -y install openldap-servers openldap-clients

パスワードを暗号化しておく

# slappasswd
New password:
Re-enter new password:
{SSHA}l3lUgv5JrcNV0fwIEqPa93Ybielmvp3z

コンフィグ設定する

OpenLDAP 2.3 以降では、slapd.conf を使用せず、/etc/openldap/slapd.d/cn=config 配下のエントリを使用するように変更されました。これにより、コンフィグ自体も LDAP 経由でダイナミックにリモートからでも変更可能となりましたが、面倒なので、今回は slapd.conf を用いて初期設定します。

# cp -p /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# vi /etc/openldap/slapd.conf

suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}l3lUgv5JrcNV0fwIEqPa93Ybielmvp3z

# vi /etc/sysconfig/ldap

SLAPD_OPTIONS="-f /etc/openldap/slapd.conf"

サービスを起動する

# chkconfig slapd on
# service slapd start

接続できるか確認する

# ldapsearch -x -LLL -D 'cn=Manager,dc=example,dc=com' -W -b 'dc=example,dc=com' '(objectClass=*)'
Enter LDAP Password:
No such object (32)

データを登録する

基本エントリを登録する

# vi init.ldif

dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: VIRTUAL CORPORATION
dc: example

dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: Manager

# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f init.ldif

Users, Groups, Computers を登録する

# vi add.ldif

dn: ou=Users,dc=example,dc=com
objectclass: organizationalUnit
ou: Users

dn: ou=Groups,dc=example,dc=com
objectclass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=example,dc=com
objectclass: organizationalUnit
ou: Computers

# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f add.ldif

グループ情報を登録する

# vi groupadd.ldif

dn: cn=develop,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: develop
gidNumber: 1000

dn: cn=sales,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: sales
gidNumber: 1001

dn: cn=market,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: market
gidNumber: 1002

# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f groupadd.ldif

ユーザ情報を登録する

# vi useradd.ldif

dn: uid=takeda,ou=Users,dc=example,dc=com
objectclass: posixAccount
objectclass: inetOrgPerson
sn: takeda
cn: kazuma
displayName: Takeda Kazuma
uid: takeda
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/takeda
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: takeda@example.com

dn: uid=suzuki,ou=Users,dc=example,dc=com
objectclass: posixAccount
objectclass: inetOrgPerson
sn: suzuki
cn: hajime
displayName: Suzuki Hajime
uid: suzuki
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/suzuki
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: suzuki@example.com

dn: uid=tanaka,ou=Users,dc=example,dc=com
objectclass: posixAccount
objectclass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: tanaka@example.com

# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f useradd.ldif

データを検索する

ユーザ情報を表示する

# ldapsearch -x -W -D "cn=Manager,dc=example,dc=com" -b "ou=Users,dc=example,dc=com" -s sub
 -x 簡易認証
 -W パスワードをプロンプトから入力
 -D 認証に使用するユーザ情報
 -b 検索の起点
 -s 検索範囲 base | one | sub

Python からアクセスしてみる

# yum -y install python python-ldap python-setuptools
# easy_install pit
# vi pyldap.py

import ldap,ldif
import sys,optparse,getpass

lo = ldap.initialize("ldap://localhost")
lo.simple_bind_s("cn=Manager,dc=example,dc=com", "パスワード")
result = lo.search_s("dc=example,dc=com", ldap.SCOPE_SUBTREE)
ldif_writer = ldif.LDIFWriter(sys.stdout)
for dn, entry in result:
    ldif_writer.unparse(dn,entry)

# python pyldap.py