2008.12.04

Windowsドメインのパスワードで Linuxにもログインできるようにする。

社内のユーザーアカウントを Windows ActiveDirectoryで管理していて、
イントラの Webサーバーとかバージョン管理のサーバー等に
部分的に Linuxを導入しているところは多いと思います。

弊社でも Linuxを野放しにしていたため、
パスワードが各サーバーでパスワードが違って、面倒なことになって来ました。
遅ればせながら、今回は Kerberosを使って、パスワードの管理を
Windowsドメイン ActiveDirectory側にまとめてみましたので、設定の仕方を記録しておきます。


対象としたのは、Debian(etch)ですが、
他のディストリビューションでも設定にはかわりはないと思います。

まず、設定に必要なパッケージをインストールします。

# apt-get install libpam-krb5 krb5-user libpam-unix2

pam-krb5 インストール途中で入力が要求されるものは、DCの名前です。適当に答えておきます。
ただし、ドメイン名は大文字で書かなくてはいけませんので注意します。


インストールが終了したら Kerberos クライアントが使用する設定ファイルを確認しておきます。
# vi /etc/krb5.conf(確認が必要な個所だけ抜粋)

[libdefaults]
 default_realm = HOGEHOGE.CO.JP (大文字であることを確認)

[realms]
 HOGEHOGE.CO.JP = {
  kdc = dc1.HOGEHOGE.CO.JP
  kdc = dc2.HOGEHOGE.CO.JP (dcが複数あれば行を追記しても可)
  admin_server = yamahiko.HOGEHOGE.CO.JP
 }

[domain_realm] (必要に応じて追記。使い方によっては不要?)
 .hogehoge.co.jp = HOGEHOGE.CO.JP
 hogehoge.co.jp = HOGEHOGE.CO.JP


うまく設定できたか、Kerberosクライアント側のコマンドを使って確認します。

# kinit ichikawa@HOGEHOGE.CO.JP (注:ドメイン名は大文字)
Password for ichikawa@HOGEHOGE.CO.JP:(Windowsドメインのパスワードを入力する)

うまく認証できれば何のメッセージもなくプロンプトに戻りますが
エラーの場合は以下のようになります。

# kinit ichikawa@HOGE.CO.JP
kinit(v5): Cannot resolve network address for KDC in requested realm while getting initial credentials
(ドメインが存在しない)

# kinit hogehoge@HOGEHOGE.CO.JP
kinit(v5): Client not found in Kerberos database while getting initial credentials
(ユーザーが存在しない)

# kinit ichikawa@hogehoge.co.jp
Password for ichikawa@hogehoge.co.jp:(Windowsドメインのパスワードを入力する)
kinit(v5): KDC reply did not match expectations while getting initial credentials
(ドメインが小文字)

# kinit ichikawa@HOGEHOGE.CO.JP
Password for ichikawa@HOGEHOGE.CO.JP:(Windowsドメインのパスワードを入力する)
kinit(v5): Preauthentication failed while getting initial credentials
(パスワードを間違えた)

# kinit ichikawa@HOGEHOGE.CO.JP
Password for ichikawa@HOGEHOGE.CO.JP:(Windowsドメインのパスワードを入力する)
kinit(v5): Clock skew too great while getting initial credentials
(Linuxと ActiveDirectoryの DCの時刻が 5分以上ずれている)

いくつかの例では、Windowsの DC側のセキュリティログにイベントが残り、
Windows側にパスワードの間違いでロックがかかるようなグループポリシーを設定している場合は、
Linux側のパスワード間違いも対象になるはずです。

さて、Kerberosの設定が正しいことを確認したら、次はログイン等の認証方法を設定している pam関係のファイルを修正します。
/etc/pam.d/login等の特定のコマンド用のファイルを直すよりは、
それらが includeで使用している共通の common-** のファイルを修正します。

# vi /etc/pam.d/common-auth

auth sufficient pam_krb5.so (追加)
#auth required pam_unix.so nullok_secure (下行と置き換え)
auth required pam_unix2.so (追加。 pam_unix.so をそのまま利用していると、passwordを 2回聞いてきたりするので)

# vi /etc/pam.d/common-session

session optional pam_krb5.so (追加)
session required pam_unix.so (pam_unix2.soでなくても良い???)
session required pam_mkhomedir.so skel=/etc/skel umask=0022 (追加)
(ついでなので、ログインしたら自動でホームディレクトリが作成されるようにする)


以上です。何かのプロセスを再起動したりする必要はありません。


ついでに Windowsドメインと同じ名前ですでに Linux側にパスワードを持ったアカウントがあれば、
/etc/shadow を編集したりしてLinux側のパスワードを消去しておきます。
パスワードを保持したままだと Windowsドメインのパスワード/Linuxのパスワードどちらでもログインできてしまいます。

以降の運用は
アカウント追加時
1.Windows側でアカウントを作成。
2.Linux側でアカウントを作成。
 useradd newUser (←これだけで可)

アカウント無効時
1.Windows側でアカウントを無効化。
2.(Linux側でもログインできなくなる)

これで複数のパスワードを覚えておく必要はなく、Windowsドメインのパスワードを修正するだけで Linuxへのログインパスワードも変わります。
Linux側でユーザーを管理するための UIDや GIDを付番するために、
アカウント自体は Linux側にも作成する必要があるものの、パスワードの管理は Windows側に集約できます。
Linuxへのログインが一切必要ないアカウントは作成しなくてよく、
またLinuxにしかログインしないアカウントは従来通り Linux側にだけ作成することができます。


さらにアカウントまで Windowsドメイン側に統合したければ Winbindや LDAPを使ったりすることになるようですが、それはまた別の機会に。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa