Name

winbindd — NT サーバーからの名前解決を行う Name Service Switch (NSS)デーモン

Synopsis

winbindd [-F] [-S] [-i] [-Y] [-d <debug level>] [-s <smb config file>] [-n]

説明

このプログラムは、samba(7) システムの一部である。

winbindd は、 はデーモンであり、 現在 C ライブラリの大半に実装されている NSS (ネームサービススイッチ) 機能、 PAM を利用する任意のアプリケーション、 ntlm_auth および Samba 自身に対する各種サービスを提供する。

NSS 機能を使用しない場合でも、 winbindd はドメインコントローラーとの通信を行い、 smbdntlm_auth 、 PAM モジュールの pam_winbind.so に対するサービスを提供する。 この場合、 idmap uid および idmap gid パラメーターは不要である (これは「netlogon [proxy only mode」と呼ばれる)。

NSS 機能は、ユーザーやシステムの情報を NIS や DNS などの様々なデータベースサービスから取得することを可能とする。 実際の動作は、 /etc/nsswitch.conf ファイルにて設定する。 各ユーザーやグループに対しては、 Samba サーバーの管理者が指定したユーザー ID とグループ ID の範囲から ID が割り当てられる。

winbindd によって提供されるサービスは「winbind」と呼ばれ、 Windows NT サーバーからユーザーとグループの情報を取得するために用いられる。 このサービスは関連する PAM モジュールを通じて、 認証サービスを提供することも可能である。

pam_winbind モジュールは、 authaccountpassword の各モジュールタイプをサポートしている。 account モジュールについては、システムによるユーザーの UID の取得可否を確認するために getpwnam() を実行するだけの機能しかない。 これは、ドメインコントローラーにより既にアクセス制御が行われているためである。 libnss_winbind もしくはシステムに応じた名称のライブラリが適切にインストールされていれば、このモジュールは必ず成功するはずである。

winbind サービスは、以下の NSS データベースを実装している:

-D

もしも指定されたならば、このパラメーターは、サーバーをデーモンとして動かす。 すなわち、それ自身をデタッチして、適合したポート上でバックグラウンドとして動く。 このスイッチは、もしも、winbindd がシェルのコマンド行上で実行された事を仮定する。

hosts

これは、 IRIX でのみ有効である。 ユーザー情報(訳注: ホスト情報だと思われる)は、伝統的に hosts(5) ファイルに格納され、 gethostbyname(3) 関数によって取得される。 名前解決は WINS サーバー経由か、ブロードキャストによって行われる。

passwd

ユーザー情報は、伝統的に passwd(5) ファイルに格納され、 getpwent(3) 関数によって取得される。

group

グループ情報は、伝統的に 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

オプション

-F

このパラメーターを指定すると、 winbindd のメインプロセスがデーモンとして動作しなくなる。 つまり、 2 回の fork(2) と端末からの切り離しを行なわない。 接続要求を処理するための子プロセスは通常どおり生成されるが、 メインプロセスは終了しない。 この動作モードは、 Daniel J. Bernstein 作の daemontools パッケージに含まれる supervisesvscan や、 AIX のプロセスモニターなどのプロセス監視機構配下で winbindd を動作させるためのものである。

-S

このパラメーターを指定すると、 winbindd はファイルの代わりに標準出力にログを出力するようになる。

-d|--debuglevel=level

level is an integer from 0 to 10. The default value if this parameter is not specified is 0.

The higher this value, the more detail will be logged to the log files about the activities of the server. At level 0, only critical errors and serious warnings will be logged. Level 1 is a reasonable level for day-to-day running - it generates a small amount of information about operations carried out.

Levels above 1 will generate considerable amounts of log data, and should only be used when investigating a problem. Levels above 3 are designed for use only by developers and generate HUGE amounts of log data, most of which is extremely cryptic.

Note that specifying this parameter here will override the parameter in the smb.conf file.

-V|--version

Prints the program version number.

-s|--configfile <configuration file>

The file specified contains the configuration details required by the server. The information in this file includes server-specific information such as what printcap file to use, as well as descriptions of all the services that the server is to provide. See smb.conf for more information. The default configuration file name is determined at compile time.

-l|--log-basename=logdirectory

Base directory name for log/debug files. The extension ".progname" will be appended (e.g. log.smbclient, log.smbd, etc...). The log file is never removed by the client.

-h|--help

Print a summary of command line options.

-i

winbindd にデーモンとしての動作と端末からの切り離しを行なわないように指示する。 このオプションは、 winbindd の対話的なデバッグが必要な開発者のためのものである。 この際、-S パラメーターが指定されたときと同じく、ログは標準出力に出力される。

-n

キャッシュを無効にする。これにより、 winbindd は、 クライアントに応答する前にドメインコントローラーからの応答を毎回待たなければならず動作が遅くなるが、 キャッシュを使用しなくなるため、より厳密な結果を得られるようになる。 なお、ドメインコントローラーが応答するまで winbindd は処理を停止してしまう。

-Y

単一デーモンモード。 winbindd は単一のプロセスだけで動作する (Samba 2.2 での動作モード)。 winbindd のデフォルトの動作では、 期限切れのキャッシュエントリの更新を行う子プロセスが起動される。

設定

winbindd デーモンの設定は、 smb.conf(5) ファイルのパラメーターで行う。 すべてのパラメーターは、 smb.conf の [global] セクション内に記述しなければならない。

設定例

ユーザーとグループ名の解決と認証をドメインコントローラーで行うには、 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

Note

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 uid = 10000-20000
        idmap gid = 10000-20000
        workgroup = DOMAIN
        security = domain
        password server = *

ここで winbindd を起動すると、ユーザーおよびグループの対応を行うデータベースが Windows NT のユーザーとグループの情報を取り込むに従い、大きくなっていくのが確認できる。 また、「ドメイン名+ユーザー名」という形式でユーザー名を指定することで、 ドメインのユーザーが UNIX にログインできることも確認できるだろう。 getent passwdgetent group コマンドを実行すれば、 winbindd が正常に稼働していることを確認できる。

注意

以下の注意点は、 winbindd の設定や実行の際に有用である:

winbindd が機能するには、同じマシン上で nmbd(8) を実行していなければならない。

PAM は非常に設定ミスを犯しやすい。 PAM の設定ファイルを変更する際は、 何を行なっているかをきちんと確認すること。 PAM の設定を誤ることで、 誰もシステムにログインできなくなってしまうこともあり得る。

複数の UNIX マシンで winbindd を実行した場合、一般的に winbindd によって割り当てられるユーザー ID とグループ ID はマシン毎に異なる。 パラメーターで、情報を共有する設定を行わない限り、 ユーザー ID とグループ ID はローカルマシン内でのみ有効である。

Windows NT の SID と UNIX のユーザー ID とグループ ID 間のマッピングファイルが壊れたりなくなったりすると、 マッピング情報は失われてしまう。

シグナル

以下のシグナルによって winbindd デーモンを操作することが 可能である。

SIGHUP

smb.conf(5) ファイルを再読み込みさせ、 実行中の winbindd にパラメーターの変更を反映させる。 このシグナルにより、 ユーザー情報とグループ情報のキャッシュもクリアされる。 また、winbindd が信頼するドメインの一覧も再取得される。

SIGUSR2

ステータス情報を winbindd のログファイルに書き込ませる。

ログファイルは、 log file パラメーターで指定したファイルである。

ファイル

/etc/nsswitch.conf(5)

ネームサービススイッチの設定ファイル。

/tmp/.winbindd/pipe

クライアントが winbindd と通信するための UNIX パイプ。 セキュリティ上の理由で、 /tmp/.winbindd ディレクトリと /tmp/.winbindd/pipe ファイルの両方の所有者が root 以外の場合、クライアントは winbindd デーモンとの接続を行なわない。

$LOCKDIR/winbindd_privileged/pipe

winbind の「特権」クライアントが winbindd と通信するための UNIX パイプ。 セキュリティ上の理由で、 winbindd のいくつかの機能 (ntlm_auth ユーティリティが必要とする機能など) へのアクセスは制限されており、 デフォルトでは、 「root」グループに属するユーザーだけがアクセスできる。 管理者が $LOCKDIR/winbindd_privileged のグループパーミッションを変更することで、 「squid」などのプログラムが ntlm_auth を利用できるようにすることなどが可能である。 $LOCKDIR/winbindd_privileged ディレクトリと $LOCKDIR/winbindd_privileged/pipe ファイルの両方の所有者が root 以外の場合、winbindクライアントは winbindd デーモンとの接続を行なわない事に注意。

/lib/libnss_winbind.so.X

ネームサービススイッチライブラリの実体。

$LOCKDIR/winbindd_idmap.tdb

Windows NT の RID から UNIX の ユーザー/グループ ID へのマッピング情報の保管場所。 ロックディレクトリは、Samba のコンパイル時に --with-lockdir オプションを用いて指定する。 このディレクトリの既定値は /usr/local/samba/var/locks である。

$LOCKDIR/winbindd_cache.tdb

キャッシュされたユーザー/グループ情報の保管場所。