« PreviousNext »

OpenLDAP構築

14 11 月 2007

 
 
各仮想サーバーのネットワークでユーザーのアカウント情報を共有できるようにLDAPサーバーを構築します。

まずOpenLDAP関係をインストールする↓
# yum -y install openldap*
 
管理者パスワード生成する↓
# slappasswd -s password -h {MD5}passwprd は任意の文字
{MD5}*********************    ←   ↓で使うので控えておく
 
これからいろいろとファイルを設定します。
赤字 はおのおの環境に合わせてください。
 は大文字、小文字を間違えないように
 
設定ファイル①修正↓
# vi /etc/openldap/slapd.conf
suffix    "dc=lunq,dc=net"
 
rootdn    "cn=Manager,dc=lunq,dc=net"
 
rootpw    {MD5}************************   近いものがあるのでその辺に追加
 
↓ 最終行に以下を追加
 
------------------------------ここから------------------------------
 
access to attrs=userPassword
    by self write
    by dn="cn=Manager,dc=lunq,dc=net" write
    by anonymous auth
    by * none      

access to attrs=userPassword
    by anonymous auth
    by dn="cn=Admin,dc=lunq,dc=net" read
    by * none    

access to *
    by dn="cn=Manager,dc=lunq,dc=net" write
    by self write
    by * read      

access to *
    by self =rwcsx
    by dn="cn=Admin,dc=lunq,dc=net" =rwcsx
    by * read
 
------------------------------ここまで------------------------------
 
設定ファイル②修正↓
# vi /etc/openldap/ldap.conf
BASE   dc=lunq, dc=net
 
# vi /etc/ldap.conf
base dc=lunq,dc=net
 
LDAPを起動する↓
# /etc/rc.d/init.d/ldap start
Checking configuration files for slapd:  /etc/openldap/slapd.conf:
line 99: rootdn is always granted unlimited privileges.
/etc/openldap/slapd.conf: line 104: rootdn is always granted unlim
ited privileges.
config file testing succeeded[  OK  ]
Starting slapd:[  OK  ]
 
自動起動設定↓
# chkconfig ldap on
 
設定ファイル③修正↓
# vi /usr/share/openldap/migration/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "lunq.net";
 
$DEFAULT_BASE = "dc=lunq,dc=net";
 
設定ファイル④新規作成↓
# vi base.ldif
 
------------------------------ここから------------------------------
 
dn: dc=lunq,dc=net
objectClass: dcObject
objectClass: organization
o: lunq Organization
dc: lunq

dn: cn=Manager, dc=lunq,dc=net
objectClass: organizationalRole
cn: Manager
dn: ou=People,dc=lunq,dc=net
objectClass: organizationalUnit

ou: People
dn: ou=Group,dc=lunq,dc=net
objectClass: organizationalUnit
ou: Group
 
------------------------------ここまで------------------------------
 
↓初期設定ファイルを読み込ませる
# ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -W -f base.ldif
Enter LDAP Password:    ←   管理者パスワード入力
adding new entry "dc=lunq,dc=net"
 
adding new entry "cn=Manager, dc=lunq,dc=net"
 
adding new entry "ou=People,dc=lunq,dc=net"
 
adding new entry "ou=Group,dc=lunq,dc=net"
 
↑成功
※  設定ファイルがおかしいと↓の失敗例のようになってしまう。
    失敗してしまったら設定ファイルを見直す、それでもわからなければ手動登録に進む。
 
↓失敗例 
# ldapadd -h localhost -x -D "cn=manager,dc=lunq,dc=net" -W -f base.ldif
Enter LDAP Password:
ldapadd: attributeDescription "dn": (possible missing newline after line 5 of
entry "dc=lunq,dc=net"?)
ldapadd: attributeDescription "dn": (possible missing newline after line 8 of
entry "dc=lunq,dc=net"?)
ldapadd: attributeDescription "dn": (possible missing newline after line 11 of
entry "dc=lunq,dc=net"?)
adding new entry "dc=lunq,dc=net"
ldap_add: Type or value exists (20)
        additional info: objectClass: value #3 provided more than once
 
※  手動で登録をする場合。↓
# ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -W
Enter LDAP Password:  ← 管理用パスワード応答
 
dn: dc=lunq,dc=net入力後に Enter
objectClass: dcObject入力後に Enter
objectclass: organization入力後に Enter
dc: lunq入力後に Enter
o: lunq Organization入力後に Enter
 「 Ctrl 」 + 「 D 」 押下
adding new entry "dc=lunq,dc=net"
 
dn: cn=Manager,dc=lunq,dc=net入力後に Enter
objectClass: organizationalRole入力後に Enter
cn:Manager入力後に Enter
 「 Ctrl 」 + 「 D 」 押下
adding new entry "cn=Manager,dc=lunq,dc=net"
 
dn: ou=People,dc=lunq,dc=net入力後に Enter
objectClass: organizationalUnit入力後に Enter
ou: People入力後に Enter
 「 Ctrl 」 + 「 D 」 押下
adding new entry "ou=People,dc=lunq,dc=net"
 
dn: ou=Group,dc=lunq,dc=net入力後に Enter
objectClass: organizationalUnit入力後に Enter
ou: Group入力後に Enter
 「 Ctrl 」 + 「 D 」 押下
adding new entry "ou=Group,dc=lunq,dc=net"
 「 Ctrl 」 + 「 D 」 押下でぬける
 
登録されているかの確認をする↓
 
# ldapsearch -x -b 'dc=lunq,dc=net'
 
# extended LDIF
#
# LDAPv3
# base <dc=hoshu,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# lunq.net
dn: dc=lunq,dc=net
objectClass: dcObject
objectClass: organization
dc: lunq
o: lunq Corporation
 
# Manager, lunq.net
dn: cn=Manager,dc=lunq,dc=net
objectClass: organizationalRole
cn: Manager
 
# People, lunq.net
dn: ou=People,dc=lunq,dc=net
objectClass: organizationalUnit
ou: People
 
# Group, lunq.net
dn: ou=Group,dc=lunq,dc=net
objectClass: organizationalUnit
ou: Group
 
# search result
search: 2
result: 0 Success
 
# numResponses: 5
# numEntries: 4

 
 
既存のユーザーとグループをLDAPサーバーに登録

登録するのにパスが長くめんどくさいので/root/直下にリンクを作成する
手動登録のときに使用する。
# ln -s /usr/share/openldap/migration/migrate_passwd.pl /root/migrate_passwd
# ln -s /usr/share/openldap/migration/migrate_group.pl /root/migrate_group
 
のちのち、Postfixでメールサーバー(LDAP)を構築するときのために
下記の内容に変更するためのスクリプト作成する。
 
初期はこういう状態↓
--------------------ここから--------------------
 
dn: uid=hogehoge,ou=People,dc=lunq,dc=net
uid: hogehoge
cn: hogehoge
objectClass: account削除
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}xxxxxxxxxxxxxxxxxxxx
shadowLastChange: 13782
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/hogehoge
 
--------------------ここまでを--------------------
 
↑上記の内容を↓下記に変更
 
--------------------ここから--------------------
 
dn: uid=hogehoge,ou=People,dc=lunq,dc=net
uid: hogehoge
cn: hogehoge
objectClass: person   ← 追加
objectClass: organizationalPerson   ← 追加
objectClass: inetOrgPerson   ← 追加
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}xxxxxxxxxxxxxxxxxxxx
postalAddress: cn=hogehoge,ou=Group,dc=lunq,dc=net   ← 追加
shadowLastChange: 13782
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/hogehoge
givenName: hogehoge   ← 追加
sn: hogehoge   ← 追加
gecos: Lunq User   ← 追加
mail: hogehoge@lunq.net   ← 追加
 
--------------------ここまで--------------------
 
 
そのスクリプトがこちら↓
# vi ld-uadd.sh   ← 既存パスワード登録スクリプト作成
 
--------------------ここから--------------------
 
#!/bin/bash
 
LPASS=**********;  # LDAP管理用パスワードを平文で入力
COUNT=499;
NUM=599;
 
while [ $COUNT -lt $NUM ]
do
COUNT=`expr $COUNT + 1`
if [ `grep $COUNT /etc/passwd` ]; then
grep $COUNT /etc/passwd > ldpass | ./migrate_passwd ldpass > pass.ldif
 
LNAME=`cat ldpass |cut -d ":" -f 1`
 
sed -e "4s/account/person/" pass.ldif > passwd1.ldif
sed -e "/posixAccount/i objectClass: organizationalPerson" passwd1.ldif > passwd2.ldif
sed -e "/posixAccount/i objectClass: inetOrgPerson" passwd2.ldif > passwd3.ldif
sed -e "/shadowLastChange/i postalAddress: cn="$LNAME",ou=Group,dc=lunq,dc=net" passwd3.ldif > passwd4.ldif
sed -e "/^$/d" passwd4.ldif > passwd5.ldif
 
echo "givenName: "$LNAME >> passwd5.ldif
echo "sn: "$LNAME >> passwd5.ldif
echo "gecos: Lunq User" >> passwd5.ldif
echo "mail: "$LNAME"@lunq.net" >> passwd5.ldif
echo "" >> passwd5.ldif
 
cat passwd5.ldif >> passwd.ldif
 
rm -f ldpass
rm -f pass.ldif
rm -f passwd1.ldif
rm -f passwd2.ldif
rm -f passwd3.ldif
rm -f passwd4.ldif
rm -f passwd5.ldif
fi
done
 
grep ":5[0-9][0-9]" /etc/group > group | ./migrate_group group > group.ldif
 
ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -w $LPASS -f group.ldif
ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -w $LPASS -f passwd.ldif
 
rm -f passwd.ldif
rm -f group.ldif
 
--------------------ここまでを--------------------
 
 
実行権付与
# chmod +x ./ld-uadd.sh
 
# slappasswd -s password -h {MD5}passwprd は任意の文字
{MD5}*********************    ←   ↓で使うので控えておく
 
# vi admin.ldif  ← LDAPデータ参照用アカウントファイル作成
 
--------------------ここから--------------------
 
dn: cn=Admin,dc=lunq,dc=net
objectClass: person
cn: Admin
sn: Admin
userPassword: {MD5}*********************
 
--------------------ここまで--------------------
 
↓既存ユーザーとLDAPデータ参照用アカウントをLDAPサーバーへ登録
# ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -W -f admin.ldif
Enter LDAP Password:  ← 管理用パスワード応答
 
# ./ld-uadd.sh  ← 基本ユーザー登録
 
 
↓仮想メール用ユーザーを登録
# groupadd vmail
# useradd -g vmail -d /home/vmail -s /bin/false vmail

 
 
新規ユーザーの登録手順↓

ユーザー登録プログラム作成 
※ このスクリプトで登録すればシステムユーザーとLDAPユーザーの両方登録される。
# vi ldp-adduser
 
--------------------ここから--------------------
 
#!/bin/bash
#
################################
#                              #
#       基本ユーザー処理       #
#                              #
################################
#
#
# LDAPパスワード
LPASS=**********;  # LDAP管理用パスワードを平文で入力
 
#
# ユーザー作成 & パスワード登録
# Sanity check
if [ "$1" = "" ] ; then
    echo " "
    echo "  Usage: ./ldp-adduser [username]"
    echo " "
    exit 1
fi
 
useradd -s /sbin/nologin $1
passwd $1
 
# メールボックス作成
mkdir /home/vmail/$1
mkdir -p /home/vmail/$1/Maildir/new
mkdir -p /home/vmail/$1/Maildir/cur
mkdir -p /home/vmail/$1/Maildir/tmp
chown -R vmail:vmail /home/vmail/$1
 
# パーミッション設定
chmod 711 /home/$1
chmod -R 700 /home/vmail/$1
 
################################
#                              #
#     LDAPサーバー登録処理     #
#                              #
################################
#
# グループ情報取得
grep ^$1 /etc/group > group | ./migrate_group group > group.ldif
 
# パスワード情報取得
grep ^$1 /etc/passwd > passwd | ./migrate_passwd passwd > pass.ldif
# パスワード情報ファイル編集
 
sed -e "4s/account/person/" pass.ldif > passwd1.ldif
sed -e "/posixAccount/i objectClass: organizationalPerson" passwd1.ldif > passwd2.ldif
sed -e "/posixAccount/i objectClass: inetOrgPerson" passwd2.ldif > passwd3.ldif
sed -e "/shadowLastChange/i postalAddress: cn="$1",ou=Group,dc=lunq,dc=net" passwd3.ldif > passwd4.ldif
sed -e "/^$/d" passwd4.ldif > passwd5.ldif
 
echo "givenName: "$1 >> passwd5.ldif
echo "sn: "$1 >> passwd5.ldif
echo "gecos: Lunq User" >> passwd5.ldif
echo "mail: "$1"@lunq.net" >> passwd5.ldif
echo " " >> passwd5.ldif
 
cat passwd5.ldif >> passwd.ldif
 
# LDAPサーバー登録
ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -w $LPASS -f passwd.ldif
ldapadd -h localhost -x -D "cn=Manager,dc=lunq,dc=net" -w $LPASS -f group.ldif
 
################################
#                              #
#  登録用ファイル削除 & 確認   #
#                              #
################################
#
# 登録用ファイル削除
rm -f group.ldif
rm -f group
rm -f passwd
rm -f pass.ldif
rm -f passwd.ldif
rm -f passwd1.ldif
rm -f passwd2.ldif
rm -f passwd3.ldif
rm -f passwd4.ldif
rm -f passwd5.ldif
 
# 登録情報確認
ldapsearch -x -b 'cn='$1',ou=Group,dc=lunq,dc=net'
ldapsearch -x -b 'uid='$1',ou=People,dc=lunq,dc=net'
 
exit 0
 
--------------------ここまでを--------------------
 
実行権付与
# chmod +x ./ldp-adduser.sh
 
ユーザー削除プログラム作成
※ このスクリプトで削除すればシステムユーザーとLDAPユーザーの両方削除される。
# vi ldp-deluser
 
--------------------ここから--------------------
 
#!/bin/bash
#
################################
#                              #
#       基本ユーザー処理       #
#                              #
################################
#
# LDAPパスワード
LPASS=**********;  # LDAP管理用パスワードを平文で入力
 
# Sanity check
if [ "$1" = "" ] ; then
    echo " "
    echo "  Usage: ./ldp-deluser [username]"
    echo " "
    exit 1
fi
 
#
# ユーザー削除
userdel $1
 
# ユーザーディレクトリ&メールボックス削除
rm -rf /home/$1
rm -rf /home/vmail/$1
 
################################
#                              #
#     LDAPサーバー削除処理     #
#                              #
################################
#
# LDAPサーバー削除
ldapdelete -h localhost -x -D 'cn=Manager,dc=lunq,dc=net' -w $LPASS "uid="$1",ou=People,dc=lunq,dc=net"
ldapdelete -h localhost -x -D 'cn=Manager,dc=lunq,dc=net' -w $LPASS "cn="$1",ou=Group,dc=lunq,dc=net"
 
################################
#                              #
#           削除確認           #
#                              #
################################
#
# 登録情報確認
ldapsearch -x -b 'cn='$1',ou=Group,dc=lunq,dc=net'
ldapsearch -x -b 'uid='$1',ou=People,dc=lunq,dc=net'
 
--------------------ここまでを--------------------
 
実行権付与
# chmod +x ./ldp-deluser
 
↓LDAPサーバーへ登録
※ このスクリプトで登録すればシステムユーザーとLDAPユーザーの両方登録される。
# ./ldp-adduser honyarara
Changing password for user honyarara.
New UNIX password:    ← ユーザーのパスワードを入力
Retype new UNIX password: ← ユーザーのパスワード確認
passwd: all authentication tokens updated successfully.
 
adding new entry "uid=honyarara,ou=People,dc=lunq,dc=net"
 
adding new entry "cn=honyarara,ou=Group,dc=lunq,dc=net"
 
↓ 登録されているかの確認が表示される
# extended LDIF
#
# LDAPv3
# base <cn=honyarara,ou=Group,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# honyarara, Group, lunq.net
dn: cn=honyarara,ou=Group,dc=lunq,dc=net
objectClass: posixGroup
objectClass: top
cn: honyarara
gidNumber: 5104
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1
# extended LDIF
#
# LDAPv3
# base <uid=honyarara,ou=People,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# honyarara, People, lunq.net
dn: uid=honyarara,ou=People,dc=lunq,dc=net
uid: honyarara
cn: honyarara
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
postalAddress: cn=honyarara,ou=Group,dc=lunq,dc=net
shadowLastChange: 13874
shadowMax: 99999
shadowWarning: 7
loginShell: /sbin/nologin
uidNumber: 5104
gidNumber: 5104
homeDirectory: /home/honyarara
givenName: honyarara
sn: honyarara
gecos: Lunq User
mail: honyarara@lunq.net
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1

 
 
↓LDAPサーバーに登録したユーザーとグループを削除する場合。

※ このスクリプトで削除すればシステムユーザーとLDAPユーザーの両方削除される。
# ./ldp-deluser honyarara
# extended LDIF
#
# LDAPv3
# base <cn=moekichi,ou=Group,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 2
result: 32 No such object ← 削除したユーザーが検索できない
matchedDN: ou=Group,dc=lunq,dc=net
 
# numResponses: 1
# extended LDIF
#
# LDAPv3
# base <uid=moekichi,ou=People,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 2
result: 32 No such object ← 削除したユーザーが検索できない
matchedDN: ou=People,dc=lunq,dc=net 

# numResponses: 1

 
 
LDAPユーザー認証方式にLDAPを追加する。

サーバー側の設定
# authconfig-tui 

 

LDAP を使用 」 と
「 LDAP 認証を使用 」 に※印をつける
を選択する 

 

サーバー: 127.0.0.1 を入力
ベース DN: dc=lunq,dc=net を入力
OKを選択する
 
クライアント側の設定 複数サーバーがある場合やXen構築をしているとき
# authconfig-tui

 

LDAP を使用 」 と
「 LDAP 認証を使用 」 に※印をつける
を選択する

 

サーバー: 192.168.0.100 LDAPサーバーのアドレスを入力
ベース DN: dc=lunq,dc=net を入力
OKを選択する

 
 
ちゃんと認証が通るのかをチェックします。

新規ユーザー作成↓
# ./ldp-adduser moekichi
Changing password for user moekichi.
New UNIX password:    ← ユーザーのパスワードを入力
Retype new UNIX password: ← ユーザーのパスワード確認
passwd: all authentication tokens updated successfully.
 
adding new entry "uid=moekichi,ou=People,dc=lunq,dc=net"
 
adding new entry "cn=moekichi,ou=Group,dc=lunq,dc=net"
 
↓ 登録されているかの確認が表示される
# extended LDIF
#
# LDAPv3
# base <cn=moekichi,ou=Group,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# moekichi, Group, lunq.net
dn: cn=moekichi,ou=Group,dc=lunq,dc=net
objectClass: posixGroup
objectClass: top
cn: moekichi
gidNumber: 5104
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1
# extended LDIF
#
# LDAPv3
# base <uid=moekichi,ou=People,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# moekichi, People, lunq.net
dn: uid=moekichi,ou=People,dc=lunq,dc=net
uid: moekichi
cn: moekichi
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
postalAddress: cn=moekichi,ou=Group,dc=lunq,dc=net
shadowLastChange: 13874
shadowMax: 99999
shadowWarning: 7
loginShell: /sbin/nologin
uidNumber: 5104
gidNumber: 5104
homeDirectory: /home/moekichi
givenName: moekichi
sn: moekichi
gecos: Lunq User
mail: moekichi@lunq.net
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1
 
メールや、FTPのテストをする。両方できればOKなので、
要らないユーザーであれば下のほうのように削除する。
 
  ↓ ユーザー情報とパスワードを LDAPサーバー から削除
# ./ldp-userdel moekichi
# extended LDIF
#
# LDAPv3
# base <cn=moekichi,ou=Group,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 2
result: 32 No such object
matchedDN: ou=Group,dc=lunq,dc=net
 
# numResponses: 1
# extended LDIF
#
# LDAPv3
# base <uid=moekichi,ou=People,dc=lunq,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 2
result: 32 No such object
matchedDN: ou=People,dc=lunq,dc=net
 
# numResponses: 1

Posted in OpenLDAP | Trackback | del.icio.us | Top Of Page

No comments yet

Leave a Reply