Ubuntu18.04のapache2.4でActiveDirectory認証


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

やってみたこと

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

作業内容

1.ApaheでLDAP認証に必要なモジュールを有効化

以下実行で必要なモジュール(authnz_ldap.load, ldap.conf, ldap.load)を有効化

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

有効化されているか確認

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というファイルを作成

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

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

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

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(?)あたりからバグでエラーになるので削除(ここではコメントアウト)。こちらの記事を参照させていただきました!

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

4.デフォルトの設定ファイルを無効化、新しい設定ファイルを有効化

# デフォルトの設定ファイルを無効化
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再起動

User@Local-VirtualBox:/etc/apache2$ sudo /etc/init.d/apache2 reload

6.動作検証

該当のディレクトリ(himituディレクトリ。VMのIPは192.168.57.111)へブラウザからアクセスしてみると…

ベーシック認証画面が表示され、ADの認証用のOU(testou)の中のユーザのIDとパスワードを入れると…

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

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

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

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