前回 までで、SUAのNIS機能による認証統合について、最低限の設定方法を紹介しました。今回は、引き続きエラーを解消するための設定とLinuxサーバからADへのパスワード同期を実現するSUAのパスワード同期機能について説明します。 以下、具体的に設定方法を説明します。
pam_mkhomedirモジュールによるホームディレクトリの自動作成
前回紹介した設定を行うことで、認証の統合は実現できましたが、認証とは関係ない各ユーザのホームディレクトリは別途手作業で作成する必要があります。これではせっかく認証を統合したメリットが半減してしまいます。
そこで今回はpam_mkhomedirというPAMモジュールによるホームディレクトリの自動作成を紹介しましょう。
pam_mkhomedirモジュールはpamパッケージに含まれています。CentOS 5.2の場合、pamパッケージは必ずインストールされますので、パッケージのインストール作業自体は不要です。
CentOS 5.2では、以下のようにauthconfigコマンドにオプションを付けて実行することで、必要なファイルが適切に変更され、モジュールが有効となります。
# authconfig --enablemkhomedir --update
通常の設定を行っている場合は[1] 、/etc/pam.d/system-authファイルの末尾に
session required pam_mkhomedir.so
という行が追加されます。
このモジュールには、表1のオプションを設定することが可能です。
表1 pam_mkhomedirモジュールのオプション
オプション
デフォルト値
意味
skel
/etc/skel
ドットファイルのテンプレートが存在するディレクトリ
umask
0022
ホームディレクトリのumask
「skel=」に続いて作成したホームディレクトリに、コピーするドットファイル群が置かれているディレクトリを指定します。通常はデフォルトのままでよいでしょう。
「umask=」に続いて作成するホームディレクトリのumaskを指定します。作成するホームディレクトリのパーミッションは、この値と0777とのANDで設定されますので、デフォルト値の場合、ホームディレクトリのパーミッションは755になります。たとえばパーミッションを700にしたい場合は、umask=0077としてください。
SUAのパスワード同期機能
前回説明したように、SUAのNISサーバ機能によるパスワードの同期機能は、AD→Linuxの一方通行となります。
SUAではUNIX属性のひとつとしてLinux用のパスワードを保持しています。前回 説明した「Windows から NIS(Active Directory)へのパスワード同期」の「有効にする」チェックボックスをチェックすることで、ADのパスワードを変更する際には同時にUNIX属性のパスワードも変更されます。しかし、Linuxサーバ上でLinuxユーザのパスワードを変更した場合、UNIX属性のパスワードは変更されるものの、ADのパスワードを同期して変更させる機能がありません。この場合、ADのパスワードとUNIX属性のパスワードが異なるパスワードになってしまいます。
図1 SUAのパスワード同期の問題点
双方向の同期を実現するには、SUAに付属するパスワード同期機能を構成します。パスワード同期機能はNISサーバ機能と無関係に双方向のパスワード同期を実現させることが可能な機能ですが、今回はNISサーバ機能との連係にあたって必要な、Linux→Windows(AD)のパスワード同期機能に限って、設定方法を説明します。
ただし、Windows Server 2008に付属のパスワード同期機能の場合、マイクロソフト社によってサポートされているプラットフォームは表2に示したもののみです。RHELの最新版である5やHP-UXの最新版であるHP-UX 11i v3がサポートされていない等、サポート対象のプラットフォームについては難があるのが実状です。
表2 パスワード同期機能のサポート対象プラットフォーム
対応プラットフォーム
プラットフォーム名
Solaris 10(SPARC版)
sol
RHEL4/SUSE Linux Enterprise Server 10
rhl[2]
HP-UX 11i v1
hpx
AIX 5L 5.2/5.3
aix
以下、CentOS 5.2を例に設定しますが、正式にサポートされている環境ではありません[3] 。
[3] UNIX側についてはソースが添付されており、改変も許諾されています。そのため、バイナリが動作しないプラットフォームについても動作させることは不可能ではありませんが、ビルドはかなり困難で、一般の管理者が行うのは難しいでしょう。
パスワード同期機能のインストールと設定
前回の設定を行っていれば、パスワード同期機能に関してはすでにインストールされているはずですので、インストール手順については省略します。
管理GUIを起動して「パスワード同期」のプロパティから「パスワードの同期の方向」欄で「UNIXからWindows」を選択します。また、「 暗号化/暗号化解除キー」についても、「 キーの生成」ボタンを押して、新しいキーを生成しておいてください。設定例を図2 に示します。
図2 パスワード同期のプロパティ
引き続き、「 UNIX ベースのコンピュータ」を右クリックして「コンピュータの追加」を選択します。表示された画面で「コンピュータ名」にパスワードの同期元となるLinuxサーバのIPアドレス(もしくはホスト名)を設定して「適用」ボタンを押してください。これでWindowsサーバ側は最低限の設定が完了です。
設定を有効にするために、一度Windowsサーバを再起動します(※4) 。
パスワード同期モジュールのインストールと設定
Linuxサーバ側にパスワード同期モジュールをインストールします。インストーラがないため、基本的にはすべて手作業になります。
パッケージのインストール
パスワード同期モジュールは古いlibstdc++.so.5を必要とします。このため、以下のようにしてあらかじめcompat-libstdc++-33パッケージをインストールしておいてください。
パッケージがインストールされていない場合は、/var/log/secureファイルに
Feb 16 01:51:48 centos52 login: PAM [error: libstdc++.so.5: cannot open shared object file: No such file or directory]
Feb 16 01:51:48 centos52 login: PAM adding faulty module: /lib/security/pam_sso.so
といったメッセージが出力されます。
パスワード同期モジュールのインストール
パスワード同期モジュールを含むSUAのUNIX側のモジュールは、マイクロソフトのWebサイトからダウンロードする必要があります。
Microsoftのダウンロードサイト を「ssod」で検索し、「 UNIX Side Components for Identity Management for UNIX -- Shipped with Windows Server codenamed Longhorn Server Beta 2 / Windows Server codenamed Longhorn Server IDS_C」をダウンロードしてください。
リリース日が2006年6月29日、Windows Longhorn Server用と書かれているのですが、これが最新版です。ssod.tar.gzというファイルがダウンロードされますので展開して、unix/bins/rhl_9にあるpam_sso.rhlファイルを/lib/security/pam_sso.soという名称に変更してコピーし、パーミッションを755にしておきます。
SELinuxが有効になっていると、ファイルをコピーしただけでは正常に動作しませんので、SELinuxを無効、もしくはpermissiveに変更しておいてください。SELinuxが有効のままだと、パスワード変更時に以下のようなエラーメッセージが出力されて、正しく動作しません。
Feb 18 18:06:52 centos52 kernel: audit(1234948012.529:15): avc: denied { execmod } for pid=9694 comm="passwd" path="/lib/security/pam_sso.so" dev=dm-0 ino=657683 scontext=user_u:system_r:unconfined_t:s0 tcontext=root:object_r:lib_t:s0 tclass=file
ついでunix/bins以下にある設定ファイルのsso.cfgを/etc/sso.confという名前でコピーしてください。このファイルには、Windowsサーバと通信する際のパスワードが平文で格納されますので、必ずroot以外が読み書きできないように所有者root、パーミッションを600に設定します。
引き続き、PAM関連の設定を行います。最低限必要な設定は、
password required pam_sso.so
という行を適切な場所に入れるだけなのですが、適切な位置を判断するのがかなり困難です。筆者が試行錯誤した限り、筆者の環境の/etc/pam.d/system-authファイル中で以下のようになっている箇所を
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
password required pam_deny.so
以下のように書き換えることで、適切に動作しました。
password requisite pam_cracklib.so try_first_pass retry=3
password required pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
password required pam_sso.so try_first_pass
ただし、個々の環境で/etc/pam.d/system-authファイルがどのようになっているかは、環境に依存しますので、それに応じて必要な設定も異なります。適切な設定を行う上では、PAMの概念および個々のPAMモジュールの設定を熟知している必要があります。
なお、手作業で書き換えた設定は、authconfigなどのツールからPAMの設定を変更すると消失しますので、PAMの設定をツールで変更するたびに、手作業で上記の設定を復活させる必要があります。
最後に、設定ファイルの/etc/sso.confに最低限の設定を行います。このファイルにはいくつかの設定オプションがありますが、最低限動作させる上では
SYNC_HOSTS=(157.60.253.105,6677,ABCDZ#efgh$12345)
と書いてある行をコメントにして、その下に認証同期先のDCの設定を
SYNC_HOSTS=(<IPアドレス >,<ポート番号 >,<暗号化キー >)
という形式で設定します。設定内容は図2 と合わせる必要がありますので、ここでは以下のように設定します。
SYNC_HOSTS=(192.168.135.111,6677,U8}R6f[158O"D0O8Z60U)
パスワード同期対象ユーザの制御
ここまでで最低限の設定が完了しましたが、この状態では全てのユーザがパスワードの同期対象のユーザとなっています。rootなどLinuxサーバにしか存在しないユーザや、AdministratorなどADの重要なユーザは同期対象から外しておいた方がよいでしょう。
Linuxサーバ側で同期対象となるユーザを制御するには、/etc/sso.confファイル中のSYNC_USERSパラメータで行います。デフォルトでは
SYNC_USERS=all
となっていますので、全てのユーザが同期対象となっています。たとえば
SYNC_USERS=all,-root
と設定することで、rootを同期対象から外すことができます。また
SYNC_USERS=+nis1
と設定した場合、nis1ユーザのみが同期対象となります。このように、SYNC_USERS行に「+ユーザ名」で同期対象としたいユーザ名を、「 -ユーザ名」で同期対象としたくないユーザ名をカンマ区切りで指定します。
AD側では、PasswordPropAllowおよびPasswordPropDenyというグループのメンバを構成することで、パスワード同期を有効にするユーザを制御することが可能です。
PasswordPropDenyにはパスワード同期を無効にするユーザやグループを、PasswordPropAllowにはパスワード同期を有効にするアカウントをそれぞれ含めます。デフォルトではこれらのグループは作成されていません。この場合、全てのユーザのパスワード同期が許可されます。
パスワード同期機能の動作確認
設定が終わったら、実際にLinuxサーバ上でADのNISサーバ上に存在するユーザとしてログインした上で、通常と同様にしてパスワードを変更します。
変更に成功した場合、AD側のアプリケーションログに、図3 のような一連のログが出力されます。
図3 パスワード同期に成功した場合のイベントログ
問題が発生した場合は、CentOS 5.2の場合、Linuxサーバの/var/log/messagesや/var/log/secureログ、AD側のアプリケーションログを参照の上、適宜トラブルシューティングを行ってください。
まとめ
ここまで説明したように、pam_mkhomedirモジュールにより、ホームディレクトリの自動作成が可能となり、ADへの新規ユーザ作成時のLinuxサーバ側での運用管理コストを事実上ゼロにすることが可能です。ただし、ユーザ削除時のホームディレクトリの削除処理は別途行う必要があります。
また、SUAのパスワード同期モジュールをインストールすることで、前回紹介したNISサーバー機能だけでは実現できなかったLinuxサーバ→ADのパスワード同期が実現します。ただし、最新版のLinuxでのサポートがないことに加え、設定自体がかなり難解で、トラブル発生時にはLinuxのかなり高度な知識が必要となることが難点です。
次回はNISではなく、近年主流となっているLDAP を用いて認証を統合する方法について取り上げる予定です。
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/