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

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