SambaをWindowsのActive DirectoryやNTドメインに参加させる場合,一般的にはwinbindによるユーザー管理機能を利用します。

 winbindは,Windowsに登録されているユーザー情報を基に,LinuxなどのUNIX上でユーザーアカウントを自動生成することができます。そのため,WindowsとLinuxが混在するような環境下で,Windowsサーバー側でユーザー管理を統一したい場合に非常に便利な機能です。


図1●winbind連携機能によるユーザー管理の一元化

 このWinbind機能を用いて,Linux側にユーザーアカウントを生成する際に問題となるのが,ユーザーアカウントを識別するUIDの割り当て方です。Windowsではセキュリティ識別子(SID)と呼ばれるIDを用いているため,そのままUIDとして割り振ることができません。

 そこで,通常のwinbindの設定では,Windowsサーバーから取得したユーザー情報の順番にしたがって,smb.confの”idmap uid”パラメータで指定された範囲のUIDを小さい番号から順番に割り当て,winbindのキャッシュファイルに登録しておきます。

 Sambaサーバーが1台のみの場合は,この方法でWindowsのSIDとLinuxのUIDのマッピングを一意に固定することができます。


図2●winbindによるSIDとUIDのマッピング

 しかし,Sambaサーバーが複数台存在する場合,Windowsサーバーからユーザー情報を取得するタイミングによって,それぞれのSambaサーバー上のユーザーアカウントに割り当てられるUIDが異なる可能性が発生します。

 そこで,Sambaサーバー間でのUIDの不一致という事態を防ぐために,idmap_rid機能を利用することができます。idmap_rid機能は,SIDの数値を基にUIDの値を計算して決定するという仕組みになっています。

 idmap_rid機能を利用する場合には,smb.confに次のような設定を追加します。

[global]
Sambaの基本設定
idmap uid = 1000-100000
idmap gid = 1000-100000
idmap backend = rid:DOMAINNAME=1000-9999

 上記の設定では,DOMAINNAMEに所属するユーザーをUID 1000~9999の間に割り当てるという設定となっています。

 実際に割り当てられるUIDは,SIDを基に決められます。

 例えば,SIDがS-1-5-21-xxxx-yyyy-zzzz-1116として割り当てられているユーザーのUIDは,idmap backendに設定した数値の初期値 1000と,SIDの最後の数値 1116を足した 2116が割り当てられます。

 このように,SIDを基にした計算式によって,UIDが決定されるため,複数のSambaサーバーでwinbindを利用していても,UIDの不一致を防ぐことができます。


図3●idmap_ridによるUIDマッピングの統一

 Windows環境に複数のLinuxサーバーなどを統合させたい場合には,このidmap_rid機能を用いることで,ユーザーアカウントが管理しやすくなると思いますので,検討してみてください。

■著者紹介 武田保真(たけだ やすま)
2006年9月より,オープンソース・ソリューション・テクノロジ株式会社にて,Samba,LDAPなどのソリューション展開を進行中。前職では,Samba国際化プロジェクトに携わるなど,Sambaのソースコードの解析,トラブルシューティングなどを経験した他,Linuxカーネルのダンプ解析などLinuxディストリビューションに関して深く関わってきた。著書に『徹底解説 Samba LDAPサーバー構築』(技術評論社)。