- blogs:
- cles::blog

ベーシック認証のパスワードを Google 認証システムのワンタイムパスワードにする



先日、libpam-google-authenticator をインストールして Linux のログインに Google 認証システムが使えるようになったので、PAM をうまく経由すればウェブサーバのベーシック認証のパスワードをGoogle 認証システムワンタイムパスワードで代替できるんじゃないかと思ってちょっと挑戦してみることにしました。
最初に結論を書いておきますが、できるにはできたんですが自分が思い描いていたとおりにはならなかったので、残念ながらこの方法では実用にはなりません。それでも構築方法が見たいという場合には続きからどうぞ。
† mod-auth-external をインストールする
Apache 単体では PAM などの外部の認証システムを使うことができないので、今回は mod-auth-external というモジュールを Apache 側に仕込みます。このモジュールは外部の認証用のプログラム(コマンド)を呼び出し、入力された ID やパスワードを渡します。ログインの可否の判定はプログラムのその終了ステータスによって判定されることになります。
今回は Apache が 2.0.x だったので mod_auth_external-2.2.11.tar.gz を使いました。
インストール作業としてはこんな感じです。
インストールが完了すると httpd.conf には、下記のような行が挿入されているはずです。
その部分の直後に下記の2行を挿入しておきます。
※まだ /usr/local/libexec/pwauth は存在しませんが、次のステップでインストールするので気にしなくて大丈夫です。
完了したら httpd を再起動しておきます。
† pwauth のインストール
mod-auth-external は httpd が外部の認証プログラムを呼び出し可能にしてくれるだけなので、認証プログラムは別途インストールする必要があります。今回は pwauth という PAM を利用した認証ができる簡単なプログラムをインストールしてみました。
config.h, Makefile は環境に合わせて編集する必要があります。
RHEL ( CentOS ) の場合には下記のような感じになります。
diff -u config.h.org config.h
diff -u Makefile.org Makefile
† PAM 用のファイルの準備
これで必要なものがインストールできたので、PAM の設定を変更します。
pwauth を実行したときに読み込まれる PAM の設定は /etc/pam.d/pwauth なので、下記の内容のテキストファイルを作成します。
/etc/pam.d/pwauth
ここでちゃんと pwauth が動くかどうかテストしておきます。下記のように /usr/local/libexec/pwauth を起動し、「ユーザー名」「改行」「Google認証システムのワンタイムパスワード」「改行」の順に入力します。その後、ステータスコードを表示させたときに 0 が表示されれば、認証は成功です。pwauth がどのようなステータスコードを返すのかについては StatusCodes に一覧があるので、デバッグ時に役立つと思います。
† httpd にベーシック認証を設定する
最後に httpd の設定を変更して pwauth を使ったベーシック認証を有効にします。
今日は .htaccess を使ってみました。
.htaccess
ブラウザから .htaccess を置いたディレクトリを表示させたときにベーシック認証のダイアログが出れば完了です。
ID には OS のユーザー名、パスワードには Google 認証システムの 6 桁の数字を入れれば認証できるはずです。
† この方法には致命的な欠陥が・・・・
ただ、この方法には致命的な欠点があります。
ベーシック認証にはセッションという考え方がないので、ページを表示させるごとにワンタイムパスワードの入力が必要になります。
これだとページを開く度にダイアログにワンタイムパスワードを入力する必要があるので、ちょっと面倒すぎますね。
というわけで単純に PAM 経由で呼び出すだけではダメでした。。。。。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5797
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
- nmcli で NIC が所属するゾー... (2)
- 三県境のプレートが盗まれた (1)
- びっくりドンキー 大宮公園店 (1)
- Windows 10 で勝手にログアウ... (1)
2 . Windows 10 で勝手にログアウトされないようにする(32388)
3 . Word で数式がグレーアウトされていて挿入できないときは(26846)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22263)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21521)