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

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

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

前回説明したように,Active Directory(AD)の認証はKerberosにより行われています。Active DirectoryのドメインはKerberosでいうところの「レルム(realm)」に相当し,ADのドメインコントローラ(DC)は,Kerberos的にはKDCとして機能しています。

今回紹介するpam_krb5は,Linuxマシンの認証を外部のKDCにより行えるようにするPAMモジュールです。KDCとしてADのDCを指定することで,Linuxマシンの認証がADに統合されます。

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

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

以下,具体的に設定方法を説明します。

pam_krb5のインストール

通常のLinuxディストリビューションであれば,pam_krb5はパッケージ化されているはずです。必要なパッケージの名称を表1に示します。これらのパッケージを適宜インストールしてください。

表1 pam_krb5の利用に必要なパッケージ名

ディストリビューション パッケージ名
CentOS pam_krb5
Debian libpam-krb5

可能な限り,インターネットから最新版のパッケージを入手,インストールすることをお勧めします。

以下,IPアドレスが192.168.135.223で,w2003r2srv3というホスト名のDCが存在する,W2003R2AD3.LOCALというADドメインでLinuxマシンの認証を行う場合を例に,設定例を示します。

pam_krb5の設定

インストールが完了したら,引き続き設定を行います。

CentOS 5.2の場合,以下のようにauthconfigコマンドにオプションを付けて実行することで,必要なファイルが適切に変更されます。

# authconfig --enablekrb5 --krb5kdc=192.168.135.223 --krb5realm=W2003R2AD3.LOCAL --update 

ここでは,KDCをIPアドレスで指定していますが,適切に名前解決が行える環境では,もちろん名前で指定しても構いません。このコマンドにより,Kerberos関連の設定を行う/etc/krb5.confファイルにリスト1のような設定が追加されます。

リスト1 /etc/krb5.confの設定例(追加部分)

[libdefaults]
 default_realm = W2003R2AD3.LOCAL
 ...

[realms]
 ...
 W2003R2AD3.LOCAL = {
  kdc = 192.168.135.223
 }
 EXAMPLE.COM = {
 ...

[domain_realm]
 ...
 .w2003r2ad3.local = W2003R2AD3.LOCAL 
 w2003r2ad3.local = W2003R2AD3.LOCAL

また,PAMの設定ファイルである/etc/pam.d/system-authにも,リスト2のようにpam_krb5関連の設定が追加されます。

リスト2 /etc/pam.d/system-authの設定(pam_krb5関連部分)

# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_krb5.so use_first_pass ← 追加 
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_krb5.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_krb5.so use_authtok ← 追加 
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quietuse_uid
session     required      pam_unix.so
session     optional      pam_krb5.so ← 追加 

Debianの場合は,/etc/krb5.confに手作業でリスト1相当の設定を行った上で,最低限/etc/pam.d/common-authファイルに対し,手作業でpam_krb5のエントリを追加します。通常の環境ではリスト3のようにすればよいでしょう。

リスト3 /etc/pam.d/common-authへの追加

auth    required    pam_krb5.so minimum_uid=1000 ←追加
auth    required    pam_unix.so nullok_secure 

パスワード同期も行いたい場合は,/etc/pam.d/common-passwordファイルにリスト4のようなエントリを追加します。

リスト4 /etc/pam.d/common-passwordへの追加

password   sufficient pam_krb5.so minimum_uid=1000 ← 追加
password   required   pam_unix.so nullok obscure min=4 max=8 md5 

minimum_uidオプションを「minimum_uid=1000」のように設定することで,uidが1000未満のユーザに対しては,本モジュールが無効化されます。このため,rootなどシステム上重要なユーザの認証がADで行われ,意図せずLinuxマシンへのログインが可能となってしまうといった事態を防ぐことができません。このオプション自体はCentOSでも有効ですが,CentOSではpam_succeed_ifモジュールなどにより,同様の機能が実現されているため,特にオプションを付加する必要はありません。

この他,上記設定例では,認証先のADとしてkrb5.confの先頭付近に記述されているデフォルトのレルム(ADドメインに相当する概念)が用いられます。

リスト5 krb5.confに記述されているデフォルトのレルム

[libdefaults]
 default_realm = W2003R2AD3.LOCAL 

デフォルト以外のレルムで認証したい場合は,pam_krb5モジュールのオプションに「realm=W2003R2AD3.LOCAL」のようにして明示的に認証先のレルムを指定する必要があります。

その他,Kerberos認証を行う上では,kdcと時刻が同期されている必要があります。ntpなどを用いてkdc(DC)と常時時刻同期が行われるように構成してください。

著者プロフィール

たかはし もとのぶ

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

コメント

コメントの記入