サードパーティー製認証モジュール!
システムアカウントを利用する「mod_auth_shadow」
システムに登録されているユーザーに対し、Webアクセスを許可するには「mod_auth_shadow」を利用します。通常Basic認証では、Webアクセス独自のユーザー情報をhtpasswdコマンドなどで管理します。
一般的にユーザー情報をほかのサービスと共有する場合には、LDAPやRDBMSなどのバックエンドを利用しますが、ユーザー管理が簡素化される代わりに、追加されたシステムの運用や導入にかかる負担が増大します。
メールサービスやFTPサービスとともに、Webアクセスでも/etc/shadowファイルを利用できれば、システムユーザーにWebアクセスを解放することができます。またパスワードの変更や、ユーザー追加/削除と言った手段も、OSで提供されるものをそのまま利用することができます。
/etc/shadowファイルはパスワードを記録した重要なファイルです。そのためrootユーザー以外の一般ユーザー権限では、閲覧することができません。「mod_auth_shadow」以外にもシステムユーザーを共有できるモジュールを見つけることができますが、/etc/shadowファイルのパーミッションを変更する必要があり、サーバーを危険にさらすことになります。mod_auth_shadowなら/etc/shadowファイルのパーミッションやオーナーを変更する必要はありません。
mod_auth_shadowでは、モジュールと同時にインストールされるvalidateコマンドを使って/etc/shadowファイルを確認します。validateコマンドには、rootユーザーにしかできない作業を、一般ユーザーでも行えるよう「SetUID」が設定されます。そのため、/etc/shadowファイルに対する危険性は回避できたものの、validateコマンドに対する脆弱(ぜいじゃく)性が新たに発生します。外部から利用されないよう対策を施す必要があります。
またシステムユーザーを使用することで、Webアクセスを使った総当たり方式でパスワード詐取される可能性があります。そうした問題にも備えておく必要があります。
以降、mod_auth_shadowのインストール方法を紹介します。ただしシステムユーザーを利用するため、OSへの依存度が大きく、OSによってはmod_auth_shadowを利用できない場合があります。そうした場合には「mod_authnz_external(http://unixpapa.com/mod_authnz_external/)」など、ほかのモジュールを試します。
mod_auth_shadowのインストール
ソースファイルからインストールする方法を解説します。ここではLinuxディストリビューション「CentOS 5.2」での作業を例に解説をすすめます。
まずソースアーカイブをSourceForge.netのmod_auth_shadowのページ(http://sourceforge.net/projects/mod-auth-shadow)からダウンロードし展開します。
# wget http://downloads.sourceforge.net/mod-auth-shadow/mod_auth_shadow-2.2.tar.gz
# tar xvfz mod_auth_shadow-2.2.tar.gz
# cd mod_auth_shadow-2.2
展開したディレクトリに移動し、「make」を実行しますが、場合によっては図3のような修正が必要になります。「make install」後、mod_auth_shadow.soファイルがモジュールディレクトリ(CentOSでは/usr/lib/httpd/modules/)にインストールされます。また同時にvalidateコマンドもmakefileで指定したパス(/usr/sbinや/usr/local/sbin)にインストールされます。
# vi makefile (makefileを図3のように修正)
# make
# make install
次にApacheの設定ファイル「httpd.conf」を、前回使用した、基本的なBasic認証の設定(http://www.thinkit.co.jp/article/120/2/2.html)を元に、図3のように修正します。
「AuthShadow」で「on」を指定し、ユーザー情報に/etc/shadowファイルを使えるようにします。なお「Require group user」で、userグループに属するユーザーにだけWebアクセスを許可します。ユーザーの指定に「Require valid-user」などと指定した場合、/etc/shadowに登録された全ユーザーにWebアクセスを解放することになり、rootユーザーなど、特殊なアカウントでもアクセス可能になります。rootユーザーのパスワードを詐取されることが無いよう、一般ユーザーに限定するなどします。そのほかの設定はBasic認証を設定した前回のものと変わりません。
設定完了後Apacheを起動、または再起動しmod_auth_shadowを有効にします。apachectlコマンドを使用して再起動する場合は以下を実行します。
# apachectl restart
またはOSで用意された起動スクリプト(CentOSでは/etc/init.d/httpd)を利用する場合は以下を実行します。
# /etc/init.d/httpd restart
クライアントから、対象URL(図2の例では「http://サーバーのアドレス/restricted」)にアクセスし、システムに登録されたユーザーでアクセスできることを確認します。なお先ほど紹介したmod_auth_timeoutと併用し、認証タイムアウトを設定することもできます。
次回も引き続きサードパーティー製の認証系モジュールを取り上げます。