Name

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

Synopsis

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

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

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

オプション

-D|--daemon

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

-F|--foreground

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

-S|--stdout

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

-d|--debuglevel=level

level は0から10までの整数値である。 既定値の値は、パラメーターが設定されていなければ0である。

この値を大きくするほど、サーバーの動作に関するより詳細な情報が ログファイルに記録される。レベル 0 では、致命的なエラーと重大な警告 のみが記録される。レベル 1 は日々の運用に適しており、少量の稼働状況 に関する情報を生成する。

1 より上のレベルは大量のログが生成されるので、問題解決の時にのみ 使用すべきである。 3 より上のレベルは開発者だけが利用するように設計されて おり、莫大な量のログデータが生成される。そのほとんどは非常に謎めいた内容 となっている

このパラメーターの指定は、smb.conf ファイル中の、 log level パラメーターの 指定よりも優先する事に注意。

-V|--version

プログラムのバージョン番号を表示する。

-s|--configfile=<configuration file>

サーバーが必要とする詳細な設定を含む設定ファイルを 指定する。このファイルには、サーバーが提供するサービスに関する記述や、 どの printcap ファイルを利用するかといった情報が含まれている。詳細は smb.conf を参照のこと。設定ファイルの名前の既定値は、コンパイル時 に決定される。

-l|--log-basename=logdirectory

ログ/デバッグファイルのファイル名。拡張子として ".progname" が追加される(例えば log.smbclient, log.smbd,など)。ログファイルはクライアントによって削除されることはない。

-?|--help

コマンドラインオプションの要約を表示する。

--usage

簡単な使用法を表示する。

-i|--interactive

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

-n|--no-caching

いくつかのキャッシュを無効にする。これにより、 winbindd は、 クライアントに応答する前にドメインコントローラーからの応答を時々待たなければならず動作が遅くなるが、 キャッシュを使用しなくなるため、より厳密な結果を得られるようになる。 なお、ドメインコントローラーが応答するまで winbindd は処理を停止してしまう。 これは、信頼関係にある環境(trusted environments)で、グループメンバーシップの トラックのために必要とされるsamlogon キャッシュを無効にはしない。

--no-process-group

winbinddのために、新しいプロセスグループを作成しない。

名前と ID の解決

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] セクション内に記述しなければならない。

設定例

ユーザーとグループ名の解決と認証をドメインコントローラーで行うには、 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 config * : range = 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 はマシン毎に異なる。 idmap config * : backendパラメーターで、情報を共有する設定を行わない限り、 ユーザー 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

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

バージョン

このマニュアルは、Samba システムのバージョン 3 (訳注 4.x?)に適用される。

参照

nsswitch.conf(5), samba(7), wbinfo(1), ntlm_auth(8), smb.conf(5), pam_winbind(8)

著者

オリジナルの Samba ソフトウェアと関連ユーティリティは、Andrew Tridgell によって作成された。現在 Samba は、Samba Team によって Linux カーネルの開発と同様に、オープンソースプロジェクトとして開発されている。

wbinfo および winbindd コマンドは Tim Potter によって作成された。

Samba 2.2 のための DocBook 形式への変換は Gerald Carter が行った。 Samba 3.0 のための DocBook XML 4.2 形式の変換は Alexander Bokovoy によって行われた。

日本語訳

このマニュアルページは Samba 4.1.4 - 4.1.22に対応する。

このドキュメントの Samba 3.0.24 対応の翻訳は

たかはしもとのぶ (monyo@samba.gr.jp)

さとうふみやす

    によって行なわれた。

    このドキュメントの Samba 3.2.4 - 4.1.22 対応の翻訳は 太田俊哉(ribbon@samba.gr.jp)によって行われた。