Active DirectoryとLinuxの認証を統合しよう

第1回 pam_krb5によるパスワードの統合

この記事を読むのに必要な時間:およそ 4 分

pam_krb5の動作確認:ログインとトラブルシューティング

ここまでの設定を行ったら,実際にLinuxマシンにログインできることを確認してみましょう。

最初にLinuxマシン上でユーザを作成します。

ここでは仮にkrb5-01という名前だと仮定します。このユーザにはパスワードを設定する必要はありません。たとえば

# useradd -m krb5-01 

のようにして,ユーザを作成しておけばよいでしょう。ついで,AD上で同名のユーザを作成し,こちらはパスワードを割り当てます。

ここで,sshやtelnetなどを用いて,Linuxマシンへkrb5-01としてログインを行ってください。正しく構成されていれば,パスワードとしてAD側で設定したパスワードを用いてログインが行えるはずです。

ログインできない理由で一番大きい理由は時刻同期の問題でしょう。PAMの設定で

auth sufficient pam_krb5.so use_first_pass debug 

のように「debug」オプションを付加することによって,syslog(CentOSの場合は/var/log/secure,Debianの場合は/var/log/auth.log)に詳細なログが出力されますので,参考にしてください。時刻同期に問題が発生している場合は,以下のように「Clock skew too great」というエラーが出力されます。

Dec 29 00:40:53 localhost login: pam_krb5[2435]: authentication fails for 'krb5-01' (krb5-01@W2003R2AD3.LOCAL): Authentication failure (Clock skew too great) 

AD側でユーザが無効となっている場合は,以下のように「Client credentials have been revoked」というエラーが出力されます。

Jan 12 19:53:19 localhost sshd[5616]: pam_krb5[5616]: authenticating 'krb5-01@W2003R2AD3.LOCAL' to 'krbtgt/W2003R2AD3.LOCAL@W2003R2AD3.LOCAL'
Jan 12 19:53:19 localhost sshd[5616]: pam_krb5[5616]: krb5_get_init_creds_password(krbtgt/W2003R2AD3.LOCAL@W2003R2AD3.LOCAL) returned -1765328366 (Clients credentials have been revoked) 
Jan 12 19:53:19 localhost sshd[5616]: pam_krb5[5616]: got result -1765328366 (Clients credentials have been revoked)

AD側で「ユーザーは次回ログオン時にパスワード変更が必要」が有効になっている際にsshでログインしたところ,以下のようにパスワードが期限切れである旨のメッセージが出力されますが,ログインは成功し,パスワードは強制的に同じものが再設定されます。一方,telnetでログインしようとしたところ,パスワードの再設定を促すプロンプトが表示されました。パスワード有効期限切れの際の挙動については,最終的には各プロダクトの実装に依存するところがあると考えられます。

[root@localhost # ssh localhost -l krb5-01
krb5-01@localhost's password:
Password expired.  You must change it now.
Last login: Mon Jan 12 23:01:08 2009 from localhost.localdomain 
[krb5-01@localhost$

pam_krb5の動作確認:パスワード変更

引き続き,パスワード変更に付いても確認してみましょう。

問題なく設定が行えており,パスワードも適切だった場合は,普段のパスワード変更と同様に,以下のようにしてADのパスワードが変更されます。

[krb5-01@localhost $ passwd
Changing password for user krb5-01.
Changing password for krb5-01
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully. 

ただし,Windows Server 2003以降ではパスワードの制約が非常に厳しくなっています。設定内容については「Default Domain Policy」中のアカウントポリシーで確認ができます図2⁠。

図2 Windows Server 2003のパスワードポリシー設定

図2 Windows Server 2003のパスワードポリシー設定

「パスワードは,複雑さの要件を満たす必要がある」の設定が有効になっていると(デフォルト有効⁠⁠,かなり複雑なパスワードが強制されます。また,パスワード変更禁止期間を設定していると,数日に1度しかパスワードを変更できませんので,検証などで1日に何度もパスワードを変更することができません。これらの制約に該当すると,パスワード変更は失敗しますが,エラーからはそれがわかりにくいので注意してください。以下にエラー時の出力例を示します。

[krb5-01@localhost$ passwd
Changing password for user krb5-01.
Changing password for krb5-01
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
Soft error: Password change rejected ()
passwd: Authentication token manipulation error

これらの点を勘案すると,pam_krb5のパスワード変更機能は動作するものの,一般ユーザが利用するのは少々敷居が高いかもしれません。

まとめ

ここまで説明した通り,pam_krb5を用いることで比較的簡単にパスワードの統合を実現することが可能です。ユーザの作成,削除はLinuxマシン側で行う必要がありますが,Linuxマシンへのログインを許可したいユーザを各Linuxマシン毎に指定することが可能になるため,長所として捉えることもできます。ただし,パスワードの変更機能については制限事項が多いため,パスワード変更はAD上から行ってもらう運用にしたほうが無用のトラブルを避けられそうです。

次回はSFUのNIS機能について取り上げる予定です。


Active Directoryに関する技術情報:
Microsoft TechNet Active Directory TechCenter
URL:http://technet.microsoft.com/ja-jp/activedirectory/default.aspx
Microsoft Active Directory 機能概要ページ
URL:http://www.microsoft.com/japan/ad/

著者プロフィール

たかはし もとのぶ

大学卒業後,株式会社NTTデータに入社。数年間UNIX上でのプログラム開発に携わった後,クライアント/サーバシステム全般に関する技術支援業務を行う部署に異動し現在に至る。「日本Sambaユーザ会」スタッフなどを務め,オープンソース,Microsoft双方のコミュニティ活動に関わるとともに,各種雑誌への記事執筆や,講演などの活動を行っている。2005年6月には「Sambaのすべて」を出版。