Apache基本認証でAD認証連携させる
HTTP/HTTPSアクセスでアクセス制御する方法として、簡単にユーザ認証制御を行うことができる基本認証が使われることが多いです。
しかしWebDAV等で各ユーザにアカウント発行し、ログを取得したい場合、アカウント数が多くなり アカウント管理が難しくなります。
そこでActiveDirectory連携またはLDAP連携を行うことで、アカウントの統一管理ができ運用保守が容易になります。
Apacheの基本認証にActiveDirectory(AD)のユーザ認証と連携する方法は2つあります。 
 ・
Apacheの基本認証にLDAP認証を用いたAD連携
 ・
ApacheのKERBEROS認証を用いたAD連携
ここでは、「LDAP認証を用いたAD連携」について説明します。
■
「Apache基本認証にLDAP認証を用いたAD連携」について
| 利用モジュール | 
mod_auth_ldap | 
| メリット | 
ActiveDirectoryのグループ単位で認証を掛けられるため、ActiveDirectory上での一元管理が可能となります。 
AuthLDAPUrlオプション内で許可グループを指定する | 
| デメリット | 
LDAPの場合は簡易認証となるため、apache-ActiveDirectoryサーバ間のパスワードがクリアテキストで流れてしまいます。 
LDAP情報取得するためのユーザ(認証ユーザと別ユーザ)が必要になる。 | 
■
ApacheとActiveDirectory(AD)の連携
今回設定するApacheの基本認証とActiveDirectory(AD)連携の動作仕様概要を説明する。
・Apache基本認証をAD連携する。
・ActiveDirectory(AD)に登録したユーザをApache基本認証のユーザとする。
・ADのグループ/ユーザに対して、アクセス制限をかける。
・ADのDCサーバを複数指定し、DCサーバの冗長化に対応する。
■
Apacheの基本認証とActiveDirectory(AD)連携手順の概要
・事前作業(DCサーバ側作業)
・Apacheモジュールの読み込み(Apacheサーバ側作業)
・ApacheのAD連携設定(Apacheサーバ側作業)
事前作業(DCサーバ側作業)
■
ActiveDirectory構築
 ここでは、ActiveDirectoryが事前に構築済みであることを前提とします。
■
AD情報取得のユーザ作成
 LinuxサーバがADのLDAPディレクトリへアクセスする際に用いるユーザを作成します。
 ここでいうAD情報取得のユーザとは、基本認証用ユーザではありません。  またパスワードを設定ファイルに記述する必要があるため、権限は最小限(対話的ログオンは許可しない設定)で作成することをお勧めします。
OpenLDAPでは、認証を行うためのLDAPディレクトリにアクセスする際に匿名によるアクセスしますが、 AD認証ではKerberosやNTLMにより匿名によるアクセスが許可されているのはディレクトリのごく一部に限られているため、認証ユーザで情報を取得する必要があります。
今回は、「connuser」というアカウントを作る。 
■
基本認証用のユーザ作成
 基本認証でアクセスを許可するユーザを作成する。基本認証専用のアカウントを作りたい場合は、専用のOUを作成したほうがいいでしょう。 
Apacheモジュールの読み込み(Apacheサーバ側作業)
Apache設定ファイルにLDAP関連のモジュール読み込む設定を行う。
 # vi /etc/httpd/conf/httpd.conf
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
ApacheのAD連携設定(Apacheサーバ側作業)
アクセス制限させたいディレクトリに対して、下記の内容をDirectoryディレクティブもしくは.htaccessに記述する。
■
ApacheのAD連携設定値
| ADドメイン名 | 
ad.hoge.com | 
| DCサーバ1 | 
dc-01.ad.hoge.com | 
| DCサーバ2 | 
dc-02.ad.hoge.com | 
| AD情報取得のユーザ名 | 
ad\connuser | 
| AD情報取得のユーザのパスワード | 
passwd_01 | 
| アクセス許可グループ | 
webadv-gp | 
| アクセス許可グループの所属OU | 
clients (ad.hoge.com) | 
今回は、検証用に.htaccessに設定し、動作確認ができたから、Apacheの設定ファイルに記述する。
# vi .htaccess
AuthType Basic
AuthName "ActiveDirectory Auth"
AuthBasicProvider ldap
AuthLDAPURL "ldap://dc-01.ad.hoge.com:389 dc-02.ad.hoge.com:389/OU=clients,DC=ad,DC=hoge,DC=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "ad\connuser"
AuthLDAPBindPassword "passwd_01"
AuthzLDAPAuthoritative Off
Require ldap-group CN=webdav-gp,OU=clients,DC=ad,DC=hoge,DC=com
ApacheのAD連携の説明
■
AuthLDAPURLについて 
 ・
sAMAccountName
  Linux+OpenLDAPで運用されているLDAPサーバーの場合は,アカウント名を示す属性はuidなのですが,ADのLDAPディレクトリの場合 にはこの属性はありません。ADで同様な意味を持つ属性は,sAMAccountNameです。 
  ・
DCサーバの複数設定
  AuthLDAPURLオプションにDCサーバを複数指定する。 
  ・
パフォーマンス向上
  認証するユーザのOUまで指定することで、検索範囲が狭まり、サーバ負荷の軽減とパフォーマンス向上の期待ができます。 
■
AuthzLDAPAuthoritativeについて
・「Require valid-user」の場合
  AuthzLDAPAuthoritativeはoffとする。
・「Require ldap-user」、「ldap-group」の場合
  AuthzLDAPAuthoritativeはonとする。
 ※デフォルトの設定は“on”である。 
■
アクセス許可グループを指定する
ここではclientsのOUに所属している。かつRequire ldap-groupにグループ所属しているユーザを許可される。 
AuthLDAPURLでclientsのOUを指定、Require ldap-groupで許可グループを指定しています。
※運用上のポイント  AD管理者が基本認証でアクセスするアカウントを作成し、WEB管理者がディレクトリごとに対してグループ/アカウント単位でアクセス制限をかけることができる。
 「KERBEROS認証を用いたAD連携」と違い、AD管理者が基本認証でアクセスできるアカウントとその他、OSログイン用のアカウントを分けることができる。 
[3回]