スキップしてメイン コンテンツに移動

samba4 の AD DCのUID/GID マッピングについて

samba4のAD/DCを作成したときに、unix id mappingについて、少しわかりにくかったので、メモとして挙げておきます。

samba4のDC(Domain Controller)は、メンバーマシンとは異なり、ad(rfc2307)やRIDによるunix id mappingがサポートされません。これは、sambaのwikiに記述されています。

https://wiki.samba.org/index.php/Configuring_Winbindd_on_a_Samba_AD_DC

Identity Mapping works different on a Samba domain controller (DC) than on a domain member. For example, setting up an ID mapping back end, such as ad (RFC2307) or rid, in the smb.conf file is not supported an can cause the samba service to fail.

基本的にはDCサーバでは、adやridによるUID/GIDマッピングサービスはサポートしないが、winbindをDCで走らせuid/gid マッピングを使う場合、以下のようになっている様です。

To run Winbindd on a Samba Active Directory (AD) domain controller (DC), in most cases no configuration in the smb.conf file is required.
User and group IDs, are loaded from Active Directory (AD) or automatically generated locally. For details, see Identity Mapping on a Samba Domain Controller.
On a Samba DC, only the winbind template mode is supported. In this mode, all users get:
  • The home directory path assigned, set in the template homedir parameter. The default value of this parameter is /home/%D/%U.
  • The shell assigned, set in the template shell parameter. The default value of this parameter is /bin/false.
To assign the /bin/bash shell and the /home/%U path as home directory path to all domain users provided by Winbindd:
  • Add the following parameters to the [global] section of your smb.conf file:
template shell = /bin/bash
template homedir = /home/%U

結局、DCサーバでwinbinddを走らせてidmappingする場合、smb.confでサポートされるのは、template shell(デフォルトは/bin/false) と template homedir(デフォルトは/hoem/%D/%U)だけで、例えば、samba-tool user createしたときに、--login-shell= --unix-home=で、シェルとホームを指定しても、getent passwd userXXXXでもtemplate shellとtemplate homedirで指定した内容が表示され、(nssitcch.confでwinbindを追加していても) 指定した情報がDC上では反映されません。(debian 10/buster にて確認済)

しかし、member マシンでは、DCサーバとは異なるので、idmap config YOURDOMAIN : backend = adなどがサポートされますので、idmpa config と winbindオプションをsmb.confに適切に設定し、/etc/nsswich.confにwinbindを追加し、winbind libpam-winbind libnss-winbind をインストールしておけば、
$ getent passwd user10000
user10000:*:10000:100::/home/user10000:/bin/bash

$ getent passwd user10001
user10001:*:10001:100::/home/user10001:/bin/sh
のようにsamba-tool user createで指定したshell/homeが表示され、userXXXXでmemberマシン上はログインできる、ということのようです。(同じく debian 10/busterにて確認済。)

つまり、どうしてもDCサーバ上で、samba-toolで作成した linux userを使いたい場合には、前述の templte shell と template homedirをsmb.confに追加し、memberマシンと同様に、/etc/nsswitch.confにwinbindを追加し、winbind, libpam-winbind, libnss-winbindをインストールすれば、templateで指定したhomeとshellでログインはできる、ということです。

まとめると、DCサーバ上では、winbindを使ってlinux/unix userとしてログインして作業は極力しないでください、ということになると思います。セキュリティー的にも、いわれてみればごもっともで、必要ならメンバーサーバを立ち上げれば良いですし、DC内でsamba userではなくlinux userとして作業する必要があるなら、なるべくlocal userを使ってくださいということだ思います。

idmapについて、DCとメンバーマシンで異なる、つまり、挙動もsmb.confの設定も異なるので注意が必要ですね。ほかのサイトにはほとんどこの情報がまとまっているところがなかったので、本稿を挙げた次第です。

以上。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかも...

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-...

IPv6 Linux router with NDP proxy

更新:2024/07/07 Debian 12のオリジナルndppdパッケージで下記設定にてndppdが機能することを確認しました。 ---------------------------------------------------------------- LinuxでIPv6 routerを設定しました。 プロバイダーから提供されたルータ機能付きのONUの配下に、パブリックなIPv6サブネットを構成できるルータを設定した時のメモです。 プロバイダはNuro光 で、G2Vというサービスです。通常、このサービスでは、ルータ付きのONU(図のONU+RT)には、IPv6で接続する場合、クライアントを直接接続する事はできます。しかし、図のように内側にさらにLinux Routerを接続し、eth1以下のClinet側サブネットにPublicなIPv6 addressを付与するには、NDP proxyの設定が必要でした。 構成はおよそ以下の通りです。(図再差し替え:2020/07/04) 1. 問題点と対策方針 今回来たONU+RTはZTE社のF660Aという物でした。このルータには、/56のアドレスが付与され、なおかつ、「プレフィックスデリゲーション」という項目があるのですが、設定しても、RA(ルーターアドバタイズ)は/64しか降りてこず、また、DHCPv6でも/64しか取得できません。つまり、このG2Vというサービスでは、DHCPv6-PDでも、/64 しか すら降りてきません。(なお、このサービスとしては機能的にはこれが正常です。) この制約を説明するとおよそこのような感じです。 26xx:1234:5678:9A00::/56 ← ONU+RTに払い出されたアドレス 26xx:1234:5678:9A00::/64 ← ONU+RTから払い出されるアドレス。 つまり、この設定では、64-56=8bit以下のサブネットを構成できるルータを別途接続することができません。 そこで調べたところ、「スタティックプレフィックス」という項目があり、これだと、(2024/07/06訂正) 26xx:1234:5678:9A00::/56 ← ONU+RTに払い出された(委譲された...