Apache + Google Authenticator で 2要素認証

2020年3月14日

Google Authenticator とは

Google が開発している2段階認証(2要素認証)用トークンソフトウェア。

wikipedia あった。詳しくはこちらを見て。

今回は Apache のベーシック認証に OTP (ワンタイムパスワード) を利用する。

設定

apache

Apacheをインストールする。

sudo yum install httpd
sudo systemctl start httpd

http://127.0.0.1 にアクセスし Apache の画面が出ることを確認。

今回 Basic 認証を設定するページを作成する。 DocumentRoot 以下に適当なページを作成。

vi /var/www/html/index.html
sudo systemctl restart httpd

http://127.0.0.1/index.html にアクセスし test と出ることを確認。

続いて Basic認証を設定する。

vi /etc/httpd/conf/httpd.conf
<Location />
    AuthType Basic
    AuthName "Basic Auth"
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
</Location>

お試しで test ユーザを作成する。

htpasswd -c /etc/httpd/conf/.htpasswd test

Apache 再起動。

sudo systemctl restart httpd

http://127.0.0.1/index.html にアクセスし test ユーザで認証できることを確認。

mod-authn-otp

Apache に 2要素認証を設定するため、 mod-authn-otp を利用する。

mod-authn-otp は make install が必要なので必要ツールをインストールしておく。

sudo yum install httpd-devel openssl-devel automake gcc

mod-authn-otp を git cloneで取得し、make install。

git clone https://github.com/archiecobbs/mod-authn-otp
cd mod-authn-otp
./autogen.sh -c
make
sudo make install

mod-authn-otp は下記に作成されている。

ls -la /etc/httpd/modules/mod_authn_otp.so

Apache 設定に追加。 /etc/httpd/conf.modules.d 配下に集めておく。

echo "LoadModule authn_otp_module modules/mod_authn_otp.so" | sudo tee /etc/httpd/conf.modules.d/00-otp.conf > /dev/null

Basic 認証を OTP 認証に設定する。

<Location />
    AuthType Basic
    AuthName "OTP Authentication"
    AuthBasicProvider OTP
    Require valid-user
    OTPAuthUsersFile /var/www/otp/users
    OTPAuthMaxLinger 3600
    OTPAuthMaxOTPFailure 20
    OTPAuthPINAuthProvider file
    OTPAuthLogoutOnIPChange On
</Location>

Apache再起動。

sudo systemctl restart httpd

Google Authenticator に登録する

基本はこちらの記事通りにやれば良い。

OTP用ユーザを作成する。上記記事のスクリプトをコピーしてシェルファイルを作り、ユーザを指定して実行する。/var/www/otp/users にユーザが追加される。

$ sh otp.sh otp-user

実行するとURLが出力される。このURLにアクセスするとQRコードが表示されるので、Google AuthinticatorアプリのQRコードスキャナで読み取れば、登録が完了する。

http://127.0.0.1/index.html にアクセスし otp-user ユーザで、OTP 認証でログインできることを確認。

参考

Apacheへのアクセスに二要素認証を適用する

BASIC認証をGoogle Authenticatorを用いたワンタイムパスワードに変えてみる

Apache

Posted by さいき