idmap_script — Windows 向け Samba idmap_script バックエンド
idmap_script プラグインは、Samba とCTDB を使う、クラスタ環境中において、 SID/uid/gid マッピングテーブルを格納するために winbindd によって使われる、 idmap_tdb2 バックエンド用の代替である。これはマッピングを実行するための スクリプトとして使う、リードオンリのバックエンドである。
これは、idmap_tdb2 バックエンドとは別に開発され、TDB 中に SID/uid/gid マッピングを格納しないので、 winbind_cache tdb は それらが提供されると、マッピングを格納する。
バックエンドが権限を持つ、利用可能な uid と gid のマッチング範囲 を定義する。
このオプションは、id マッピングを実行するための外部プログラムを 設定するために使う事ができる。
tdb2 idmap バックエンドは、${prefix}/etc/smb.conf
のオプション
idmap config * : script
または、廃止予定の古い形式
idmap : script
を使って、id マッピングを実行するための
外部プログラムをサポートする。
スクリプトは以下のコマンドラインオプションを受け取れなければならない。
SIDTOID S-1-xxxx IDTOSID UID xxxx IDTOSID GID xxxx IDTOSID XID xxxx
さらに、1行のテキストとして、以下のレスポンスのどれかを返さねばならない。
UID:yyyy GID:yyyy XID:yyyy SID:ssss ERR:yyyy
XID は UID と GID 両方の ID であることを示す。すなわち、これは、 ID_TYPE_BOTH を必要とするが、それは最終的に、その要求が信頼出来るか についてはスクリプトに任されている。それは、UID または GID マッピングのみを 返すことも選べる。
これは、スクリプトパラメータ経由で、外部プログラムを使う既定値の idmap バックエンドが、 どのようにスクリプトが使われるかを示している。
[global] idmap config * : backend = script idmap config * : range = 1000000-2000000 idmap config * : script = /usr/local/samba/bin/idmap_script.sh
これはタスクの一部を実行する簡単なスクリプトである:
#!/bin/sh # # Uncomment this if you want some logging #echo $@ >> /tmp/idmap.sh.log if [ "$1" == "SIDTOID" ] then # Note. The number returned has to be within the range defined #echo "Sending UID:1000005" >> /tmp/idmap.sh.log echo "UID:1000005" exit 0 else #echo "Sending ERR: No idea what to do" >> /tmp/idmap.sh.log echo "ERR: No idea what to do" exit 1 fi
はっきりとしていることは、 もしも、入ってきた SID がユーザかグループ SID かを決めるため、 wbinfo をおそらく使い、テーブル中でマッピングを検索するか、 SID から UID へのマッピングなどのための、他のいくつかのメカニズムを使う ので、このスクリプトは、完全ではない。
スクリプトは _NO_WINBINDD 環境変数を 1 に設定された状態で呼び出される
ことに留意すること。これにより、スクリプトから、明示的な wbinfo の呼び出しと、
暗黙の nss_winbind 経由による呼び出し両方において、winbind の
再帰呼び出しを抑制する。
たとえば、 ls -l
を実行すると、無限の再帰
を引き起こしてしまう。
idmap script 内で wbinfo -n
と、
wbinfo -s
を呼び出すことは安全である。
これを行う場合、再帰を防ぐために、スクリプトは wbinfo
を呼び出す直前に、_NO_WINBINDD 環境変数を 設定解除し、
wbinfo
から戻ってきた直後に、
再度値を 1 にしなければならない。