## 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 はドメインコントローラとの通信を行い、 `smbd` 、`ntlm_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` モジュールは、 `auth` 、 `account` 、 `password` の各モジュールタイプをサポートしている。 `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` パッケージに含まれる `supervise` と `svscan` や、 AIX のプロセスモニタなどのプロセス監視機構配下で `winbindd` を動作させるためのものである。

-S

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

-d|--debuglevel=level

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

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

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

  このパラメータの指定は、`smb.conf`ファイル中の、 パラメータの 指定よりも優先する。

-V

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

-s <configuration file>

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

-l|--log-basename=logdirectory

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

-h|--help

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

-i

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

-n

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

-Y

  単一デーモンモード。 `winbindd` は単一のプロセスだけで動作する (Samba 2.2 での動作モード)。 `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) との対応を確認する手段はない。

このデータベースを LDAP などで共有するオプションについては、 `smb.conf` ファイルの idmap domainsか、古い idmap backend パラメータを参照のこと。

## 設定

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

- winbind separator

- idmap uid

- idmap gid

- idmap backend

- winbind cache time

- winbind enum users

- winbind enum groups

- template homedir

- template shell

- winbind use default domain

- 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

### 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 passwd` と `getent 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

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

## バージョン

このマニュアルは、Samba システムのバージョン 3 に適用される。

## 参照

`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 3.2.4-3.2.15 対応のものである。

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

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

さとうふみやす

によって行なわれた。

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