Apacheの認証に PAM(Portable Authentition Module) を使用する事により、OSのパスワードファイル(passwd, shadow)だけでなく、NIS(Network Information Service)やSMB(Server Message Block)などの様々な認証と連携可能になる。
名称 | バージョン | 備考 |
---|---|---|
Red Hat Linux | 9 | |
Apache | 2.0.40 | 2005.08.18時点での最新版。 |
Mod_Auth_External | 2.2.9 | 2005.08.18時点での最新版。 |
pwauth | 2.2.8 | 2005.08.18時点での最新版。 |
$ tar zxf mod_auth_external-2.2.9.tar.gz $ cd mod_auth_external-2.2.9 $ /usr/sbin/apxs -c mod_auth_external.c # /usr/sbin/apxs -i -a mod_auth_external.la以上で、コンパイルしたDSOモジュールのコピーと /etc/httpd/conf/httpd.conf の書き換えが完了する。
LoadModule external_auth_module /usr/lib/httpd/modules/mod_auth_external.so
$ tar zxf pwauth-2.2.8.tar.gz $ cd pwauth-2.2.8
$ diff config.h config.h.orig 96c96 < /* #define SHADOW_SUN /**/ --- > #define SHADOW_SUN /**/ 100c100 < #define PAM /**/ --- > /* #define PAM /**/ 148c148 < #define SERVER_UIDS 48 /* user "apache" */ --- > #define SERVER_UIDS 99 /* user "nobody" */
$ diff Makefile Makefile.orig 10c10 < #LIB= -lcrypt --- > LIB= -lcrypt 14c14 < LIB=-lpam -ldl --- > # LIB=-lpam -ldl
$ make # mkdir -p /usr/local/libexec/ # cp pwauth /usr/local/libexec/ # chmod u+s /usr/local/libexec/pwauth # ls -l /usr/local/libexec/pwauth -rwsr-xr-x 1 root root 34400 8月 14 13:41 /usr/local/libexec/pwauth
AddExternalAuth pwauth /usr/local/libexec/pwauth SetExternalAuthMethod pwauth pipe
#%PAM-1.0 auth required pam_stack.so service=system-auth auth required pam_nologin.so account required pam_stack.so service=system-auth
# /etc/init.d/httpd configtest # /etc/init.d/httpd restart
AuthExternal pwauth ← pwauthで認証を行う AuthName "Restricted Access Area" ← 認証のメッセージ AuthType Basic ← Basic認証を使用 require valid-user ← 認証を通過した全ユーザを許可
satisfy any ← 何れかの条件を満たせば許可 order deny,allow deny from all allow from 172.16.0.0/16 .your.domain.name ← 内部ネットを許可 AuthExternal pwauth AuthName "Restricted Access Area" AuthType Basic require valid-user ← 認証を通過した全ユーザを許可
# cp unixgroup /usr/local/libexec/ # ls -l /usr/local/libexec/unixgroup -rwxr-xr-x 1 root root 1858 8月 14 13:57 /usr/local/libexec/unixgroup
AddExternalGroup unixgroup /usr/local/libexec/unixgroup SetExternalGroupMethod unixgroup environment
# /etc/init.d/httpd configtest # /etc/init.d/httpd restart
AuthExternal pwauth GroupExternal unixgroup ← グループ認証に unixgroup を使用 AuthName "Restricted Access Area" AuthType Basic require group staff admin ← "staff"と"admin"グループを許可
#%PAM-1.0 auth required pam_listfile.so item=group sense=allow file=/etc/pwauth.allow-group onerr=succeed auth required pam_stack.so service=system-auth auth required pam_nologin.so account required pam_stack.so service=system-auth/etc/pwauth.allow-group には、許可するグループ名を1行ずつ記述する。
admin staff
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/pwauth.deny-user onerr=succeed auth required pam_stack.so service=system-auth auth required pam_nologin.so account required pam_stack.so service=system-auth/etc/pwauth.deny-user には、拒否するユーザ名を1行ずつ記述する。
root bin nobody
ID = guest PW = passwordの場合、IDとPWをコロン(:)で繋げると
guest:passwordとなり、これをBASE64でエンコードして
Z3Vlc3Q6cGFzc3dvcmQ=となる。
Authorization: Basic Z3Vlc3Q6cGFzc3dvcmQ=としてWebサーバに渡されて認証が行われる。
$ telnet localhost 80 ← localhost の Webサーバ(port:80/tcp)に接続 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.0 ← Webサーバへの要求を入力 ← 空行を入力(入力終了) HTTP/1.1 200 OK ← ここから下がWebサーバからのレスポンス Date: Thu, 18 Aug 2005 12:27:56 GMT Server: Apache Last-Modified: Fri, 05 Aug 2005 05:20:02 GMT ETag: "cd743-64-d98a4480" Accept-Ranges: bytes Content-Length: 100 Connection: close Content-Type: text/html; charset=ISO-8859-1 Connection closed by foreign host. $
$ telnet localhost 80 ← localhost の Webサーバ(port:80/tcp)に接続 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD /auth/ HTTP/1.0 ← Webサーバへの要求を入力 ← 空行を入力(入力終了) HTTP/1.1 401 Authorization Required ← 認証が要求されている Date: Thu, 18 Aug 2005 12:37:13 GMT Server: Apache WWW-Authenticate: Basic realm="Restricted Access Area" Vary: accept-language Accept-Ranges: bytes Connection: close Content-Type: text/html; charset=ISO-8859-1 Expires: Thu, 18 Aug 2005 02:37:13 GMT Connection closed by foreign host. $
$ telnet localhost 80 ← localhost の Webサーバ(port:80/tcp)に接続 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.0 ← Webサーバへの要求を入力 Authorization: Basic Z3Vlc3Q6cGFzc3dvcmQ= ← 認証情報を入力 ← 空行を入力(入力終了) HTTP/1.1 200 OK ← 認証が成功している Date: Thu, 18 Aug 2005 12:40:57 GMT Server: Apache Last-Modified: Fri, 05 Aug 2005 06:32:24 GMT ETag: "415b-6b-dc57ee00" Accept-Ranges: bytes Content-Length: 107 Connection: close Content-Type: text/html; charset=ISO-8859-1 Connection closed by foreign host. $