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}
このツールは 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(5) ファイルに格納された 伝統的なユーザ情報で、 getpwent(3) 関数によって取得される。
group(5) ファイルに格納された 伝統的なグループ情報で、 getgrent(3) 関数によって取得される。
例えば、以下のように、 /etc/nsswitch.conf ファイルに簡単な設定を行なうことで、 まずユーザやグループの情報を /etc/passwdや /etc/group から取得しようとし、 ついで、 それらを Windows NT のサーバから取得しようとするようになる。
passwd: files winbind group: files winbind
debuglevel を 0 から 100 の数値で指定する。 0 の場合情報を全く出力しない。 100 の場合本当に大量に出力する。 Samba Team にバグレポートを提出する際には、 debug level 100 を使用すること(BUGS.txt を参照のこと)。
winbindd がデーモンとなって現在の端末から切り離されないようにする。 このオプショは、 開発者が対話的にwinbindd のデバッグを行なうことが必要な場合に用いられる。
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が認識することはできなくなってしまう。
winbindd デーモンの設定は smb.conf(5) ファイルの設定パラメータによって行なわれる。 全てのパラメータの設定は、 smb.conf ファイルの [global] セクションで行なわれる。
winbind separator オプションは、 NTドメイン名とユーザ名をUNIXのユーザ名に対応づける際の 方式を指定する。 デフォルトで、 winbindd は伝統的な '\' をセパレータとして利用するため、 UNIXのユーザ名はDOMAIN\usernameのような形式になる。 '\' の文字はUNIXのシェルで特別な意味を持っているため、 特定のケースで、 このセパレータ文字は問題を引き起こすことがある。 そうしたケースでは、 winbind separator オプションを用いることで 別の文字をセパレータ文字に指定することが可能である。 よい候補としては '/' (これは UNIX のディレクトリ識別子と競合する) や '+' 文字などがあげられる。 '+' 文字は、 UNIX ユーティリティとの互換性が 100% であるため よい選択なように見えるが、 あなたの嗜好によっては、 美学的によろしくない選択になるかも知れない。
デフォルト: winbind separator = \
設定例: winbind separator = +
winbind uid パラメータは winbindd デーモンが割り当てるユーザIDの範囲を指定する。 予期しない競合が発生しないようにするため、 このユーザIDの範囲に ローカルなユーザやNISのユーザが存在しないようにすること。
デフォルト: winbind uid = <empty string>
設定例: winbind uid = 10000-20000
winbind gid パラメータは、winbindd デーモンが割り当てるグループIDの範囲を指定する。 予期しない競合が発生しないようにするため、 このグループIDの範囲に ローカルなグループやNISのグループが存在しないようにすること。
デフォルト: winbind gid = <empty string>
設定例: winbind gid = 10000-20000
このパラメータは、winbindd デーモンが Windows NT サーバに問い合わせを行なわずに ユーザとグループの情報をキャッシュする時間を秒単位で指定する。 キャッシュ中の情報が古くなると、 winbindd はドメインコントローラに対して サーバ上のアカウントデータベースのシーケンス番号を問い合わせる。 シーケンス番号が変更されていなかった場合、 キャッシュされた情報は、更に winbind cache time で設定された 秒数の間有効であると記録される。 それ以外の場合、情報はサーバから再度取得される。 これにより、 アカウントデータベースに実質的な変更がない限り、 winbindd は winbind cache time で設定した秒数毎に シーケンス番号の問い合わせパケットを一つ送出するだけですむ。
デフォルト: winbind cache time = 15
非常に大規模な環境下では setpwent(), getpwent() や endpwent() といったシステムコール群の呼び出しによる ユーザの一覧取得を抑止する必要があるかも知れない。 winbind enum users パラメータが false の場合、 getpwent システムコールの呼び出しは 全くデータを返却しない。
警告: ユーザ一覧(enumeration)を無効にすると幾つかのプログラ ムについては異常動作を引き起こす恐れがある。 例えば、finger プログラムは、 全てのユーザのリストにアクセスできる前提で、 ユーザ名のマッチングを行なっている。
デフォルト: winbind enum users = yes
非常に大規模な環境下では setgrent(), getgrent() や endgrent() といったシステムコール群の呼び出しによる ユーザの一覧取得を抑止する必要があるかも知れない。 winbind enum groups パラメータが false の場合、 getpwent システムコールの呼び出しは 全くデータを返却しない。
警告: グループ一覧(enumeration)を無効にすると幾つかのプログラ ムについては異常動作を引き起こす恐れがある。
デフォルト: winbind enum groups = no
Windows NT のユーザに対する ユーザ情報を作成する際に、 winbindd デーモンは このパラメータによってユーザのホームディレクトリの位置を設定する。 文字列 %D があれば、 ユーザのWindows NTにおけるドメイン名に置き換えられる。 文字列 %U があれば、 ユーザのWindows NTにおけるユーザ名に置き換えられる。
デフォルト: template homedir = /home/%D/%U
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 デーモンを操作するために 利用可能である。
smb.conf(5) ファイルを再読み込みさせて、 実行中の winbindd にパラメータの変更を反映させる。 このシグナルにより、ユーザとグループ情報のキャッシュも クリアされる。 wibindd が信頼するドメインのリストも、 同様に再読み込みされる。
SIGUSR1 シグナルにより、 winbindd は、 割り当てたユーザとグループIDに関する情報とともに、 ステータス情報を winbind ログファイルに書き込む。
ログファイルは log file パラメータで指定されたファイル名のファイルに書き込まれる。
Name service switch の設定ファイルである
クライアントが winbindd プログラムと通信するための UNIX のパイプである。 セキュリティ上の理由で winbind クライアントは /tmp/.winbindd ディレクトリと /tmp/.winbindd/pipe ファイルの両方の所有者が root の時のみ winbindd デーモンとの接続を行なおうとする。
name service switchライブラリの実体である。
Windows NT の rid と UNIXのユーザやグループIDとのマッピングを格納する ロックディレクトリ($LOCKDIR)はSambaのコンパイル時に --with-lockdir オプションを用いることで 設定でき、 デフォルトでは/usr/local/samba/var/locks である。
キャッシュされたユーザとグループの情報を格納する