winbindd — NT サーバーからの名前解決を行う Name Service Switch (NSS)デーモン
winbindd
[-D|--daemon] [-F|--foreground] [-S|--stdout] [-i|--interactive] [-d <debug level>] [-s <smb config file>] [-n|--no-caching] [--no-process-group]
このプログラムは、samba(7) システムの一部である。
winbindd
は、
はデーモンであり、
現在 C ライブラリの大半に実装されている NSS (ネームサービススイッチ) 機能、
PAM を利用する任意のアプリケーション、
ntlm_auth
および Samba 自身に対する各種サービスを提供する。
NSS 機能を使用しない場合でも、
winbindd はドメインコントローラーとの通信を行い、
smbd
、ntlm_auth
、
PAM モジュールの pam_winbind.so
に対するサービスを提供する。
この場合、
idmap config * : range
パラメーターは不要である(これは「netlogon proxy only mode」と呼ばれる)。
NSS 機能は、ユーザーやシステムの情報を
NIS や DNS などの様々なデータベースサービスから取得することを可能とする。
実際の動作は、
/etc/nsswitch.conf
ファイルにて設定する。
各ユーザーやグループに対しては、
Samba サーバーの管理者が指定したユーザー ID とグループ ID の範囲から
ID が割り当てられる。
winbindd
によって提供されるサービスは「winbind」と呼ばれ、
Windows NT サーバーからユーザーとグループの情報を取得するために用いられる。
このサービスは関連する PAM モジュールを通じて、
認証サービスを提供することも可能である。
pam_winbind
モジュールは、
auth
、 account
、 password
の各モジュールタイプをサポートしている。
account
モジュールについては、システムによるユーザーの UID の取得可否を確認するために getpwnam() を実行するだけの機能しかない。
これは、ドメインコントローラーにより既にアクセス制御が行われているためである。
libnss_winbind
もしくはシステムに応じた名称のライブラリが適切にインストールされていれば、このモジュールは必ず成功するはずである。
winbind サービスは、以下の NSS データベースを実装している:
これは、 IRIX でのみ有効である。
ユーザー情報(訳注: ホスト情報だと思われる)は、伝統的に
hosts(5)
ファイルに格納され、
gethostbyname(3)
関数によって取得される。
名前解決は WINS サーバー経由か、ブロードキャストによって行われる。
ユーザー情報は、伝統的に
passwd(5)
ファイルに格納され、
getpwent(3)
関数によって取得される。
グループ情報は、伝統的に
group(5)
ファイルに格納され、
getgrent(3)
関数によって取得される。
一例として、
以下のような簡単な設定を
/etc/nsswitch.conf
ファイルに記述することで、
ユーザー情報やグループ情報は、最初に
/etc/passwd
や /etc/group
ファイルから、ついで Windows NT サーバーから取得される。
passwd: files winbind group: files winbind ## IRIX においてのみ有効。hostを解決するためにwinbindを使う: hosts: files dns winbind ## その他のNSSが有効のシステムでは、以下のように libnss_wins.soを使う: hosts: files dns wins
以下のような簡単な設定を
/etc/nsswitch.conf
ファイルに記述することで、
ホスト名は、最初に
/etc/hosts
ファイルから、ついで WINS サーバーから取得される。
hosts: files wins
もしも指定されたならば、このパラメーターは、サーバーをデーモンとして動かす。
すなわち、それ自身をデタッチして、適合したポート上でバックグラウンドとして動く。
このスイッチは、もしも、winbindd
がシェルのコマンド行上で実行された事を仮定する。
このパラメーターを指定すると、
winbindd
のメインプロセスがデーモンとして動作しなくなる。
つまり、
2 回の fork(2)
と端末からの切り離しを行なわない。
接続要求を処理するための子プロセスは通常どおり生成されるが、
メインプロセスは終了しない。
この動作モードは、
Daniel J. Bernstein 作の daemontools
パッケージに含まれる
supervise
と svscan
や、
AIX のプロセスモニターなどのプロセス監視機構配下で
winbindd
を動作させるためのものである。
このパラメーターを指定すると、
winbindd
はファイルの代わりに標準出力にログを出力するようになる。
level
は0から10までの整数値である。
既定値の値は、パラメーターが設定されていなければ0である。
この値を大きくするほど、サーバーの動作に関するより詳細な情報が ログファイルに記録される。レベル 0 では、致命的なエラーと重大な警告 のみが記録される。レベル 1 は日々の運用に適しており、少量の稼働状況 に関する情報を生成する。
1 より上のレベルは大量のログが生成されるので、問題解決の時にのみ 使用すべきである。 3 より上のレベルは開発者だけが利用するように設計されて おり、莫大な量のログデータが生成される。そのほとんどは非常に謎めいた内容 となっている
このパラメーターの指定は、smb.conf
ファイル中の、
log level パラメーターの
指定よりも優先する事に注意。
プログラムのバージョン番号を表示する。
サーバーが必要とする詳細な設定を含む設定ファイルを
指定する。このファイルには、サーバーが提供するサービスに関する記述や、
どの printcap ファイルを利用するかといった情報が含まれている。詳細は
smb.conf
を参照のこと。設定ファイルの名前の既定値は、コンパイル時
に決定される。
ログ/デバッグファイルのファイル名。拡張子として
".progname"
が追加される(例えば log.smbclient,
log.smbd,など)。ログファイルはクライアントによって削除されることはない。
コマンドラインオプションの要約を表示する。
簡単な使用法を表示する。
winbindd
にデーモンとしての動作と端末からの切り離しを行なわないように指示する。
このオプションは、
winbindd
の対話的なデバッグが必要な開発者のためのものである。
この際、-S
パラメーターが指定されたときと同じく、ログは標準出力に出力される。
いくつかのキャッシュを無効にする。これにより、
winbindd
は、
クライアントに応答する前にドメインコントローラーからの応答を時々待たなければならず動作が遅くなるが、
キャッシュを使用しなくなるため、より厳密な結果を得られるようになる。
なお、ドメインコントローラーが応答するまで
winbindd
は処理を停止してしまう。
これは、信頼関係にある環境(trusted environments)で、グループメンバーシップの
トラックのために必要とされるsamlogon キャッシュを無効にはしない。
winbinddのために、新しいプロセスグループを作成しない。
Windows NT サーバー上のユーザーとグループが作成された際には、全世界で一意な SID (セキュリティ識別子) が割り当てられる。
Windows NT のユーザーとグループを UNIX のユーザーとグループに変換するには、
SID とユーザー ID およびグループ ID 間のマッピングが必要となる。
これは winbindd
が行なう作業の一つである。
winbindd のユーザーとグループが解決される際に、 ユーザー ID とグループ ID が指定された範囲から割り当てられる。 ID は解決された順に順番に割り当てられるが、 クライアントがユーザーやグループの列挙コマンドを実行すれば、存在するすべてのユーザーとグループのマッピングが行われる。 割り当てられた UNIX 側の ID は、 Samba のロックディレクトリ配下のデータベースファイルに格納され、記憶される。
警告: SID と UNIX の ID を変換するデータベース以外に winbindd がユーザーとグループのマッピング情報を格納している場所はない。 このファイルが削除されたり壊れたりしてしまうと winbindd が、ユーザー ID やグループ ID と Windows NT のユーザーあるいはグループの RID (訳注: SID) との対応を確認する手段はない。
winbindd
デーモンの設定は、
smb.conf(5)
ファイルのパラメーターで行う。
すべてのパラメーターは、
smb.conf の [global] セクション内に記述しなければならない。
winbind: rpc only このパラメーターを設定すると、ドメインコントローラーから情報を 検索するため、LDAPの変わりにwinbindがRPCを使うことを強制 する。
ユーザーとグループ名の解決と認証をドメインコントローラーで行うには、 winbindd を以下のように設定する。 この設定例は、古いバージョンの Red Hat Linux で動作を確認した。
/etc/nsswitch.conf
に以下の記述を行なう:
passwd: files winbind group: files winbind
/etc/pam.d/*
内の
auth
行を以下のような設定に置き換える:
auth required /lib/security/pam_securetty.so auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_winbind.so auth required /lib/security/pam_unix.so \ use_first_pass shadow nullok
pam_unix PAM モジュールは、近年 pam_pwdb モジュールの代わりに用いられている。 Linux システムによっては、pam_unix の代わりに pam_unix2 モジュールが用いられている。
sufficient
キーワードと
use_first_pass
キーワードを使用している点に注意すること。
ここで account
行を以下の設定に置き換える:
account required /lib/security/pam_winbind.so
次はドメインへの参加である。
net
プログラムを以下のように実行する:
net join -S PDC -U Administrator
-U
に続くユーザー名は、
PDC 上で administrator 権限を持つドメインのユーザーであれば誰でもよい。
「PDC」の部分は、実際の PDC の IP もしくは名前に置き換えること。
引き続き libnss_winbind.so
を
/lib
に、
pam_winbind.so
を
/lib/security
にコピーする。
/lib/libnss_winbind.so
から
/lib/libnss_winbind.so.2
へのシンボリックリンクも用意する必要がある。
ただし古いバージョンの glibc を使用しているなら、
シンボリックリンク先は
/lib/libnss_winbind.so.1
にしなければならない。
最後に、 smb.conf(5) に以下のような設定を記述する:
[global] winbind separator = + winbind cache time = 10 template shell = /bin/bash template homedir = /home/%D/%U idmap config * : range = 10000-20000 workgroup = DOMAIN security = domain password server = *
ここで winbindd を起動すると、ユーザーおよびグループの対応を行うデータベースが
Windows NT のユーザーとグループの情報を取り込むに従い、大きくなっていくのが確認できる。
また、「ドメイン名+ユーザー名」という形式でユーザー名を指定することで、
ドメインのユーザーが UNIX にログインできることも確認できるだろう。
getent passwd
と getent group
コマンドを実行すれば、
winbindd が正常に稼働していることを確認できる。
以下の注意点は、
winbindd
の設定や実行の際に有用である:
winbindd
が機能するには、同じマシン上で
nmbd(8)
を実行していなければならない。
PAM は非常に設定ミスを犯しやすい。 PAM の設定ファイルを変更する際は、 何を行なっているかをきちんと確認すること。 PAM の設定を誤ることで、 誰もシステムにログインできなくなってしまうこともあり得る。
複数の UNIX マシンで winbindd
を実行した場合、一般的に
winbindd によって割り当てられるユーザー ID とグループ ID はマシン毎に異なる。
idmap config * : backendパラメーターで、情報を共有する設定を行わない限り、
ユーザー ID とグループ ID はローカルマシン内でのみ有効である。
Windows NT の SID と UNIX のユーザー ID とグループ ID 間のマッピングファイルが壊れたりなくなったりすると、 マッピング情報は失われてしまう。
以下のシグナルによって
winbindd
デーモンを操作することが
可能である。
smb.conf(5)
ファイルを再読み込みさせ、
実行中の winbindd
にパラメーターの変更を反映させる。
このシグナルにより、
ユーザー情報とグループ情報のキャッシュもクリアされる。
また、winbindd が信頼するドメインの一覧も再取得される。
ステータス情報を winbindd
のログファイルに書き込ませる。
ログファイルは、 log file パラメーターで指定したファイルである。
/etc/nsswitch.conf(5)
ネームサービススイッチの設定ファイル。
クライアントが
winbindd
と通信するための UNIX パイプ。
セキュリティ上の理由で、
/tmp/.winbindd
ディレクトリと
/tmp/.winbindd/pipe
ファイルの両方の所有者が root 以外の場合、クライアントは
winbindd デーモンとの接続を行なわない。
winbind の「特権」クライアントが
winbindd
と通信するための UNIX パイプ。
セキュリティ上の理由で、
winbindd のいくつかの機能
(ntlm_auth
ユーティリティが必要とする機能など)
へのアクセスは制限されており、
デフォルトでは、
「root」グループに属するユーザーだけがアクセスできる。
管理者が $LOCKDIR/winbindd_privileged
のグループパーミッションを変更することで、
「squid」などのプログラムが ntlm_auth を利用できるようにすることなどが可能である。
$LOCKDIR/winbindd_privileged
ディレクトリと
$LOCKDIR/winbindd_privileged/pipe
ファイルの両方の所有者が root 以外の場合、winbindクライアントは
winbindd デーモンとの接続を行なわない事に注意。
ネームサービススイッチライブラリの実体。
Windows NT の RID から
UNIX の ユーザー/グループ ID へのマッピング情報の保管場所。
ロックディレクトリは、Samba のコンパイル時に
--with-lockdir
オプションを用いて指定する。
このディレクトリの既定値は
/usr/local/samba/var/locks
である。
キャッシュされたユーザー/グループ情報の保管場所。