動作確認用に下記参考サイトを寄せ集めただけの適当かつ最低限の設定メモです。
要件
- CentOS 7
- Apache HTTP Server 2.4
- OpenLDAP 2.4
下記の DN (Distinguished Name)
を定義
dn: uid=people1,ou=People,dc=example,dc=com dn: uid=people2,ou=Hoge,ou=People,dc=example,dc=com dn: uid=people3,ou=Hoge,dc=example,dc=com ※ パスワードは全部適当に test
- Apacheにて Basic認証かけて、
People
に属するヤツらを許可
OpenLDAPインストール
# yum install openldap-servers openldap-clients # cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # systemctl enable slapd # systemctl start slapd
スキーマ登録
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
OpenLDAP設定
OpenLDAPのデータはチェックサムを取って誤り検出しているので手動で編集できない。 ldap○○コマンド等で変更を行う文化らしい。
# 以降のパスワードハッシュっぽい項目は # このslappasswdの出力内容を使う # slappasswd > test {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB
# mkdir ~/ldap_work
# vim ~/ldap_work/add_root_passwd.ldif --- dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB --- # ldapadd -Y EXTERNAL -H ldapi:// -f ~/ldap_work/add_root_passwd.ldif
# vim ~/ldap_work/change_domain.ldif --- dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=example,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=example,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB --- # ldapmodify -x -D cn=config -w test -f ~/ldap_work/change_domain.ldif
# vim ~/ldap_work/base.ldif --- dn: dc=example,dc=com objectClass: dcObject objectClass: organization dc: example o: Example Inc. dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=Hoge,ou=People,dc=example,dc=com objectClass: organizationalUnit ou: Hoge dn: ou=Hoge,dc=example,dc=com objectClass: organizationalUnit ou: Hoge dn: uid=people1,ou=People,dc=example,dc=com objectClass: account objectClass: posixAccount uid: people1 userPassword: {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB uidNumber: 2000 gidNumber: 2000 cn: people1 homeDirectory: /home/people1 loginShell: /bin/bash dn: uid=people2,ou=Hoge,ou=People,dc=example,dc=com objectClass: account objectClass: posixAccount uid: people2 userPassword: {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB uidNumber: 3000 gidNumber: 3000 cn: people2 homeDirectory: /home/people2 loginShell: /bin/bash dn: uid=people3,ou=Hoge,dc=example,dc=com objectClass: account objectClass: posixAccount uid: people3 userPassword: {SSHA}nCJ/VpuKq8HGxaU+vV0N025UMNC34VVB uidNumber: 4000 gidNumber: 4000 cn: people3 homeDirectory: /home/people3 --- # ldapadd -x -D "cn=Manager,dc=example,dc=com" -w test -f ~/ldap_work/base.ldif
ApacheのBasic認証設定
いつも通りぶち込む。
?uid
: uidをキーとする指定example.com
以下を探す- この設定だとサブツリーも含む
AuthType Basic AuthBasicProvider ldap AuthName "Restricted Information" AuthLDAPURL ldap://ldapserver.example.com/dc=example,c=com?uid Require valid-user
補足: 登録済みアカウントを検索
上のBasic認証設定と同様の設定で、アカウントが存在するかCLIで確認するときなど
## 全件表示 # ldapsearch -h localhost -x ## exapmle.com 以下の uid=people3 を探す # ldapsearch -h localhost -x -b 'dc=example,c=com' 'uid=people3'
参考: [OpenLDAP] 登録されているエントリを表示する(ldapsearch) – Life with IT
補足: 登録済みアカウントを消す
シクったときなど
# ldapdelete -x -D "cn=Manager,dc=example,dc=com" -w {{olcRootPW}} "uid=people3,ou=Hoge,dc=example,c=com"