Apache HTTPD + OpenLDAP で Basic認証

動作確認用に下記参考サイトを寄せ集めただけの適当かつ最低限の設定メモです。

要件

  • 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"

参考: [OpenLDAP] 登録されているエントリを削除する(ldapdelete) – Life with IT