# 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 によって行なわれた。