# winbindd

## Name

winbindd -- NT サーバから名前情報を取得するための Name Service Switch デーモン

## Synopsis

winbindd [-d debuglevel] [-i] [-S] [-r] [-A] [-h] [-B <broadcast address>] [-U <unicast address>] [-d <debug level>] [-s <smb config file>] [-i <NetBIOS scope>] [-T] {name}

## DESCRIPTION

このツールは Samba 3.0 の一部であり、以下で説明する機能は、 現在のバージョンの Samba にはまだ実装されていない。

winbinddは、 最近のCライブラリのほとんどに実装されている Name Service Switch 機能を提供するデーモンである。 Name Service Switch 機能により、 ユーザ上とシステム情報をNISやDNSのように、 異なるデータベースサービスから取得することができるようになる。 動作の詳細は、 `/etc/nsswitch.conf` ファイルによって設定することができる。 ユーザとグループは、名前の解決が行なわれた時点で、 Sambaシステムの管理者によって指定されたユーザとグループIDの領域から IDを割り当てられる。

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

winbindd サービスは、 以下の nsswitch データベース用に実装されている:

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

## OPTIONS

-d debuglevel

  debuglevel を 0 から 100 の数値で指定する。 0 の場合情報を全く出力しない。 100 の場合本当に大量に出力する。 Samba Team にバグレポートを提出する際には、 debug level 100 を使用すること(BUGS.txt を参照のこと)。

-i

  winbindd がデーモンとなって現在の端末から切り離されないようにする。 このオプショは、 開発者が対話的にwinbindd のデバッグを行なうことが必要な場合に用いられる。

## NAME AND ID RESOLUTION

Windows NTのサーバ上にあるユーザとグループは、 ユーザやグループの作成時にドメイン内で一意な rid(relative id)を付与される。 Windows NTのユーザやグループをUNIXのユーザやグループに変換するためには、 ridとUNIXのユーザやグループIDとのマッピングが必要となる。 これはwinbindd の行なう作業の一つである。

ユーザとグループIDがサーバで解決された際に、 winbinddによって ユーザとグループIDは指定された領域から割り当てられる。 この処理は、 最初にアクセスがあり、サービスが提供された時点で行なわれるため、 クライアントがユーザやグループの一覧(enumeration)コマンドを発 行した時点で、 存在する全てのユーザとグループのマッピングが行なわれる。 割り当てられたUNIX側のIDは Samba側のlockディレクトリ以下に置かれたデータベースに格納され、 記憶される。

警告: ridからUNIXのIDへマッピングを行なうこのデータベースは、 winbinddがユーザとグループのマッピングを格納する 唯一のファイルである。 このファイルが削除されたり壊れたりすると、 どのWindows NTユーザやグループのridに対応しているかを winbinddが認識することはできなくなってしまう。

## CONFIGURATION

winbindd デーモンの設定は `smb.conf(5)` ファイルの設定パラメータによって行なわれる。 全てのパラメータの設定は、 smb.conf ファイルの [global] セクションで行なわれる。

winbind separator

  winbind separator オプションは、 NTドメイン名とユーザ名をUNIXのユーザ名に対応づける際の 方式を指定する。 デフォルトで、 winbindd は伝統的な '\' をセパレータとして利用するため、 UNIXのユーザ名はDOMAIN\usernameのような形式になる。 '\' の文字はUNIXのシェルで特別な意味を持っているため、 特定のケースで、 このセパレータ文字は問題を引き起こすことがある。 そうしたケースでは、 winbind separator オプションを用いることで 別の文字をセパレータ文字に指定することが可能である。 よい候補としては '/' (これは UNIX のディレクトリ識別子と競合する) や '+' 文字などがあげられる。 '+' 文字は、 UNIX ユーティリティとの互換性が 100% であるため よい選択なように見えるが、 あなたの嗜好によっては、 美学的によろしくない選択になるかも知れない。

  デフォルト: winbind separator = \

  設定例: winbind separator = +

winbind uid

  winbind uid パラメータは winbindd デーモンが割り当てるユーザIDの範囲を指定する。 予期しない競合が発生しないようにするため、 このユーザIDの範囲に ローカルなユーザやNISのユーザが存在しないようにすること。

  デフォルト: winbind uid = <empty string>

  設定例: winbind uid = 10000-20000

winbind gid

  winbind gid パラメータは、winbindd デーモンが割り当てるグループIDの範囲を指定する。 予期しない競合が発生しないようにするため、 このグループIDの範囲に ローカルなグループやNISのグループが存在しないようにすること。

  デフォルト: winbind gid = <empty string>

  設定例: winbind gid = 10000-20000

winbind cache time

  このパラメータは、winbindd デーモンが Windows NT サーバに問い合わせを行なわずに ユーザとグループの情報をキャッシュする時間を秒単位で指定する。 キャッシュ中の情報が古くなると、 winbindd はドメインコントローラに対して サーバ上のアカウントデータベースのシーケンス番号を問い合わせる。

  シーケンス番号が変更されていなかった場合、 キャッシュされた情報は、更に `winbind cache time`で設定された 秒数の間有効であると記録される。 それ以外の場合、情報はサーバから再度取得される。 これにより、 アカウントデータベースに実質的な変更がない限り、 winbindd は `winbind cache time`で設定した秒数毎に シーケンス番号の問い合わせパケットを一つ送出するだけですむ。

  デフォルト: winbind cache time = 15

winbind enum users

  非常に大規模な環境下では setpwent(), getpwent() や endpwent() といったシステムコール群の呼び出しによる ユーザの一覧取得を抑止する必要があるかも知れない。 `winbind enum users` パラメータが false の場合、 getpwent システムコールの呼び出しは 全くデータを返却しない。

  警告: ユーザ一覧(enumeration)を無効にすると幾つかのプログラ ムについては異常動作を引き起こす恐れがある。 例えば、finger プログラムは、 全てのユーザのリストにアクセスできる前提で、 ユーザ名のマッチングを行なっている。

  デフォルト: winbind enum users = yes

winbind enum groups

  非常に大規模な環境下では setgrent(), getgrent() や endgrent() といったシステムコール群の呼び出しによる ユーザの一覧取得を抑止する必要があるかも知れない。 `winbind enum groups` パラメータが false の場合、 getpwent システムコールの呼び出しは 全くデータを返却しない。

  警告: グループ一覧(enumeration)を無効にすると幾つかのプログラ ムについては異常動作を引き起こす恐れがある。

  デフォルト: winbind enum groups = no

template homedir

  Windows NT のユーザに対する ユーザ情報を作成する際に、 winbindd デーモンは このパラメータによってユーザのホームディレクトリの位置を設定する。 文字列 `%D` があれば、 ユーザのWindows NTにおけるドメイン名に置き換えられる。 文字列 `%U` があれば、 ユーザのWindows NTにおけるユーザ名に置き換えられる。

  デフォルト: template homedir = /home/%D/%U

template shell

  Windows NT のユーザに対する ユーザ情報を作成する際に、 winbindd デーモンは このパラメータによってユーザのシェルを設定する。

  デフォルト: template shell = /bin/false

## 設定例

ユーザやグループ情報の参照や ドメインコントローラでの認証を行なうために winbindd を設定する場合は、 以下のような設定を行なうことになる。 この設定は Red Hat Linux 6.2 で確認している。

`/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_pwdb.so use_first_pass shadow nullok

`sufficient` キーワードと `use_first_pass` キーワードの利用に特に注意すること。

ここで account 行を以下のように置き換える:

account required /lib/security/pam_winbind.so

次のステップはドメインへの参加である。 これは samedit プログラムを用いて、 以下のようにして行なう:

samedit -S '*' -W DOMAIN -UAdministrator

`-U` パラメータに続くユーザ名は、そのマシン上で administrator 権限のあるユーザであれば誰でもよい。 引続き、 samedit コマンド上で、 以下のコマンドを実行する:

createuser MACHINE$ -j DOMAIN -L

これは、ドメイン名が "DOMAIN"、Samba マシンの名前が "MACHINE" の場合の例である。

次に `libnss_winbind.so.2` を `/lib` に、`pam_winbind.so` を `/lib/security` に各々コピーする。

最後に、smb.conf に以下のようなディレクティブが含まれるように設定を行なう:

    [global]
    	winbind separator = +
            winbind cache time = 10
            template shell = /bin/bash
            template homedir = /home/%D/%U
            winbind uid = 10000-20000
            winbind gid = 10000-20000
            workgroup = DOMAIN
            security = domain
            password server = *

ここで winbindd を起動し、 ユーザとグループデータベースにNT側のユーザやグループが含まれていることと、 DOMAIN+user形式のユーザ名を用いることで、 UNIXマシンにドメインのユーザとして、ログオンできることを確認する。 getent passwd と getent group コマンドを使って、winbindd が適切な動作を行なってい ることを確認することもできる。

## メモ

以下のメモは winbinddを設定したり実行したりする際に 有用である:

winbindd が動作するには、同じマシン上で nmbdが実行されている必要がある。 winbinddは、 起動時と SIGHUP シグナルを受信した時に Windows NT サーバに信頼するドメインのリストを問い合わせる。 そのため、実行中の winbindd に新しいサーバ間の信頼関係を認識させるためには、 SIGHUP シグナルを送る必要がある。

winbinddの nsswitch モジュールによって 名前の解決を行なうクライアントプロセスは、 `$WINBINDD_DOMAIN` という名前の環境変数を読みとる。 この変数にはコンマで区切られた Windows NTのドメイン名が 含まれており、winbindd はここに記述された Windows NT のドメインに対してのみ、ユーザとグループ名の解決を 行なおうとする。

PAM は、簡単に誤った設定が行なわれてしまう。 PAM の設定ファイルを修正する際は、 何を行なっているかをきちんと確認すること。 PAM の設定を誤ることで、 誰もシステムにログインできなくなってしまうこともあり得る。

複数の UNIX マシンが winbindd を実行していた場合でも、 通常 winbindd によって割り当てられるユーザやグループIDが 同一にはならない。 ユーザやグループのIDはローカルマシン内でのみ有効である。

Windows NT の rid から UNIX のユーザやグループIDへのマッピングファイルが壊れたり なくなったりした場合、このマッピング情報は失われる。

## シグナル

以下のシグナルが winbindd デーモンを操作するために 利用可能である。

SIGHUP

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

SIGUSR1

  SIGUSR1 シグナルにより、 winbindd は、 割り当てたユーザとグループIDに関する情報とともに、 ステータス情報を winbind ログファイルに書き込む。

  ログファイルは log file パラメータで指定されたファイル名のファイルに書き込まれる。

## ファイル

`/etc/nsswitch.conf(5)`

  Name service switch の設定ファイルである

/tmp/.winbindd/pipe

  クライアントが winbindd プログラムと通信するための UNIX のパイプである。 セキュリティ上の理由で winbind クライアントは `/tmp/.winbindd` ディレクトリと `/tmp/.winbindd/pipe` ファイルの両方の所有者が root の時のみ winbindd デーモンとの接続を行なおうとする。

/lib/libnss_winbind.so.X

  name service switchライブラリの実体である。

$LOCKDIR/winbindd_idmap.tdb

  Windows NT の rid と UNIXのユーザやグループIDとのマッピングを格納する ロックディレクトリ($LOCKDIR)はSambaのコンパイル時に `--with-lockdir` オプションを用いることで 設定でき、 デフォルトでは`/usr/local/samba/var/locks` である。

$LOCKDIR/winbindd_cache.tdb

  キャッシュされたユーザとグループの情報を格納する

## VERSION

このマニュアルページは Samba バージョン 2.2 一式用である。 ただし、winbindd は Samba の正式なリリース版にまだ含まれていない。

## 参照

`nsswitch.conf(5)`, samba(7), wbinfo(1), smb.conf(5)

## AUTHOR

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

wbinfo および winbindd は Tim Potter によって書かれた。

Samba 2.2 における DocBook 形式への変換は、 Gerald Carter によって行なわれた。