機 能 | 説 明 |
---|---|
Interix | |
ユーティリティ | UNIXの基本的なコマンドやperlなどを提供します。 |
Interix GNUコンポーネント | GPLのツール群や開発環境などを提供します。 |
Interix SDK | X11R5の開発環境などを提供します。 |
NFS | |
NFS コンポーネント | NFSサーバ、クライアント機能に加え、NFSサーバ上のリソースをSMBプロトコルを用いてクライアントに公開するNFSゲートウェイ機能を提供します。 |
NFS認証ツール | NFS認証サーバやpcnfsdなどを提供します。 | 認 証 |
NISサーバ | Active DirectoryのDCをNISサーバとして動作させる機能を提供します。 |
パスワード同期 | Windows側とUNIX側とのパスワードを同期させる機能を提供します。 | その他 |
リモート接続 コンポーネント | telnetやrshのクライアントおよびサーバ機能を提供します。 |
ActiveState Active Perl 5.6 | Windows上でPerlの実行環境を提供します。 |
最初にSFUについて簡単に紹介しておきましょう。
SFUはWindows NT/2000/XPに対応したプロダクトで、表1のような機能を提供します。
これらの機能を大別すると
(1) NFS認証ツール
(2) 認証
(3) Interix
(4) その他
になります。
SFU 3.0の目玉としては、従来は別製品で日本では発売されていなかったInterixになるかと思いますが、ここでは認証の連携という観点に基づき、SFUの認証機能にスポットをあてて説明していきます。
この他SFUについての情報は、マイクロソフト社の「Services for UNIX ホーム」などから入手してください。
同ページからは120日間使用可能な評価版の入手も可能になっていますし、本誌付録CD-ROMにも収録しております。
評価版については機能制限などはありませんので、興味のある方は是非使ってみてください。
SFUのインストール自体は非常に簡単で、ウィザードに従っていけばよいだけです。
途中に図1のようにインストールする機能を選択する画面がありますので、ここで必要な機能を選択してインストールもしくはアンインストールします。
認証機能に関連するのは「パスワード同期」と「NISサーバー」になりますので、適宜この二つのコンポーネントをインストールするようにしてください。ただし「NISサーバー」はWindows 2000のDCでのみインストール可能です。また後述しますが、NISサーバ機能はActive Directoryのスキーマを拡張します。拡張されたスキーマは元に戻せませんので、実環境への導入にあたっては充分注意してください。
なおインストールするプロダクトによっては、図2のような画面が現れて、LGPLの確認が表示されます。マイクロソフト社製のプロダクトでこうした表示が行なわれるというのは、やはり何ともいえないモノがありますね(^_^;;
それでは、以下各機能について順番に説明していきましょう。
パスワード同期をインストールすることで、Windows側でパスワードが変更された際に、それをUNIX側のパスワードに反映させることや、逆にUNIX側のパスワードの変更に同期してWindows側のパスワードの変更を行なうことが可能となりますので、WindowsとUNIXとでパスワードの一元管理が可能となります。
ただしコラム1にも書きましたが、残念なことに対応プラットフォームがかなり限られていますので注意してください。
また、Active Directoryドメインとパスワードを同期させたい場合は、ドメイン内の全てのDCにパスワード同期をインストールする必要があるので、注意してください。
# gmake -f makefile.<プラットフォーム名>を行なうか、汎用のmakefile.comを修正した上でgmakeコマンドを実行するのですが、まずsrcディレクトリ内にbinおよびobj/i386というディレクトリを作成しないとコンパイルがうまくいきません。またmakefileの問題でgmake installをしなくても/usr以下にファイルをコピーしようとしますので、そこもコメントアウトする必要があります。
最初にWindowsからUNIXへのパスワード同期の設定を行なってみましょう。
まずは最低限必要な設定のみを示します。
SFUのインストール時に「パスワード同期」コンポーネントをインストールしていると、「Services for UNIX の管理」アプレットに図3のような「パスワード同期」画面が表示されます。
「Windows を実行するコンピュータから……」のチェックボックスにチェックが入っていることを確認してください。また必須ではありませんが、トラブル発生時の便を考慮すると、ある程度安定稼働するまでは図3下の「詳細なログを有効にする」にチェックを行なっておいた方がよいでしょう。
最低限行なわないといけない設定は、「詳細設定」タブを押すと現れる図4の画面から同期先のUNIXマシンのIPアドレスやホスト名を設定することだけです。
プラットフォーム名 | 対応プラットフォーム |
---|---|
so7 | Solaris 7(SPARC版) |
l52 | Red Hat Linux 7.0/7.1 |
h11 | hp-ux 11.00 |
h10 | hp-ux 10.20 |
a42 | AIX 4.3.3 |
UNIX側はCD-ROMのunix/bins以下にあるssod.<プラットフォーム名>というバイナリを利用します。プラットフォーム名については表2を参照してください。適切なバイナリを選択のうえ、名前をssodに変更して/usr/local/bin(もしくは/usr/bin)にコピーします。ファイルに実行権をつけるのを忘れないようにしてください。
同時に設定ファイルのテンプレートであるsso.cfgファイルを/etc/sso.confという名前でコピーします。このファイルは改行コードがUNIX形式である必要がありますので、ftpで転送する場合はバイナリモードで行なうなど、扱いに注意してください。
UNIXの場合ファイルの大文字と小文字を区別しますので、普段使い慣れていない方は注意してください。また、sso.confにはWindowsと通信する時のパスワードが平文で格納されますので、root以外からファイルの内容が読みとられないようにする必要があります。Red Hat Linux 7.1でのインストール例を図5に示します。
# mount /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom/unix/bins
# cp ssod.l52 /usr/local/bin/ssod ← ssodのコピー
# chmod +x /usr/local/bin/ssod ← 念のため実行権を設定する
# cp sso.cfg /etc/sso.conf ← sso.confのコピー
# chmod 600 /etc/sso.conf ← sso.confのアクセス権設定
UNIX側の設定は/etc/sso.confファイルで行ないます。最低限必要な設定は
SYNC_HOSTS=(157.60.253.105,6677,ABCDZ#efgh$12345)
と書いてある行をコメントにして、その下に認証同期元のWindowsマシンのIPアドレスを
SYNC_HOSTS=(x.x.x.x) ← (x.x.x.x はWindowsマシンのIPアドレス)
のように設定することだけです。デフォルトでは互いに「6677/TCP」に対して通信を行ないますので、間にファイアウォールなどが入っている場合は、通信可能なように設定しておいてください。
最後にssodを起動します。単に実行してもよいのですが、念のため-vオプションをつけて図6のように端末に詳細な設定情報を出力させた方がよいでしょう。なおssodを停止させる場合は、KILLコマンドで行なってください(注03)。
# /usr/local/bin/ssod -v
Port: 6677
Use shadow: 1
Case Ignore Name: 1
Use temp: 0
Use NIS: 0
File path: /etc/shadow
Temp path: /etc
Pam_supported 0
それでは実際に動作を確認してみましょう。UNIXマシンに存在するのと同じ名前のアカウントをWindowsマシン側にも作成した上で、Windowsマシン上でパスワードを変更します。パスワード同期が正しく動作していれば、パスワード変更後、UNIXマシンに対してftpなどで接続し、先ほどWindows側で変更したパスワードを入力することで、ログインが可能な筈です。
コラム1でも書きましたが、パスワード同期はサポートされるUNIX側のバージョンがかなり制限されています。トラブルが発生した場合は原因切り分けのため、マイクロソフト社がサポートしているやや古いバージョンのOSで確認することを強く推奨します。
その他はまりやすい要因としては、UNIX側のパスワードポリシーに合致しないパスワード変更を行なった場合が考えられます。これについてはイベントログやsyslogへの出力を確認することである程度の切り分けはできると思います。また切り分け策としてUNIX上でそのアカウントがロックアウトされていないことや、UNIX上でそのアカウントのパスワードをWindows側で設定したパスワードに変更できることの確認などを行なうのもよいでしょう。
エラーが発生した場合は、まずイベントログを確認してください。「詳細なログを有効にする」がチェックしていれば、図7のように詳細な情報が出力されている筈です。
イベントID4098が同期処理の開始、4097が同期成功を意味するメッセージになります。
イベントID8224は、アカウントが無効になっているなど、8243はパスワードが短過ぎる、8196は同期失敗を示すメッセージになっています。なおデフォルトでは30秒間をおいて3回試行を行なうので、エラーも通常3回ずつ同じものが出力されます(注04)。
併せてUNIX側のsyslogにもDAEMONファシリティで図8のようなログが記録されます。
Feb 5 12:22:38 mana ssod:[1061]: Password length lesser than required. Check the /etc/default/passwd file
Feb 5 12:27:11 mana ssod:[8386]: Failed to update password Error: ERROR User: test1
Feb 10 09:21:02 mana passwd: Syncing password for windows disallowed User: test2 Host: 192.168.79.240
Feb 10 09:21:02 mana passwd: Password for user failed to sync User: test2
Feb 10 09:30:35 mana passwd: Illegal sync users found User: +test2 User: -test2
Feb 10 09:30:35 mana passwd: Password sync for user disallowed by system admin. Add this user to the /etc/sso.conf file User: test2
Feb 10 14:00:04 mana ssod:[4035]: Ssod failed to look up UNIX user Error: ERROR User: test2
これらの情報から切り分けを行なっていってください。
次はUNIXからWindowsへのパスワード同期の設定をおこなってみましょう。
基本的にはWindowsからUNIXへの同期の設定と同様ですが、図2の「パスワード同期」画面で、「UNIX を実行するコンピュータから……」の方にチェックが入っていることを確認した上で、同期元UNIXマシンを図3の画面から追加します。
UNIX側では、PAMの設定が必要になります。unix/binsディレクトリにあるpam_sso.<アーキテクチャ名(注05)>というファイルを/lib/security/pam_sso.so.1(Solarisの場合は/usr/lib/security/pam_sso.so.1)という名前でコピーした上で、PAMの設定ファイルの設定を行ないます。図9にはRed Hat Linux 7.1の場合の例、図10にSolarisの場合の例を示します。なおhp-uxの場合もSolarisとほぼ同様です。詳細はドキュメントを参照してください。
password required /lib/security/pam_cracklib.so retry=3
password required /lib/security/pam_sso.so.1 ←追加
password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow
# password required /lib/security/pam_deny.so ←コメントアウト
#
# Password management
#
other password required /usr/lib/security/pam_sso.so.1 ←追加
other password required /usr/lib/security/$ISA/pam_unix.so.1
dtsession auth required /usr/lib/security/$ISA/pam_unix.so.1
UNIX上でpasswdコマンドを使ってUNIXアカウントのパスワードを変更してみましょう。passwdコマンド起動時には認証元のWindowsマシンへ何らかの問い合わせを行なっているようで少し時間がかかりますが、最終的にはパスワードの変更ができる筈です。できなかった場合は、前述したようにsyslogやイベントログを用いて原因の切り分けを行なってください。
ここまで、必要最低限の設定について説明しましたが、実際の環境で使っていくにあたって行なっておくべき設定について説明します。
ここまでの設定では、基本的にUNIX上に存在する全てのアカウントについてパスワードの変更が可能となっていますが、現実的にはシステムが使っているアカウントなどについてはパスワード同期の対象から外したいと思います。以下その方法について説明します。
UNIX側で制御を行なう場合は、SYNC_USERSパラメータを使います。デフォルトでは
SYNC_USERS=all
となっているため、全てのユーザのパスワードが同期されます。例えばmonyoとnorikoを許可し、marikoを許可しないといった場合は、以下のように指定します。
SYNC_USERS=+monyo,+noriko,-mariko
SYNC_USERSに含まれていないアカウントや-が指定されたアカウント(注06)のパスワード同期は無効になり、片側のパスワードのみが変更されます。
基本的にrootやbin、admなどシステムが使っているアカウントは同期対象に含めるべきではないでしょう。
Windows側では、PasswordPropAllowおよびPasswordPropDenyというグループのメンバを構成することで、パスワード同期を有効にするユーザを制御することが可能です。PasswordPropDenyにはパスワード同期を無効にするユーザやグループを、PasswordPropAllowにはパスワード同期を有効にするアカウントをそれぞれ含めます。
デフォルトではPasswordPropDenyグループのみが作成され、Administratorやその他Administrator権限のあるアカウントがメンバとして自動的に追加されています。PasswordPropAllowグループは作成されていませんが、この場合、全てのアカウントがメンバとして含まれるのと同様の動作になります。
なお両方のグループに含まれるアカウントのパスワード同期は無効になります。
デフォルトの暗号キーは既知のもののため、実際に運用を行なう際には必ず変更するようにしてください。変更する場合は、Windows側で図3の画面から「新しいキー」ボタンを押して新しいキーを取得して適用した上で、同期対象のUNIXマシン上においても、値を/etc/sso.confファイル中のENCRYPT_KEYパラメータに設定する必要があります。
同期対象のUNIX上でNISマスタサーバが動作しており、NIS上のユーザのパスワードを同期させたい場合は、/etc/sso.confにUSE_NIS=1という指定をいれた上で、NIS_UPDATE_PATHの値を適切に設定するようにしてください。
なお、これ以外にもssod.confには幾つか設定可能なパラメータがありますので、興味のある方はドキュメントやソースを参照してください。
次にSFUのNISサーバ機能について説明しましょう。
NISサーバ機能とは、図11のようにActive Directoryの各DCを(注07)、UNIXで一般的なディレクトリサービスであるNISのサーバとして動作させるようにする機能です。NISはユーザ認証に必要なパスワード情報も一元管理できるため(注08)、SFUのNISサーバ機能を使ってWindowsドメインのユーザ情報をNIS経由で取得できるようにすることで、UNIXマシンの認証をWindowsドメインで統合することが可能になります。
最初にNISについて簡単に説明しておきましょう。
NISを一言でいうと、UNIXマシンの/etc以下の幾つかのファイルの内容を一元管理するディレクトリサービスの一種です。NISはNTドメインなどと同様シングルマスタ構成をとっており、マスタを保持しているサーバをNISマスタ、マスタの複製を保持しているサーバをNISスレーブと呼びます。NISクライアントはNISサーバ(マスタ、スレーブどちらでも可)に接続して、各種情報を受け取ります。
どのNISサーバに接続しているかを確認するコマンドがypwhich図12で、実際に各種情報を取得するコマンドがypcat図13になります。この他のコマンドについては、NISのドキュメントなどを参照してください。
% ypwhich
shiori ←参照先のNISサーバ名
% ypcat passwd
nistest2:ABCD!efgh12345$67890:10000:10000::/home/nistest2:/bin/csh
セキュリティ面での脆弱性(注09)などが指摘されているNISですが、後継としてSun Microsystems社がリリースしたNIS+がセキュリティの向上や大規模環境への対応を行なった結果非常に複雑となり、他プラットフォームへの移植が進まなかったことなどもあって普及しなかったため(注10)、UNIXマシンのディレクトリサービスとしては、今でもげ根気で用いられています。
なお、本記事はNISの機能解説が主眼ではないため、NISについての説明はこの辺りにしておきます。NISの詳細については、別途各種ドキュメントやWebサイトなどを参照してください。
それでは、以下実際にインストールを行なっていきましょう。Windows側で必要なのは図4の画面での「NISサーバ」コンポーネントのインストールになります。繰返しになりますが、NISサーバをインストールするとActive Directoryのスキーマが拡張されます。Active Directoryの仕様上一度拡張したスキーマは元に戻せませんので、充分注意してください。
NISサーバでは、複数のNISドメインを扱えますが、デフォルトでWindowsドメインのNetBIOS名と同じ名前のNISドメインが作成されていますので、基本的に設定を変更する必要はないでしょう。ただし、UNIX側のパスワード形式がmd5のみの場合は、デフォルトの設定がcryptになっているため、設定の変更が必要です(注11)。
NISサーバのインストールが完了したら、次はNISマップの作成を行ないます。NISマップの作成は基本的に図14のようにnismapというコマンドで行ないます。この作業はGUIでは行なえません。
C:\>nismap add -e "local4:iJa/W9kDv6lDY:10004:10004::/home/local4:/bin/tcsh" -a W2K2 passwd
動作 = 追加中 マップ = 'passwd'...
成功
オブジェクトを Active Directory に追加します。
オブジェクト = 'local4'
オブジェクト クラス = 'User'
コンテナ = 'LDAP://localhost/CN=Users,DC=W2K2,DC=HOME,DC=MONYO,DC=com'.
-eに続いてNISのマップ形式に整形したエントリを記述してください。-aオプションでNISドメイン名を指定し、最後に追加対象のマップ名を指定します。図14以外の例を幾つか図15に示します。
C:\>nismap add -e "192.168.10.10 mayu" -a W2K2 hosts
C:\>nismap add -e "group1::10000:" -a W2K2 group
nismapコマンドではこの他エントリの修正、削除など様々な操作が行なえます。また、nismapコマンドを使って独自のNISマップを追加することも可能です。これらの詳細はSFUのヘルプを参照してください。
一部のNISマップについては、Active Directory上の既存のオブジェクトと対応づけがされているためGUIによる追加も可能になっています。
NISサーバをインストールすると、図16のように、Active Directoryユーザとコンピュータからユーザ(passwdマップ)、グループ(groupマップ)、コンピュータ(hostsマップ)の各オブジェクトのプロパティを表示した際に「UNIX属性」というタブが現れます。ので、ここからアカウント関連の設定を行なったり、「NISドメイン」を設定することで、NISドメインに所属していなかったオブジェクトを対応するNISマップに追加することも可能になっています。
nismapコマンドを使ってこれらのマップのエントリを追加した場合は、自動的にActive Directory側にも対応するオブジェクトが作成されるか、すでに存在している場合はUNIX属性の値が設定されます。なおすでにUNIX属性が設定されているオブジェクトを追加しようとした場合は競合が発生します。競合発生時の対処などについてはドキュメントを参照してください。
パスワードについては特殊な扱いがされます。
o nismapで追加したアカウントがすでにActive Directoryに存在していた場合、Windowsのパスワードは更新されません。従って、passwdマップのパスワードとWindowsのパスワードが異なることになります。
o nismapで追加したアカウントがActive Directoryに存在していなかった場合、Window NISマップの両パスワードはランダムな文字列に設定されます。従って、実際にログオンを行なう前に、一度パスワードを変更することが必要になります。
既存のNISサーバから直接NISマップを移行することも可能です。
nis2adコマンドを利用することもできますし、メニューにある「NIS サーバの移行」ウィザードを使うことも可能です。詳細はドキュメントを参照してください。
一通りエントリの追加が終了したら、既存のNISクライアント(注12)からログオンしてみましょう。うまく移行ができていれば図17のようにidコマンド、ypwhichやypcatコマンドなどが機能する筈です。NISクライアントからみるとUNIXで構築したNISサーバとみわけがつきません。
SunOS 5.8
login: local4
Password:
No directory! Logging in with home=/
Last login: Sat Feb 8 23:52:03 from mana.home.monyo.
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
> id
uid=10004(local4) gid=10004(local4)
> ypcat passwd
nistest2:1kTZZo3XrOSAE:10000:10000::/home/nistest2:/bin/csh
local2:xpf2uf0nkJ88E:10001:10001::/home/local2:/bin/csh
local4:1UE3aN4XWOFAY:10004:10004::/home/local4:/bin/tcsh
> ypwhich
shiori
基本的な日常管理はUNIXベースのNISサーバと同様です。ここではSFUのNISサーバー機能に特有の注意点について記載します。
デフォルトではパスワードの暗号化形式はcryptになっていますが、最近のLinuxなどではより暗号強度が高いmd5がデフォルトで用いられることが多いと思います。このためSFUでも暗号形式をmd5にすることが可能です。暗号化形式の変更は図18の画面にある「UNIXパスワードの暗号化の方法」で行ないます。
もっとも大半の商用UNIXなどはcryptを使っていますので、基本的にはcryptのままでよいでしょう。md5を利用しているのはLinuxやFreeBSDなどになりますが、これらのOSでもcrypt形式を利用できます。NISを利用する場合パスワードの暗号化形式は揃える必要がありますので(注13)、LinuxやFreeBSD側の設定をcryptに変更する必要があるかも知れません。
NISサーバをインストールした場合、Active Directoryの残りのDCには自動的にNISマップが複製されますので、SFUのNISサーバ機能をインストールすることで(注14)NISスレーブサーバとして機能することが可能になります。
UNIXマシンをNISスレーブにする場合は、図19の画面でNISサーバを追加する必要があります。
NISマップの更新を伝達する間隔は図20で指定する他、図18の「伝達」ボタンにより手動で行なうことも可能です。またnisadminコマンドとyppushというコマンドラインツールも用意されています。
パスワードの変更については、注意が必要です。
Windows側のアカウントのパスワードを変更した場合、そのパスワードはWindows側とNISマップの両方に反映されます。しかしNIS経由でパスワードを変更した場合、そのパスワードはNISマップにのみ適用されます。つまりWindows側とNISマップのパスワードが同期しなくなります。またnismap modコマンドでNISマップに格納されたパスワードを直接変更することはできないようになっています。
UNIX側から両方のパスワードを変更したい場合は、前述したパスワード同期機能を設定してUNIX側のパスワードを変更すると同時にWindows側のパスワードも変更するようにしてください。
以上、簡単ではありますが、SFUのもつ認証機能について説明しました。
Windowsドメインが存在している環境にUNIXマシンを導入する場合、認証の統合が問題となるケースは多いと思います。その際の解決策としてWinbindとともにSFUも選択肢の一つに挙げられるのではないかと思います。
本記事が認証の統合を検討している皆様の参考になれば幸いです。
●Services for UNIX ホーム:
http://www.microsoft.com/japan/windows/sfu/previous/
●Microsoft(R) Windows(R) Services for UNIX Version 3.0 日本語版、12月6日の発売に向け、本日より評価版の提供を開始:
http://www.microsoft.com/japan/presspass/releases02/111402sfu.asp
●@IT:製品レビュー Microsoft Windows Services for UNIX 3.0 日本語版:
http://www.atmarkit.co.jp/fwin2k/productreview/sfu30/sfu30_01.html
●@IT:製品レビュー Windows Services for UNIX 2.0:
http://www.atmarkit.co.jp/fwin2k/productreview/serviceforunix/serviceforunix_01.html