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

第3回SUAのNIS機能による認証統合[2]

前回までで、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のパスワード同期の問題点
図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]⁠。

パスワード同期機能のインストールと設定

前回の設定を行っていれば、パスワード同期機能に関してはすでにインストールされているはずですので、インストール手順については省略します。

管理GUIを起動して「パスワード同期」のプロパティから「パスワードの同期の方向」欄で「UNIXからWindows」を選択します。また、⁠暗号化/暗号化解除キー」についても、⁠キーの生成」ボタンを押して、新しいキーを生成しておいてください。設定例を図2に示します。

図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(もしくはsufficient) 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 パスワード同期に成功した場合のイベントログ
図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/

おすすめ記事

記事・ニュース一覧