認証強化のおまけ
ここ最近(2018年)セキュリティ関連のニュースが多いので、NextCloudに二段階認証を導入したついでに、ApacheのBASIC認証にも、OTP認証を導入してみようと思った次第です。
では、行ってみましょう
認証モジュール導入
パッケージ取得
2018年現在、OTPのモジュールは、Gentoo portageに取り込まれておりません。なので。GitHubからダウンロードしてきます。Gitで同期もよし、ZIPをダウンロードしてくるもよし。
展開&コンパイル
# unzip mod-authn-otp-master.zip
で解凍
# ./autogen.sh
# make
# make install
で問題なくインストールが済みます
Apacheに設定
httpd.conf
httpd.confに以下の行を追記します。
LoadModule authn_otp_module modules/mod_authn_otp.so
vhostの設定ファイル
<Directory "<認証したいHTTPファイルのあるディレクトリ">
Options FollowSymLinks
AllowOverride All
AuthType Basic
AuthName "OTP Authentication (Enter OTP as password)"
AuthBasicProvider OTP
Require valid-user
OTPAuthUsersFile <パスワードファイルのあるパス>
OTPAuthMaxLinger 1800
OTPAuthLogoutOnIPChange On
</Directory>
- OTP認証したいディレクトリのパスをDirectoryディレクティブに記載します。
- OTPAuthUsersFileディレクティブに、ユーザ/パスワードを記載したファイルへのパスを記載します
- OTPAuthMaxLingerに、パスワード認証したセッションの有効期限を書きます。この時間がすぎると、再度パスワードを問われますので、適当な値を。
パスワードの設定
これはなかなか難儀なのですが、こちらのWebサイトのシェルを流用させて頂きました。
注意点は以下
- 3行目 issuerは適当に自分のサイト名称に書き換えます
- python -cの部分を、python2 -cに書き換えます。Gentooではpython3がデフォルトなのでエラーが出ます。明示的にpython2を指定します。
- file=は、パスワードを置いてあるファイルへのパスです。変えたい場合は適当に書き換えましょう
で、これをapache_otp_user_add.shとかと適当な名前にして実行してみます。
# apache_otp_user_add.sh <ユーザ名>
と指定すると、<ユーザ名> と秘密鍵のセットのデータを登録してくれると同時に、QRコードを表示してくれるURLを表示してくれます。
URLをコピって、ブラウザで表示し、Google認証アプリや、IIJ SmartKeyアプリで読み込ませると、ワンタイムパスワードが生成されます。
Apacheを再起動
設定を有効にするために、Apacheを再起動します。
# /etc/init.d/apache2 restart
動作
認証させたいページにアクセスすると、おなじみApacheのBASIC認証画面が出てきます。
- Username
- 先程apache_otp_user_add.shに指定した<ユーザ名>
- Password
- アプリで表示したワンタイムパスワード
を入力すると、めでたくワンタイムパスワード認証が出来ます。いやぁ、めでたし、めでたし。