オレンジのトップページ

2016年2月27日土曜日

Samba4 - Samba4AD間でUID/GIDを共通化する方法・・・samba4.3.5でUNIX属性を設定しても反映されない(2018/10/31追記)

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を共通化させる方法が知られていますがこの場合sam.ldbが追加で使われます。ところが今回検証したsamba4.3.5でユーザやグループに対してUNIX属性を設定してUID/GIDを設定しても sam.ldbに必要な行が追加されないため反映されませんでした。(2018/10/31追記) 以来新規のSamba4ドメインコントローラでUNIX属性を付加することを試していないので、4.3.5のバグだったか、新しい4.8.5でもそうなのかは不明です。



方法は2つ。いや3つで3つ目が小規模環境では本命?


方法1:sam.ldb の既存該当ユーザやグループのエントリに、objectClass: posixAccount (ユーザ)objectClass: posixGroup (グループ)の行を追加する。
Windows端末のユーザ管理ツール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属性を付けて作成する場合も同じようにします


ここまで確認するのたいへんだった。。。。方法1はこんなの毎回やってられないし、方法2は現場の管理者がLinuxを使えるとは限らないしで現実的じゃないですね。こんな気を使わないといけないのなら、ADDCサーバ間ではUID/GIDは異なるもの。として構成するほうがまだ楽ですね。

うわ。

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

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



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

手順
    1.sambaを停止
    2./usr/local/samba/private/idmap.ldbを1台目のADサーバから 2台目のADサーバに上書きコピー
    3./usr/local/samba/var/cache フォルダを削除(重要)
    4.sambaを起動

・・・・うまく動いてくれてます。
もうこれでいいや。



(参考)
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属性が反映されない