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

samba 4 ad dc with idmap backend ad その二: FSMOマスタの構築(ad dc上でのwinbindあり共有設定ありの場合)

Samba wikiによるとsamba ad dc上ではwinbindおよび共有は明確に非推奨ということになっています。しかし、小規模な環境ではサーバを複数建てることは憚られることもありますし、NAS製品の一部ではAD DCとして機能させるものもあります。そこで、idmap backend adのad dc上でwinbindあり、共有ありの設定を再度検証することにしました。なお、テスト環境でのサーバはDebian 10.9/Buster AMD64,sambaのバージョンは2:4.9.5+dfsg-5+deb10u1、 クライアントはwindows10/20h2で、共にhyper-v上で動作確認を行いました。
まず、最初に各種設定項目を以下の様に事前に決めておきます。なおdns serverは信頼関係を設定しないためsamba_internalとしています。
ドメイン名(FQDN) dom01.vr
ドメイン名(NetBIOS) DOM01
IPv6アドレス: 2www:xxxx:yyyy:zzzz::120/64
IPv6ゲートウェイ:  2www:xxxx:yyyy:zzzz::106
IPv4アドレス: 10.1.4.120/24
IPv4ゲートウェイ: 10.1.4.106
マシン名: vsv120
dns forwarder: 2606:4700:4700::1111 1.1.1.1
上述の設定で、ネットワーク設定を済ませておいてください。 /etc/hostsは以下の様に編集します。
127.0.0.1       localhost
127.0.1.1       vsv120.dom01.vr vsv120

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

2www:xxxx:yyyy:zzzz::120 vsv120.dom01.vr vsv120
10.1.4.120               vsv120.dom01.vr vsv120
また、uid/gidの範囲は今回は以下の様にしています。
uid 20000-27999 (DOM01 テスト用ユーザのUIDプール)
uid 28000-29999 (DOM01 administrator,guest,krbtgtのUIDプール)
gid 18000-19999 (Builtin groupのgidプール)
gid 20000-27999 (DOM01 テスト用グループのgidプール)
gid 28000-29999 (DOM01ドメイングループのgidプール)

uid 30000-3999999 (DOM01 ユーザ用 UIDプール)
gid 30000-3999999 (DOM01 グループ用 GIDプール)

続いてパッケージのインストールを行います。
sudo apt-get install ntp samba smbclient krb5-config krb5-user \
winbind libnss-winbind libpam-winbind ldb-tools dnsutils rsync acl samba-dsdb-modules samba-vfs-modules
インストール中設定を聞かれたら以下の様にしてください。
DHCP から WINS 設定を使うよう smb.conf を変更しますか?と聞かれたら
いいえ
を選択してください。

また、デフォルトのケルベロスバージョン5レルムを聞かれたら
DOM01.VR
と大文字で指定してください。

さらに、あなたのレルムのケルベロスサーバ: を聞かれたら、
vsv120.dom01.vr
と小文字で指定してください。

また、あなたのケルベロスレルムの管理サーバ: をきかれたら、
vsv120.dom01.vr
と小文字で指定してください。
ここで、一旦 sambaおよびwinbindを止めます。
sudo systemctl stop smbd nmbd winbind
デフォルトのsmb.confをリネームして保存しておきます。
cd /etc/samba
sudo mv smb.conf smb.conf.orig
続いて、/etc/nsswitch.confを編集し、passwdとgroupの行にだけwinbindを追加します。
passwd:         compat systemd winbind
group:          compat systemd winbind
shadow:         compat
以上でドメインの設定は済んだので、以下のスクリプトでドメインを構成します。
sudo samba-tool domain provision \
  --use-rfc2307 \
  --realm=DOM01.VR \
  --domain=DOM01 \
  --host-name=VSV120 \
  --host-ip=10.1.4.120 \
  --host-ip6=2www:xxxx:yyyy:zzzz::106 \
  --server-role=dc \
  --dns-backend=SAMBA_INTERNAL \
  --adminpass P@ssw0rd01234
ドメインの構成がすんだら、 /etc/samba/smb.confが新たに作成されますが、これもsmb.conf.00として保存し、以下の様にsmb.confを作成します。
# edit new /etc/samba/smb.conf like below:
[global]
        dns forwarder = 2606:4700:4700::1111 1.1.1.1
        netbios name = VSV120
        realm = DOM01.VR
        server role = active directory domain controller
        workgroup = DOM01

        idmap_ldb:use rfc2307 = yes

        winbind use default domain = no
        winbind nested groups = yes

        template shell = /usr/sbin/nologin
        template homedir = /home/%D/%U

;        username map = /etc/samba/user.map

        ea support = yes
        vfs objects = dfs_samba4 acl_xattr streams_xattr
        store dos attributes = yes
        map acl inherit = yes
        inherit permissions = yes

        load printers = no
        printing = bsd
        printcap name = /dev/null

[netlogon]
        path = /var/lib/samba/sysvol/dom01.vr/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No

[srv]
        path = /srv
        read only = No
ここまできたら、/etc/resolv.confで、vsv120自身をnameserverに指定するようにします。
search dom01.vr
domain dom01.vr
nameserver 2www:xxxx:yyyy:zzzz::120
nameserver 10.1.4.120
つづいて、samba-ad-dcを起動するのですが、デフォルトのインストールではsamba-ad-dcが有効になっていないので以下の様にします。
sudo systemctl stop smbd
sudo systemctl stop nmbd
sudo systemctl stop winbind

sudo systemctl mask smbd nmbd winbind
sudo systemctl disable smbd nmbd winbind
sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc

sudo systemctl start samba-ad-dc
samba-ad-dcが起動したら、ネットワーク接続ができていることを確認します。
ping -6 -c4 one.one.one.one
ping -4 -c4 one.one.one.one

nslookup
> set type=SRV
> _ldap._tcp.dom01.vr
Server:         2www:xxxx:yyyy:zzzz::120
Address:        2www:xxxx:yyyy:zzzz::120#53

_ldap._tcp.dom01.vr     service = 0 100 389 vsv120.dom01.vr.
次にBuiltin groupに対し、gidを付与しておきます。ビルトイングループはsambaでは内部的にDOM01とは異なるドメインとして取り扱うので、UID_BASEを今回は18000としています。スクリプト名はmod-builtin-grp.shとして実行します。
#!/bin/sh

UID_BASE=18000
SAM_LDB=/var/lib/samba/private/sam.ldb
DN="dc=dom01,dc=vr"
rm -rf wrk
mkdir -p wrk
wbinfo -g --domain=BUILTIN | awk 'BEGIN{FS="\\"}{print $2}' > wrk/grp.txt

while IFS= read grpString; do \
RID=`wbinfo -n "BUILTIN\\\\$grpString" | awk '{print $1}' | sed -e 's/-/ /g' | awk '{print $5}'`
echo $RID
cat > wrk/$RID.ldif <<EOF;
dn: cn=$grpString,cn=Builtin,$DN
changetype: modify
-
replace: gidNumber
gidNumber: $(($UID_BASE + $RID))
-
EOF

echo modifying $grpString ...
ldbmodify -H $SAM_LDB wrk/$RID.ldif

done < wrk/grp.txt
続いてドメイングループにgidを付与します。こちらはUID_BASEを28000としmod-dom01.vr-grp.shという名前で保存し、実行します。
#!/bin/sh

UID_BASE=28000
DN="dc=dom01,dc=vr"
SAM_LDB=/var/lib/samba/private/sam.ldb

rm -rf wrk
mkdir -p wrk
wbinfo -g | awk 'BEGIN{FS="\\"}{print $2}' > wrk/grp.txt
#wbinfo -g --domain=BUILTIN | awk 'BEGIN{FS="\\"}{print $2}' >> wrk/grp.txt
while IFS= read grpString; do \
RID=`wbinfo -n "$grpString" | awk '{print $1}' | sed -e 's/-/ /g' | awk '{print $8}'`

cat > wrk/$RID.ldif <<EOF;
dn: cn=$grpString,cn=Users,$DN
changetype: modify
-
replace: gidNumber
gidNumber: $(($UID_BASE + $RID))
-
EOF

echo modifying $grpString RID=$RID ...
ldbmodify -H $SAM_LDB wrk/$RID.ldif

done < wrk/grp.txt
最後に、ドメインユーザのadministrators、guest、krbtgtにuid/gidなどを付与します。こちらもUID_BASE=28000としています。
#!/bin/sh

UID_BASE=28000
DOMAIN=DOM01
HOME_BASE=/home/$DOMAIN
DN="dc=dom01,dc=vr"
SAM_LDB=/var/lib/samba/private/sam.ldb

rm -rf wrk
mkdir -p wrk

cat > wrk/mod-administrator.ldif <<EOF;
dn: cn=administrator,cn=Users,$DN
changetype: modify
-
replace: uidNumber
uidNumber: $(($UID_BASE + 500))
-
replace: gidNumber
gidNumber: $(($UID_BASE + 512))
-
replace: loginShell
loginShell: /usr/sbin/nologin
-
replace: unixHomeDirectory
unixHomeDirectory: $HOME_BASE/administrator
-
EOF

echo modifying administrator...
ldbmodify -H $SAM_LDB wrk/mod-administrator.ldif


cat > wrk/mod-guest.ldif <<EOF;
dn: cn=guest,cn=Users,$DN
changetype: modify
-
replace: uidNumber
uidNumber: $(($UID_BASE + 501))
-
replace: gidNumber
gidNumber: $(($UID_BASE + 513))
-
replace: loginShell
loginShell: /usr/sbin/nologin
-
replace: unixHomeDirectory
unixHomeDirectory: /nonexistent
-
EOF

echo modifying guest...
ldbmodify -H $SAM_LDB wrk/mod-guest.ldif


cat > wrk/mod-krbtgt.ldif <<EOF;
dn: cn=krbtgt,cn=Users,$DN
changetype: modify
-
replace: uidNumber
uidNumber: $(($UID_BASE + 502))
-
replace: gidNumber
gidNumber: $(($UID_BASE + 513))
-
replace: loginShell
loginShell: /usr/sbin/nologin
-
replace: unixHomeDirectory
unixHomeDirectory: /nonexistent
-
EOF

echo modifying krbtgt...
ldbmodify -H $SAM_LDB wrk/mod-krbtgt.ldif

これを、mod-dom01.vr-usr.shというファイル名で保存し、実行します。なお、今回は28000番をベースにして割り当てるようにしていますので、例えばAdministratorのSIDは500なので、これを加算することでuid=28500となります。
ここで動作確認を行います。一旦、キャッシュをクリアしてから、idを確認します。
net cache flush

getent passwd administrator
DOM01\administrator:*:28500:28513::/home/DOM01/administrator:/bin/false
そのほか、builtin, domain group, domain userの確認は、以下の様にします。
# builtin グループのgid確認
cd /tmp
rm -rf wrk
mkdir -p wrk
wbinfo -g --domain=BUILTIN | sed -e 's/^/getent group "/g' -e 's/$/"/g' > wrk/grp.txt
sh wrk/grp.txt

BUILTIN\administrators:x:18544:
BUILTIN\users:x:18545:
BUILTIN\guests:x:18546:
BUILTIN\account operators:x:18548:
BUILTIN\server operators:x:18549:
BUILTIN\print operators:x:18550:
BUILTIN\backup operators:x:18551:
BUILTIN\replicator:x:18552:
BUILTIN\pre-windows 2000 compatible access:x:18554:
BUILTIN\remote desktop users:x:18555:
BUILTIN\network configuration operators:x:18556:
BUILTIN\incoming forest trust builders:x:18557:
BUILTIN\performance monitor users:x:18558:
BUILTIN\performance log users:x:18559:
BUILTIN\windows authorization access group:x:18560:
BUILTIN\terminal server license servers:x:18561:
BUILTIN\distributed com users:x:18562:
BUILTIN\iis_iusrs:x:18568:
BUILTIN\cryptographic operators:x:18569:
BUILTIN\event log readers:x:18573:
BUILTIN\certificate service dcom access:x:18574:
# domain グループのgid確認
cd /tmp
DOM=DOM01
rm -rf wrk
mkdir -p wrk
wbinfo -g --domain=$DOM | sed -e 's/^/getent group "/g' -e 's/$/"/g' > wrk/grp.txt
sh wrk/grp.txt

DOM01\cert publishers:x:28517:
DOM01\ras and ias servers:x:28553:
DOM01\allowed rodc password replication group:x:28571:
DOM01\denied rodc password replication group:x:28572:
DOM01\dnsadmins:x:29101:
DOM01\enterprise read-only domain controllers:x:28498:
DOM01\domain admins:x:28512:
DOM01\domain users:x:28513:
DOM01\domain guests:x:28514:
DOM01\domain computers:x:28515:
DOM01\domain controllers:x:28516:
DOM01\schema admins:x:28518:
DOM01\enterprise admins:x:28519:
DOM01\group policy creator owners:x:28520:
DOM01\read-only domain controllers:x:28521:
DOM01\dnsupdateproxy:x:29102:
# domain ユーザの確認
cd /tmp
rm -rf wrk
mkdir -p wrk
wbinfo -u | sed -e 's/^/getent passwd "/g' -e 's/$/"/g' > wrk/usr.txt
sh wrk/usr.txt

DOM01\administrator:*:28500:28513::/home/DOM01/administrator:/usr/sbin/nologin
DOM01\guest:*:28501:28513::/home/DOM01/guest:/usr/sbin/nologin
DOM01\krbtgt:*:28502:28513::/home/DOM01/krbtgt:/usr/sbin/nologin
次はNTPのインストールと設定です。
sudo chown root:ntp /var/lib/samba/ntp_signd/
sudo chmod 750 /var/lib/samba/ntp_signd/

sudo apt-get install ntp

## /etc/ntp.confを編集

#以下二行にmssntpを追加。
restrict -4 default kod notrap nomodify nopeer noquery limited mssntp
restrict -6 default kod notrap nomodify nopeer noquery limited mssntp

#以下を追加
interface listen 10.1.4.120
restrict 10.1.4.0 mask 255.255.255.0 nomodify notrap nopeer noquery

interface listen 2www:xxxx:yyyy:zzzz::120
restrict 2www:xxxx:yyyy:zzzz:: mask ffff:ffff:ffff:ffff:: nomodify notrap nopeer noquery

ntpsigndsocket /var/lib/samba/ntp_signd

tinker panic 0
ntp.confの編集がすんだら
systemctl restart ntp
としてください。
続いて共有のテストを行います。まず、/srv共有のパーミッションを変更しておきます。
chown administrator."domain users" /srv
続いて、共有フォルダのアクセス設定権をもつユーザが必要なので、例として"Domain Admins" グループに権限を付与します。
net rpc rights grant 'DOM01\Domain Admins' SeDiskOperatorPrivilege -Uadministrator
続いて、テスト管理ユーザを作成します。RSATでもできないわけではありませんが、設定が面倒かつ間違いやすいため、ad dc上で以下のコマンド内容にてユーザを作成してみました。
sudo samba-tool user create user20000 P@ssw0rd98765 --description user20000 \
--nis-domain=mydomain.site --uid=user20000  --uid-number=20000 --gid-number=28513 \
--login-shell=/bin/bash --unix-home=/home/user20000
テスト管理ユーザをDomain adminsに登録しておきます。
samba-tool group addmembers "Domain Admins" "user20000"
こうすることでドメインメンバーマシンへのリモートデスクトップ接続が可能になります。なお参考ですが、初期状態でのDOM01\AdministratorではRSATのインストールができませんが、Domain Adminsに加えられた user20000 ではRSATのインストールができます。
確認は以下の様にします。
$ getent passwd user20000
DOM01\user20000:*:20000:28513::/home/DOM01/user20000:/usr/sbin/nologin

$ id user20000
uid=20000(DOM01\user20000) gid=28513(DOM01\domain users) groups=28513(DOM01\domain users),28512(DOM01\domain admins),28572(DOM01\denied rodc password replication group),18544(BUILTIN\administrators),18545(BUILTIN\users)
ドメインコントローラー上では、smb.confでloginできない設定にしてありますので、home=/home/DOM01/user20000、shell=/usr/sbin/nologinでOKです。なお、AD DCと異なり、メンバーマシン・メンバーサーバでは設定が適切に行われていればsamba-tool user createで指定したシェルとホームでログインできます。
ドメインに参加するWindows クライアント側の設定としては、NTPがあります。以下の様にします。
w32tm /config /update /syncfromflags:DOMHIER
w32tm /config /syncfromflags:manual /manualpeerlist:"vsv120.dom01.vr,0x8" /update
w32tm /resync
w32tm /query /status
設定は以上ですが、一旦 administratorで、domain usersに/srvに対する書き込み権限を付与し、chmod -R 775 /srvとした後、windowsクライアントをドメインに参加させuser20000でsign inし確認したところ、/srvの単純な共有テストは可能でした。また、共有のアクセス許可でvsv120/Usersを追加したところ、Users(DOM01\Users)となりwindows serverと同じ挙動を示しました。
なお、samba-tool ntacl sysvolcheckを実行しエラーを返したときは、以下のスクリプトを実行し、再度sysvolcheckを行ってください。
#!/bin/sh
# ntacl-set-sysvol.sh

for f in `find /var/lib/samba/sysvol/dom01.vr/Policies/*`; do \
samba-tool ntacl set "O:DAG:DAD:P(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;EA)(A;OICIIO;0x001f01ff;;;CO)(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED)" "$f"
done
参考までに、ad dc上ではidmap backendはrid/adともにサポートされないため、ad dcの/etc/samba/smb.confは暗示的に以下の様になります。(testparmで確認できます。)
idmap config * : backend = tdb
ではなぜ、ad dc上でwinbindが動作するのかですが、
   idmap_ldb:use rfc2307 = yes
この設定を/etc/samba/smb.confで行っているからです。
また、uid/gidの範囲設定は ad dcではないメンバーサーバ・メンバーマシン上でも当然ながら行えます。以下メンバーサーバ上でのsmb.confの例(一部)です。
   idmap config DOM01 : backend = ad
   idmap config DOM01 : range = 20000-3999999
   idmap config DOM01 : schema_mode = rfc2307
   idmap config DOM01 : unix_nss_info = yes
   idmap config DOM01 : unix_primary_group = yes

   idmap config * : backend = tdb
   idmap config * : range = 18000-19999
なお、以下の様にメンバーサーバ上のidmap config * にはBuiltinグループ(マシンローカルグループ)も含まれます。
今回は以上です。それでは。

コメント

このブログの人気の投稿

Hyper-V Server2019にワークグループ環境下でWindows10(1809)から接続

Hyper-V server 2019に、ワークグループ環境にてWindows10(1809)から接続してみました。Windows10にHyper-V管理ツールがインストールされていることと、Hyper-V Serverをインストール済であることが前提です。以下、Hyper-V serverは名前がHyperVSV、アドレスは192.168.1.110としています。 まず、Hyper-V server上で、powershellを起動し、以下のコマンドを入力します。 Enable-WSManCredSSP -Role Server -Force 続いて、クライアントのWindows10のpowershell で以下のコマンドを入力します。 winrm quickconfig -Force Enable-WSManCredSSP -Role Client -DelegateComputer * -Force さらに、クライアントマシンで、gpedit(グループポリシーエディタ)を起動し、以下の要領でポリシーを設定します。 a. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLMのみのサーバー認証で新しい資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「WSMAN/*」を追加 b. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLM のみのサーバー認証で保存された資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「*」を追加 また、名前解決できるように、(notepadを管理者権限で実行し)C:\Windows\System32\Drivers\etc\hostsにサーバ名とIPアドレスの対を追加。 192.168.1.110 HyperVSV 最後に、Hyper-Vマネージャーを起動し、Windows10からHyper-V サーバに接続します。手順は以下の通りです。 「サーバーに接続」->コンピュータの選択->別のコンピューターに[HyperVSV]と入力し、[別のユーザーとして接続する

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-