さくらVPSのCentOSにOpenLDAPをインストール
ちょっとユーザIDとパスワードを共通化したいだけなのに…
LDAPって何だかややこしいんですよね〜
私が大事だと感じたポイントは以下のとおり。
- ツリー構造になっており、ツリーの各ノードに属性を設定する
- 「会社→部課→ユーザ」のような構造
- ユーザIDやパスワード、氏名やメールアドレスなどを属性として設定
- LDAP管理用のツリーとデータ登録用のツリーがある
- ツリーの各ノードには事前に定義したデータ型(objectclass)を指定する必要がある
- データ型は一般的なものが予め定義されている
- 独自のデータ型を定義することもできる
- データ型には属性名や、それが必須かどうかを定義できる
- データ型はひとつのノードに複数適用できる
- dnという属性がノードを一意に識別する識別子
- dnは「当該ノードの属性どれかひとつ + "," + 親ノードのdn」で、一意になるように定める
- データ型によってどの属性を使用するかを強制されることはなく、「一意になる」ことさえ守ればよい
- dnは「当該ノードの属性どれかひとつ + "," + 親ノードのdn」で、一意になるように定める
- LDAPは汎用的なので様々なツリー構造を作れるが、「一般的に期待されているツリー構造」というものがある。
- アプリケーション側がそれを要求することがあるので、事前に調べたほうが良い
今回作成するディレクトリ(ツリー)構造
- ルート
- Group
- People
- ユーザ1
- ユーザ2
グループは入れ物だけ作ってますが、中身は作ってません(力尽きました。とりあえずはなくてもいいし…)。
また、CentOSのログインアカウントは共通化しません。
インストール
インストールはほんと簡単…
yum install openldap-servers openldap-clients
LDAPの環境設定
#これを実行するとパスワードの入力を求められる。 #入力するとハッシュが出力される。 slappasswd #LDAP編集用のパスワードを設定 #設定ファイルを開き下記を登録 # olcRootPW: 上記で出力したハッシュ vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif #LDAPデータを保存するDBの設定を作成 #サンプル設定をそのまま使用する cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG #LDAPデーモン起動 /etc/rc.d/init.d/slapd start #LDAPログはデフォルトだと捨てられるので、保存するように変更 #設定ファイルを開き下記を登録 # local4.* /var/log/ldap vi /etc/rsyslog.conf #SYSLOGデーモンを再起動 /etc/init.d/rsyslog restart
LDAP管理用のツリーを編集
mkdir /var/lib/ldap/ldif cd /var/lib/ldap/ldif vi bdb-init.ldif
bdb-init.ldif
#データ登録用ツリーのメタ情報を編集するため、編集するノードを指定 dn: olcDatabase={2}bdb,cn=config #ノードの修正を行うことを宣言 changetype: modify #olcRootDN(データ登録用ツリーのアクセス制御を無視する特権ユーザのようなもの)を編集 replace: olcRootDN olcRootDN: cn=Manager,dc=hoge,dc=com - #olcSuffix(データ登録用ツリーのルート)を編集 replace: olcSuffix olcSuffix: dc=hoge,dc=com - # olcRootPW(olcRootDNのパスワード)を追加 add: olcRootPW olcRootPW:
LDAPに適用
ldapmodify -x -D cn=config -f bdb-init.ldif -W
データ用ツリーの作成
touch init.ldif add_group.ldif add_people.ldif
init.ldif(ルートの設定)
dn: dc=hoge,dc=com objectclass: dcObject objectclass: organization o: 組織名 dc: hoge dn: cn=Manager,dc=hoge,dc=com objectclass: organizationalRole cn: Manager
add_group.ldif(Group, Peopleの設定)
dn: ou=People,dc=hoge,dc=com objectclass: organizationalUnit ou: People dn: ou=Group,dc=hoge,dc=com objectclass: organizationalUnit ou: Group
add_people.ldif(ユーザの設定)
dn: uid=testuser1,ou=People,dc=hoge,dc=com objectclass: inetOrgPerson uid: testuser1 cn: 山田 太郎 sn: 山田 givenName: 太郎 userPassword: slappasswdで作ったパスワードのハッシュ mail: taroyamada@hoge.com dn: uid=testuser2,ou=People,dc=hoge,dc=com objectclass: inetOrgPerson uid: testuser2 cn: 川村 次郎 sn: 川村 givenName: 次郎 userPassword: slappasswdで作ったパスワードのハッシュ mail: jirokawamura@hoge.com