じわじわと適用範囲を広げてきたopenldapも今回のnginxで最後。もちろん、その他のツールでも使えるところは使っていきたいんだけどね。mariadbとかも最近はLDAP化できるのかな。ともあれ、webの場合は、ちょっとアクセス制御したいときによく使うBASIC認証にLDAPを使いたい。基本はIP制限等なので、あくまで例外的に穴を開けたいときにくらいにしか使わないけど。だからこそ、いちいちパスワード用意したりするのが面倒だから、いつも使っているアカウントの認証でログインできてしまいたい。
うちのnginxはepelにあるパッケージをそのまま使っちゃってるんだけど、それだとLDAP認証には対応していないようだ。必要となるモジュールを組み込むために、epelからnginxのSRPMをダウンドロードする。auth-ldapモジュールを組み入れるようにspecファイルを修正。そしてnginxパッケージをリビルドするという流れ。この辺りは他のブログを参考にさせてもらった。ビルドに成功したら、生成されたパッケージをyumでインストールする。これで準備完了となる。具体的には以下。
cd /usr/local/src
yumdownloader --enablerepo=epel --source nginx
rpm -ivh nginx-1.10.2-1.el7.src.rpm
cd ~/rpmbuild/SPECS
cp nginx.spec _nginx.spec
vi nginx.spec
diff -u _nginx.spec nginx.spec
:
%build
+git clone https://github.com/kvspb/nginx-auth-ldap.git
# nginx does not utilize a standard configure script. It has its own
# and the standard configure options cause the nginx configure script
# to error out. This is is also the reason for the DESTDIR environment
@@ -207,6 +208,7 @@
--with-file-aio \
%endif
--with-ipv6 \
+ --add-module=nginx-auth-ldap \
--with-http_ssl_module \
--with-http_v2_module \
yum-builddep --enablerepo=epel nginx
rpmbuild -ba nginx.spec
cd ../RPMS/x86_64
yum install -y *.rpm
続いて、nginxの設定ファイルを修正して、組み入れたモジュールを有効化する。まずはnginx.confにhttp{}セクションにLDAP認証のための設定を追加する。設定されている内容はldap側の設定にも依存するので、過去の記事も参照して、必要な箇所を書き直して下さい。うちの環境ではldap1とldap2のVIPを意味するldapというサーバ名で389ポートにアクセスする。このVIPを使うことで既に冗長化がなされていることになる。そして認証のためのパスワードはOSアカウント同じものを使う。
vi /etc/nginx/nginx.conf
:
http {
:
ldap_server ldap-users {
url ldap://ldap:389/dc=domain,dc=com?uid?sub?(objectClass=posixAccount);
require valid_user;
}
}
そして最後は、BASIC認証を組み入れたい設定ファイルのserver{}セクションにauth_ldapの設定を追加する。設定する認証方法は、内部のプライベートIPだったらそのまま通して、それ以外だったらBASIC認証をかけるというもの。どちらかの認証が満たされれば、webにアクセスすることができるようになる。自分がapacheの頃から使っている好みの設定だ。ここまで設定が終わったら、nginxを再起動して設定を反映させる。念のため文法の間違いがないか確認してから、nginxを再起動する。
vi /etc/nginx/conf.d/www.conf
:
server {
listen 80;
server_name www.domain.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
satisfy any;
allow 192.168.0.0/24;
deny all;
auth_ldap 'Authentication Required';
auth_ldap_servers ldap-users;
}
:
nginx -t
:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl restart nginx
あとは適切な経路からURLを叩いて、BASIC認証が表示されるかどうか、そしてその認証がOSアカウントのパスワードで通せるかどうかを確認する。幸いにも私は1発で期待通りの設定を行うことが出来た。sambaほどはまることもなく、ほっと胸をなでおろす。全体を思い返してみても、最も面倒だったのはやはりsambaで、他は意外とあっさり設定出来たように思う。まあ、sambaが面倒なのはwindowsが絡むことに起因しているのかもしれないが。とりあえず今回でもともと設定したかった箇所へのLDAP適用は完了。mysqlもLDAP化したいなあ。