winbindd — NT サーバからの名前解決を行う Name Service Switch (NSS)デーモン
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 データベースを実装している:
もしも指定されたならば、このパラメータは、サーバをデーモンとして動かす。
すなわち、それ自身をデタッチして、適合したポート上でバックグラウンドとして動く。
このスイッチは、もしも、winbindd
がシェルのコマンド行上で実行された事を仮定する。
これは、 IRIX でのみ有効である。
ユーザ情報(訳注: ホスト情報だと思われる)は、伝統的に
hosts(5)
ファイルに格納され、
gethostbyname(3)
関数によって取得される。
名前解決は WINS サーバ経由か、ブロードキャストによって行われる。
ユーザ情報は、伝統的に
passwd(5)
ファイルに格納され、
getpwent(3)
関数によって取得される。
グループ情報は、伝統的に
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
このパラメータを指定すると、
winbindd
のメインプロセスがデーモンとして動作しなくなる。
つまり、
2 回の fork(2)
と端末からの切り離しを行なわない。
接続要求を処理するための子プロセスは通常どおり生成されるが、
メインプロセスは終了しない。
この動作モードは、
Daniel J. Bernstein 作の daemontools
パッケージに含まれる
supervise
と svscan
や、
AIX のプロセスモニタなどのプロセス監視機構配下で
winbindd
を動作させるためのものである。
このパラメータを指定すると、
winbindd
はファイルの代わりに標準出力にログを出力するようになる。
level
is an integer
from 0 to 10. The default value if this parameter is
not specified is 0.
The higher this value, the more detail will be logged to the log files about the activities of the server. At level 0, only critical errors and serious warnings will be logged. Level 1 is a reasonable level for day-to-day running - it generates a small amount of information about operations carried out.
Levels above 1 will generate considerable amounts of log data, and should only be used when investigating a problem. Levels above 3 are designed for use only by developers and generate HUGE amounts of log data, most of which is extremely cryptic.
Note that specifying this parameter here will
override the parameter
in the smb.conf
file.
Prints the program version number.
The file specified contains the
configuration details required by the server. The
information in this file includes server-specific
information such as what printcap file to use, as well
as descriptions of all the services that the server is
to provide. See smb.conf
for more information.
The default configuration file name is determined at
compile time.
Base directory name for log/debug files. The extension
".progname"
will be appended (e.g. log.smbclient,
log.smbd, etc...). The log file is never removed by the client.
Print a summary of command line options.
winbindd
にデーモンとしての動作と端末からの切り離しを行なわないように指示する。
このオプションは、
winbindd
の対話的なデバッグが必要な開発者のためのものである。
この際、-S
パラメータが指定されたときと同じく、ログは標準出力に出力される。
キャッシュを無効にする。これにより、
winbindd
は、
クライアントに応答する前にドメインコントローラからの応答を毎回待たなければならず動作が遅くなるが、
キャッシュを使用しなくなるため、より厳密な結果を得られるようになる。
なお、ドメインコントローラが応答するまで
winbindd
は処理を停止してしまう。
単一デーモンモード。
winbindd
は単一のプロセスだけで動作する
(Samba 2.2 での動作モード)。
winbindd
のデフォルトの動作では、
期限切れのキャッシュエントリの更新を行う子プロセスが起動される。
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] セクション内に記述しなければならない。
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
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
デーモンを操作することが
可能である。
smb.conf(5)
ファイルを再読み込みさせ、
実行中の winbindd
にパラメータの変更を反映させる。
このシグナルにより、
ユーザ情報とグループ情報のキャッシュもクリアされる。
また、winbindd が信頼するドメインの一覧も再取得される。
ステータス情報を winbindd
のログファイルに書き込ませる。
ログファイルは、 log file パラメータで指定したファイルである。
/etc/nsswitch.conf(5)
ネームサービススイッチの設定ファイル。
クライアントが
winbindd
と通信するための UNIX パイプ。
セキュリティ上の理由で、
/tmp/.winbindd
ディレクトリと
/tmp/.winbindd/pipe
ファイルの両方の所有者が root 以外の場合、クライアントは
winbindd デーモンとの接続を行なわない。
winbind の「特権」クライアントが
winbindd
と通信するための UNIX パイプ。
セキュリティ上の理由で、
winbindd のいくつかの機能
(ntlm_auth
ユーティリティが必要とする機能など)
へのアクセスは制限されており、
デフォルトでは、
「root」グループに属するユーザだけがアクセスできる。
管理者が $LOCKDIR/winbindd_privileged
のグループパーミッションを変更することで、
「squid」などのプログラムが ntlm_auth を利用できるようにすることなどが可能である。
$LOCKDIR/winbindd_privileged
ディレクトリと
$LOCKDIR/winbindd_privileged/pipe
ファイルの両方の所有者が root 以外の場合、winbindクライアントは
winbindd デーモンとの接続を行なわない事に注意。
ネームサービススイッチライブラリの実体。
Windows NT の RID から
UNIX の ユーザ/グループ ID へのマッピング情報の保管場所。
ロックディレクトリは、Samba のコンパイル時に
--with-lockdir
オプションを用いて指定する。
このディレクトリの既定値は
/usr/local/samba/var/locks
である。
キャッシュされたユーザ/グループ情報の保管場所。