オレンジのトップページ

2016年2月27日土曜日

Samba4 - samba4.3.5でUNIX属性を設定しても反映されない

OSC TOKYO/Spring 2016 が、2/26(金),27(土)と開催されています。たかはしもとのぶさんのセミナーを聞きたかったのですが、風邪をひいたりして、今回も行けずじまいです。そういうわけでもないのですが久しぶりのsamba4の話。

Samba 4 の標準ではWindowsのユーザ識別SIDをUnixのUID/GIDに対応させるため、idmap.ldbに記録されるxidNumberを使いますが、idmap.ldbはサーバごとに異なり同期もされませんので、ドメインコントローラーごとにUID/GIDが異なります。

ユーザにUNIX属性を追加することでサーバ間でUID/GIDを共通化させる方法が知られています。ところが今回検証したsamba4.3.5でユーザやグループに対してUNIX属性を設定してUID/GIDを書き込んでも反映されません。



方法は2つ。


方法1:sam.ldb の既存該当ユーザやグループのエントリに、objectClass: posixAccount (ユーザ)objectClass: posixGroup (グループ)の行を追加する。
RSATでユーザやグループ登録したとき。またコマンドラインから、samba-tool user add USERNAMEやsamba-tool group add GROUPNAMEでUNIX属性なしで登録したときは、UNIX属性をRSATで与えると同時に、sam.ldbに手動でobjectClass: posixAccount(ユーザ)や、objectClass: posixGroup(グループ) の行を追加します。

注意としては、sambaの生DBを編集するから編集時にはsambaを停止しておいたほうが良さそうなのと、キャッシュを削除して再起動しないと(すぐに)反映されないことです。

    1.sambaを停止
    2.ldbedit -H /usr/local/samba/private/sam.ldb として該当ユーザエントリに、objectClass: posixAccountを。グループの場合は該当グループエントリにobjectClass: posixGroup を追加。
    3./usr/local/samba/var/cache フォルダを削除
    4.sambaを起動


該当ユーザもしくはグループのエントリxidNumbarが/usr/local/samba/private/idmap.ldbに残りますが参照されなくなります。ゴミとして残ったエントリは次のようにして削除できます。

*ユーザのSIDを調べる
wbinfo --name-to-sid USERNAME
S-1-5-21-4036476082-4153129556-3089177936-1005 SID_USER (1)

*該当SIDをxidNumberに対応させるidmap.ldbのエントリから消す。
ldbdel --url=/usr/local/samba/private/idmap.ldb CN=S-1-5-21-4036476082-4153129556-3089177936-1005



方法2:最初からUNIX属性を付けてsamba-toolでユーザもしくはグループの登録をする。
この方法だと、sam.ldbに objectClass: posixAccount もしくは posixGroupの行が一緒に登録されます。また使、/usr/local/samba/private/idmap.ldbに、該当ユーザもしくはグループのxidNumbarエントリが作られません。

(ユーザをUNIX属性を付けて作成する例)
samba-tool user add shuichi10 --nis-domain=orange.orange4.net --uid-number=90000 --login-shell=/bin/false --unix-home=/home/ORANGE/shuichi10  --gid-number=99000

*グループにUNIX属性を付けて作成する場合も同じようにします




ここまで気を使わないといけないのなら、ADDCサーバ間ではUID/GIDは異なるもの。として構成するほうがまだ楽ですね。

「Windows Server 2012 で削除された機能または推奨されなくなった機能-UNIX ベース アプリケーション用サブシステム (SUA) は推奨されなくなりました。
https://technet.microsoft.com/ja-jp/library/hh831568.aspx

なんて情報もありますから。

別のアプローチですが、xidの記録されている/usr/local/samba/private/idmap.ldbを1台目のADサーバから 2台目のADサーバに上書きコピーするだけでも、複数のAD間でUID/GIDが共通化されます。予期しない不具合があるかもしれないのが不安ですが、 RFC2307を有効にする必要もありませんし、ユーザ管理作業を常に1台目に対して行うことにすれば問題がない気もしますがどうなんでしょう。


(参考)
Adding users with samba tool
https://wiki.samba.org/index.php/Adding_users_with_samba_tool

Samba 4.0.0のDC上でUID/GIDの値にUNIX属性が反映されない
http://wiki.samba.gr.jp/mediawiki/index.php?title=Samba 4.0.0のDC上でUID/GIDの値にUNIX属性が反映されない