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 |
No comments yet
