Ubuntu18.04のapache2.4でActiveDirectory認証

エンタメ系企業の社内もろもろを担当している、最近チックチックチックのある曲にどはまり中のakibinです。

#やってみたこと
ローカル端末のVMに起てたUbuntuのApacheの特定ディレクトリにアクセスした際にBasic認証を発生させ、認証をActiveDirectoryのユーザで実施する。
AD環境は別途作成済み、またApacheは既にインストール済みとする

#作業内容
###１．ApaheでLDAP認証に必要なモジュールを有効化
以下実行で必要なモジュール(authnz_ldap.load, ldap.conf, ldap.load)を有効化

```bash
User@Local-VirtualBox:~$ sudo a2enmod ldap authnz_ldap
```

有効化されているか確認

```bash
User@Local-VirtualBox:~$ ls /etc/apache2/mods-enabled/
# ここに追加されていればOK
access_compat.load  authnz_ldap.load  deflate.conf  ldap.conf       negotiation.conf  status.conf
alias.conf          authz_core.load   deflate.load  ldap.load       negotiation.load  status.load
alias.load          authz_host.load   dir.conf      mime.conf       reqtimeout.conf
auth_basic.load     authz_user.load   dir.load      mime.load       reqtimeout.load
authn_core.load     autoindex.conf    env.load      mpm_event.conf  setenvif.conf
authn_file.load     autoindex.load    filter.load   mpm_event.load  setenvif.load
```

###2．Apaheのデフォルトの設定ファイル（000-default.conf）をコピー（バックアップ）
000-default.confをコピーしてauth-ad.confというファイルを作成

```bash
User@Local-VirtualBox:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/auth-ad.conf
```

auth-ad.confが作成されているか確認

```bash
User@Local-VirtualBox:~$ ls /etc/apache2/sites-available/
000-default.conf  auth-ad.conf  default-ssl.conf
```

###3．作成した設定ファイル（auth-ad.conf）にAD認証用の設定を追記
####前提条件: ※こちらの内容を自身の環境に置き換えてください
・認証対象のディレクトリ： /var/www/html/himitu
・ADサーバ： test-ad.hoge.co.jp
・Basic認証を許可するou: testou
・ADへアクセス時に認証するユーザ： admin
・ADへアクセス時に認証するユーザもパスワード： adminpw

```bash
User@Local-VirtualBox:~$ sudo vi /etc/apache2/sites-available/auth-ad.conf
# 以下を追記
 <Directory "/var/www/html/himitu">
	AuthName "User/Password"
	AuthType Basic
	AuthBasicProvider ldap
	# AuthzLDAPAuthoritative  off	
	AuthLDAPURL "ldap://test-ad.hoge.co.jp:389/ou=testou,dc=test-ad,dc=hoge,dc=co,dc=jp?sAMAccountName?sub?(objectClass=*)"
	AuthLDAPBindDN "cn=admin,dc=test-ad,dc=hoge,dc=co,dc=jp"
	AuthLDAPBindPassword "adminpw"
	require valid-user
 </Directory>
```

**AuthzLDAPAuthoritative**で、LDAP認証で失敗した場合に他の認証サービスに移るかどうかを指定可能ですが、2.2（？）あたりからバグでエラーになるので削除(ここではコメントアウト)。[こちら](https://wiki.rookie-inc.com/serverapps/subversion/ldap)の記事を参照させていただきました！

AuthLDAPURLの**sAMAccountName**について、Linux+OpenLDAPで運用されているLDAPサーバーの場合は、アカウント名を示す属性はuidなのですが、ADのLDAPディレクトリの場合にはこの属性はありません。
ADで同様な意味を持つ属性は、**sAMAccountName**。[こちら](http://infra.blog.shinobi.jp/Entry/87/)の記事を参照させていただきました！
ちなみにメールアドレスの属性はmailでした。（そのまんま）

###４．デフォルトの設定ファイルを無効化、新しい設定ファイルを有効化
```bash
# デフォルトの設定ファイルを無効化
User@Local-VirtualBox:~$ cd /etc/apache2/sites-available
User@Local-VirtualBox:/etc/apache2/sites-available$ sudo a2dissite 000-default.conf

# 新しい設定ファイルを有効化
User@Local-VirtualBox:/etc/apache2/sites-available$ sudo a2ensite auth-ad.conf

# 有効化の状況確認
User@Local-VirtualBox:/etc/apache2/sites-available$ cd ../
User@Local-VirtualBox:/etc/apache2$ ls sites-enabled/
auth-ad.conf
```

###5．Apache再起動
```bash
User@Local-VirtualBox:/etc/apache2$ sudo /etc/init.d/apache2 reload
```

###６．動作検証
該当のディレクトリ（himituディレクトリ。VMのIPは192.168.57.111）へブラウザからアクセスしてみると…
![スクリーンショット 2020-01-20 14.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/c5188736-0e7d-fcc3-546e-c11db032b2e7.png)

ベーシック認証画面が表示され、ADの認証用のOU（testou）の中のユーザのIDとパスワードを入れると…
![スクリーンショット 2020-01-20 14.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/63dece03-889e-8034-871e-989d44fd0a5b.png)

認証が通り、テストページが表示されました！

設定ファイルのAuthLDAPURLの書き方がなかなかわからず、苦戦しました…疲れたのでおやつでも食べようと思います。

＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
◆ Twitterアカウント
@AkibinMusic

◆ Youtubeチャンネル
https://www.youtube.com/channel/UC-JOpwEnJn3gCrUA4NdCYgg