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としています。
ここで動作確認を行います。一旦、キャッシュをクリアしてから、idを確認します。
# builtin グループのgid確認
確認は以下の様にします。
ドメインに参加するWindows クライアント側の設定としては、NTPがあります。以下の様にします。
なお、samba-tool ntacl sysvolcheckを実行しエラーを返したときは、以下のスクリプトを実行し、再度sysvolcheckを行ってください。
また、uid/gidの範囲設定は ad dcではないメンバーサーバ・メンバーマシン上でも当然ながら行えます。以下メンバーサーバ上でのsmb.confの例(一部)です。
まず、最初に各種設定項目を以下の様に事前に決めておきます。なお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-dcsamba-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 0ntp.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グループ(マシンローカルグループ)も含まれます。 今回は以上です。それでは。
コメント
コメントを投稿