どうも、Tです。
Samba Active Directoryを冗長性(2台構成)にした検証を行ったので備忘録です。
目次
やりたいこと
概要
先日、Samba Active Directoryを1台構成で構築した記事を書きました。
上記に2台目のSamba Active Directoryを導入して2台構成にします。
環境
バージョン
Ubuntu Serverをほぼデフォルトでインストールしたものを使用しています。
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
Ubuntuは、vSphere ESXi上の仮想マシンにインストールしています。
操作はrootユーザーで行っています。
パッケージはaptコマンドで取得できるもののみ使用しています。(ソースコンパイルなどは行っていません)
主なパラメーター
項目 | 1台目AD値 | 2台目AD |
ADドメイン名 | k.local.lab | |
ホスト名 | k-addc01 | k-addc02 |
IPアドレス | 192.168.10.201 / 255.255.255.0 | 192.168.10.202 / 255.255.255.0 |
Sambaバージョン | 4.15.13 |
1台目のADは前回構築済みのため、本記事では主に2台目の構築になります。
1台目のAD操作は【k-addc01】
2台目のAD操作は【k-addc02】
のようにタイトルにプレフィックスを付けます。
【k-addc02】ファイルシステムのサポート確認
カーネルでACLサポートが必要です。
下記のコマンドを実行して結果が「y」であることを確認します。
# cat /boot/config-`uname -r`| grep -e CONFIG_EXT4_FS_SECURITY -e CONFIG_EXT4_FS_POSIX_ACL CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y
今回はファイルシステムがext4の場合を記載しています。他のファイルシステムの場合に必要なカーネルオプションは下記に記載されています。
【k-addc02】ホスト名設定
ホスト名の設定
ホスト名「k-addc02」が設定されいていることを確認します。
# hostnamectl Static hostname: k-addc02 Icon name: computer-vm Chassis: vm Machine ID: 995942c21c0b3dcea106ce2964b09b9e Boot ID: 96b58b4fde4f4f1b9b02ed1a48496fda Virtualization: vmware Operating System: Ubuntu 22.04.2 LTS Kernel: Linux 5.15.0-76-generic Architecture: x86-64 Hardware Vendor: VMware, Inc. Hardware Model: VMware20,1
hostsファイルの設定
hostsのエントリに2台目のADサーバ自身の「192.168.10.202 k-addc02.k.local.lab k-addc02」を追加します。
# cat /etc/hosts 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.10.202 k-addc02.k.local.lab k-addc02
FQNDでpingが実行できることを確認します。
# ping k-addc02.k.local.lab PING k-addc02.k.local.lab (192.168.10.202) 56(84) bytes of data. 64 bytes from k-addc02.k.local.lab (192.168.10.202): icmp_seq=1 ttl=64 time=0.018 ms 64 bytes from k-addc02.k.local.lab (192.168.10.202): icmp_seq=2 ttl=64 time=0.031 ms 64 bytes from k-addc02.k.local.lab (192.168.10.202): icmp_seq=3 ttl=64 time=0.031 ms ^C --- k-addc02.k.local.lab ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2030ms rtt min/avg/max/mdev = 0.018/0.026/0.031/0.006 ms
【k-addc02】DNSリゾルバ設定
DNSリゾルバサービスの無効化
UbuntuのDNS構成を制御する「systemd-resolved」が「resolv.conf」を勝手に書き換えてしまします。「systemd-resolved」は不要となるため無効化し起動していないことを確認します。
# systemctl status systemd-resolved.service # systemctl stop systemd-resolved.service # systemctl disable systemd-resolved.service # systemctl status systemd-resolved.service
resolv.confのリンク削除
「resolv.conf」ファイルは/runの下のシンボリックファイルになっています。
シンボリックファイルを解除しておきます。
# unlink /etc/resolv.conf
自身をDNSリゾルバーとして強制
手動で「resolv.conf」を作成して編集します。
# touch /etc/resolv.conf
# vi /etc/resolv.conf
「resolv.conf」を下記のように作成しておきます。
nameserverに1台目のAD【k-addc01】のIPアドレスを指定します。
# cat /etc/resolv.conf nameserver 192.168.10.201 search k.local.lab
ネットワークインターフェースに設定されいているDNSエントリも修正します。
# vi /etc/netplan/99-netcfg-vmware.yaml
下記のようにnameserverを「resolv.conf」と合わせておきます。
# Generated by VMWare customization engine. network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no dhcp6: no addresses: - 192.168.10.202/24 gateway4: 192.168.10.254 nameservers: addresses: - 192.168.10.201
修正後、インターフェースの変更を適用します。
# netplan apply ** (generate:2532): WARNING **: 10:22:41.263: `gateway4` has been deprecated, use default routes instead. See the 'Default routes' section of the documentation for more details.
WARNINGが出力されているのは、デフォルトゲートウェイの設定が現在非推奨の記載方法になっているためです。面倒なのでそのまましていますが、気になる方は修正してください。
【k-addc02】NTP設定
時刻同期とするNTPを導入します。k-addc01と同じChronyを導入し、【k-addc01】と時刻同期できていることを確認します。
設定方法は、下記の記事を参照してください。
注意点として、【k-addc02】はNTPクライアントとして動作し、【k-addc01】と時刻同期を行うため、poolの指定は【k-addc01】のIPアドレスもしくはホスト名になります。
pool 192.168.10.201 iburst
Samba Active Directoryが複数あるときの時刻同期のベストプラクティスは、下記を参照ください。
【k-addc02】samba設定
インストール
パッケージインデックスを更新し、samba ADに必要となるパッケージをインストールします。
# apt update # apt install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle net-tools smbclient
後ほどの動作確認で使うコマンドのため、net-tools smbclientを追加しています。
samba ADに必要なパッケージは下記を参照ください。
1台目のAD【k-addc01】の場合はインストールが完了すると、紫色のセットアップ画面がでてきましたが、【k-addc02】では表示されませんでした。
不要サービス停止
Samba Active Directoryに不要なサービスを停止し、手動でも起動できないようにmaskしておきます。
# systemctl stop smbd nmbd winbind # systemctl disable smbd nmbd winbind # systemctl mask smbd nmbd winbind
サービス自動起動有効化
Samaba Active Directoryサービスをunmaskし自動起動を有効化しておきます。
# systemctl unmask samba-ad-dc # systemctl enable samba-ad-dc
Kerberosの構成
下記のケルベロス設定を行います。
https://wiki.samba.org/index.php/Joining_a_Samba_DC_to_an_Existing_Active_Directory#Kerberos
Kerberos設定ファイルを退避し手動で作成します。
# mv /etc/krb5.conf /etc/krb5.conf.origin # touch /etc/krb5.conf # vi /etc/krb5.conf
記載内容は下記になります。default_realmに自分のレルム名を大文字で指定します。
[libdefaults] default_realm = K.LOCAL.LAB dns_lookup_realm = false dns_lookup_kdc = true
kinitコマンドでadministraotrのKerberosチケットを要求します。
# kinit administrator Password for administrator@K.LOCAL.LAB: ←パスワードを入力 Warning: Your password will expire in 41 days on Thu 24 Aug 2023 12:48:27 PM JST
klistコマンドでチケットが表示されることを確認します。
# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@K.LOCAL.LAB Valid starting Expires Service principal 07/14/2023 10:56:26 07/14/2023 20:56:26 krbtgt/K.LOCAL.LAB@K.LOCAL.LAB renew until 07/15/2023 10:56:22
Samba Active Directoryへの参加
【k-addc02】をADドメインに参加させます。
処理時にsmb.confが自動的に作成されつため、デフォルトの設定ファイルを退避しておきます。
# mv /etc/samba/smb.conf /etc/samba/smb.conf.origin
「samba-tool domain join」コマンドでJOINします。
# samba-tool domain join k.local.lab DC --username="K\administrator" --option="dns forwarder=8.8.8.8" --option='idmap_ldb:use rfc2307 = yes' INFO 2023-07-14 11:34:32,847 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #105: Finding a writeable DC for domain 'k.local.lab' INFO 2023-07-14 11:34:32,856 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #107: Found DC k-addc01.k.local.lab Password for [K\administrator]: ←パスワード入力
「samba-tool domain join」コマンドで指定している意味は次の通りです。
項目 | 意味 |
DC | ドメインコントローラ(DC)の役割として参加。 |
–username=”K\administrator” | ドメインの管理者ユーザーを指定。 |
–option=”dns forwarder=8.8.8.8″ | smb.confへ設定を追加。
ここではDNSフォワーダを追加している。 |
–option=’idmap_ldb:use rfc2307 = yes | smb.confへ設定を追加。
1台目のAD構築時にrfc2307(NIS拡張)を指定している場合、合わせておく。 |
join処理が行われる。
全文は下記。
# samba-tool domain join k.local.lab DC --username="K\administrator" --option="dns forwarder=8.8.8.8" --option='idmap_ldb:use rfc2307 = yes' INFO 2023-07-14 11:34:32,847 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #105: Finding a writeable DC for domain 'k.local.lab' INFO 2023-07-14 11:34:32,856 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #107: Found DC k-addc01.k.local.lab Password for [K\administrator]: ←パスワード入力 INFO 2023-07-14 11:34:42,487 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1527: workgroup is K INFO 2023-07-14 11:34:42,488 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1530: realm is k.local.lab Adding CN=K-ADDC02,OU=Domain Controllers,DC=k,DC=local,DC=lab Adding CN=K-ADDC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=k,DC=local,DC=lab Adding CN=NTDS Settings,CN=K-ADDC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=k,DC=local,DC=lab Adding SPNs to CN=K-ADDC02,OU=Domain Controllers,DC=k,DC=local,DC=lab Setting account password for K-ADDC02$ Enabling account Calling bare provision INFO 2023-07-14 11:34:42,819 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2108: Looking up IPv4 addresses INFO 2023-07-14 11:34:42,820 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2125: Looking up IPv6 addresses WARNING 2023-07-14 11:34:42,820 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2132: No IPv6 address will be assigned INFO 2023-07-14 11:34:43,012 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2274: Setting up share.ldb INFO 2023-07-14 11:34:43,020 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2278: Setting up secrets.ldb INFO 2023-07-14 11:34:43,027 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2283: Setting up the registry INFO 2023-07-14 11:34:43,048 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2286: Setting up the privileges database INFO 2023-07-14 11:34:43,059 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2289: Setting up idmap db INFO 2023-07-14 11:34:43,067 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2296: Setting up SAM db INFO 2023-07-14 11:34:43,070 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #880: Setting up sam.ldb partitions and settings INFO 2023-07-14 11:34:43,070 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #892: Setting up sam.ldb rootDSE INFO 2023-07-14 11:34:43,072 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1305: Pre-loading the Samba 4 and AD schema Unable to determine the DomainSID, can not enforce uniqueness constraint on local domainSIDs INFO 2023-07-14 11:34:43,097 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2348: A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf INFO 2023-07-14 11:34:43,097 pid:6319 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2350: Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink! Provision OK for domain DN DC=k,DC=local,DC=lab Starting replication Schema-DN[CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab] objects[402/1739] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab] objects[804/1739] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab] objects[1206/1739] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab] objects[1608/1739] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab] objects[1739/1739] linked_values[0/0] Analyze and apply schema objects Partition[CN=Configuration,DC=k,DC=local,DC=lab] objects[402/1624] linked_values[0/1] Partition[CN=Configuration,DC=k,DC=local,DC=lab] objects[804/1624] linked_values[0/1] Partition[CN=Configuration,DC=k,DC=local,DC=lab] objects[1206/1624] linked_values[0/1] Partition[CN=Configuration,DC=k,DC=local,DC=lab] objects[1608/1624] linked_values[0/1] Partition[CN=Configuration,DC=k,DC=local,DC=lab] objects[1624/1624] linked_values[30/30] Replicating critical objects from the base DN of the domain Partition[DC=k,DC=local,DC=lab] objects[97/97] linked_values[23/23] Partition[DC=k,DC=local,DC=lab] objects[271/271] linked_values[23/23] Done with always replicated NC (base, config, schema) Replicating DC=DomainDnsZones,DC=k,DC=local,DC=lab Partition[DC=DomainDnsZones,DC=k,DC=local,DC=lab] objects[43/43] linked_values[0/0] Replicating DC=ForestDnsZones,DC=k,DC=local,DC=lab Partition[DC=ForestDnsZones,DC=k,DC=local,DC=lab] objects[18/18] linked_values[0/0] Exop on[CN=RID Manager$,CN=System,DC=k,DC=local,DC=lab] objects[3] linked_values[0] Committing SAM database Repacking database from v1 to v2 format (first record CN=msSFU-30-Max-Gid-Number,CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab) Repack: re-packed 10000 records so far Repacking database from v1 to v2 format (first record CN=nTFRSSubscriber-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=k,DC=local,DC=lab) Repacking database from v1 to v2 format (first record DC=_gc._tcp.Default-First-Site-Name._sites,DC=k.local.lab,CN=MicrosoftDNS,DC=DomainDnsZones,DC=k,DC=local,DC=lab) Repacking database from v1 to v2 format (first record DC=_kerberos._tcp.dc,DC=_msdcs.k.local.lab,CN=MicrosoftDNS,DC=ForestDnsZones,DC=k,DC=local,DC=lab) Repacking database from v1 to v2 format (first record CN=rpc,CN=ypServ30,CN=RpcServices,CN=System,DC=k,DC=local,DC=lab) INFO 2023-07-14 11:34:47,447 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1100: Adding 1 remote DNS records for K-ADDC02.k.local.lab INFO 2023-07-14 11:34:47,489 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1163: Adding DNS A record K-ADDC02.k.local.lab for IPv4 IP: 192.168.10.202 INFO 2023-07-14 11:34:47,503 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1191: Adding DNS CNAME record 15c5fb46-1ec9-4422-bd74-cedd0c6251ce._msdcs.k.local.lab for K-ADDC02.k.local.lab INFO 2023-07-14 11:34:47,515 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1216: All other DNS records (like _ldap SRV records) will be created samba_dnsupdate on first startup INFO 2023-07-14 11:34:47,515 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1222: Replicating new DNS records in DC=DomainDnsZones,DC=k,DC=local,DC=lab Partition[DC=DomainDnsZones,DC=k,DC=local,DC=lab] objects[2/2] linked_values[0/0] INFO 2023-07-14 11:34:47,532 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1222: Replicating new DNS records in DC=ForestDnsZones,DC=k,DC=local,DC=lab Partition[DC=ForestDnsZones,DC=k,DC=local,DC=lab] objects[2/2] linked_values[0/0] INFO 2023-07-14 11:34:47,544 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1237: Sending DsReplicaUpdateRefs for all the replicated partitions INFO 2023-07-14 11:34:47,562 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1267: Setting isSynchronized and dsServiceName INFO 2023-07-14 11:34:47,568 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1282: Setting up secrets database INFO 2023-07-14 11:34:47,597 pid:6319 /usr/lib/python3/dist-packages/samba/join.py #1544: Joined domain K (SID S-1-5-21-471741904-173470251-2082303177) as a DC
下記の「smb.conf」ファイルが作成される。
# cat /etc/samba/smb.conf # Global parameters [global] dns forwarder = 8.8.8.8 netbios name = K-ADDC02 realm = K.LOCAL.LAB server role = active directory domain controller workgroup = K idmap_ldb:use rfc2307 = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/k.local.lab/scripts read only = No
「Active Directoryユーザとコンピューター」をみると【k-addc02】がドメインコントローラーとして参加できていることがわかります。
「Active Directoryサイトとサービス」にも【k-addc02】が表示されます。
DNSレコードも登録されます。スクリーンショットの取得を失念していましたが、NSレコードも登録されています。
Aレコード、krb5.confファイルとも小文字に戻して問題なく動作することをかくにんしています。
Kerberos設定
Kerberos設定ファイルも自動的に作成されるため置き換えます。
元のkrb5.confを退避し、自動生成されたkrb5.confをコピーします。
# rm -rf /etc/krb5.conf # cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
krb5.confはコピーする必要があります。シンボリックリンクを設定してはいけません。
Do not create a symbolic link to the the generated
krb5.conf
file. In Samba 4.7 and later, the/usr/local/samba/private/
directory is no longer accessible by other users than theroot
user. If the file is a symbolic link, other users are not able to read the file and, for example, dynamic DNS updates fail if you use theBIND_DLZ
DNS back end.
krb5.confの中は下記のようになっています。
# cat /etc/krb5.conf [libdefaults] default_realm = K.LOCAL.LAB dns_lookup_realm = false dns_lookup_kdc = true [realms] K.LOCAL.LAB = { default_domain = k.local.lab } [domain_realm] K-ADDC02 = K.LOCAL.LAB
Aレコード、krb5.confファイルとも小文字に戻して問題なく動作することをかくにんしています。
レプリケーション構成
ここからかなり面倒な手順になります。Samaba ADではSysvolレプリケーションがサポートされていません。そのためSysvol領域を同期させる方法を個別に設定しなければなりません。
方法はいくつかありますが、本手順では一番簡単なrsyncを用いた一方向の同期を行います。
【k-addc01(同期元・FSMO)】→【k-addc02(同期先)】の構成になります。
そのため、GPOの編集など変更がかかるものは、【k-addc01(同期元・FSMO)】で行う必要があります。
That’s why for rsync-based SysVol replication, you have to choose one DC on which you do all modifications (GPO edits, logon script changes, etc.)
組み込みユーザID・グループIDマッピング
rsyncの設定を行う前に各ドメインコントローラーが持っているユーザーとグループのIDマッピングを合わせる必要があるため設定していきます。
【k-addc01】idmap.ldbのバックアップ
【k-addc01】で「idmap.ldb」ファイルのバックアップを取得し、バックアップファイルを任意のディレクトリに移動し、root以外で読み込みが行えるようにします。
# tdbbackup -s .bak /var/lib/samba/private/idmap.ldb # ls -lh idmap.ldb.bak -rw------- 1 root root 80K Jul 14 12:36 idmap.ldb.bak # mv idmap.ldb.bak /tmp/ # chown kadmin /tmp/idmap.ldb.bak
【k-addc02】idmap.ldbの取得・置き換え
【k-addc01】で取得した「idmap.ldb」バックアップファイルを【k-addc02】の「/var/lib/samba/private」に取得します。
# cd /var/lib/samba/private # sftp kadmin@k-addc01:/tmp/idmap.ldb.bak kadmin@k-addc01's password: Connected to k-addc01. Fetching /tmp/idmap.ldb.bak to idmap.ldb.bak idmap.ldb.bak 100% 80KB 39.9MB/s 00:00
【k-addc02】に元々あった「idmap.ldb」ファイルを削除し、【k-addc01】から取得したバックアップファイルを「idmap.ldb」にリネームします。
# rm -rf idmap.ldb # mv idmap.ldb.bak idmap.ldb # chown root idmap.ldb
「net cache flush」コマンドでキャッシュ情報を削除します。
# net cache flush
rsyscによるSysvolレプリケーション回避設定
rsync設定を行なっていきます。
【k-addc01】rsync設定
rsyncをデーモンモードで動作させるために「rsyncd.conf」ファイルを作成します。
# vi /etc/rsyncd.conf
「rsyncd.conf」の設定内容は下記になります。
[SysVol] path = /var/lib/samba/sysvol comment = Samba Sysvol Share uid = root gid = root read only = yes auth users = sysvol-replication secrets file = /var/lib/samba/etc/rsync.secret
項目 | 意味 |
[SysVol] | モジュールヘッダー。
任意のわかりやすい名前をつける。 |
path | モジュールヘッダーで使用できるパス。
コピー元の場所になる。 |
uid | rsyncを行うときのユーザーを指定。 |
gid | rsyncを行うときのグループを指定。 |
read only | rsyncで読み取りのみを許可。 |
auth users | rsyncを行うときの認証用ユーザーを指定。
OSに存在する必要はない。 |
secrets file | rsyncを行うときの認証用ユーザーのパスワードファイルを指定。 |
「rsync.secret」ファイルを作成します。
# mkdir /var/lib/samba/etc # touch /var/lib/samba/etc/rsync.secret # chmod 600 rsyncd.secret # vi /var/lib/samba/etc/rsync.secret
「rsync.secret」ファイルの中身は下記になります。
sysvol-replication:<rsyncパスワード>
rsyncサービスを自動起動を有効にし、起動した後にステータスを確認しておきます。
# systemctl enable rsync # systemctl start rsync # systemctl status rsync
【k-addc02】rsync設定
【k-addc02】でrsyncを実行し、[SysVol] の領域を取得できるようにします。
まず認証が行えるようにパスワードファイルを作成します。
# mkdir /var/lib/samba/etc # touch /var/lib/samba/etc/rsync-sysvol.secret # chmod 600 rsyncd.secret # vi /var/lib/samba/etc/rsync-sysvol.secret
「rsync-sysvol.secret」には「rsync.secret」に記載したパスワードのみを記載します。
<rsyncパスワード>
rsyncを–dry-run(実際にコピーは行わない)で実行しエラーが表示されないことを確認します。
# rsync --dry-run -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol receiving file list ... done ./ k.local.lab/ k.local.lab/Policies/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/ k.local.lab/scripts/ sent 59 bytes received 1,364 bytes 2,846.00 bytes/sec total size is 40 speedup is 0.03 (DRY RUN)
rsyncを–dry-runなしで実行しエラーが表示されないことを確認します。
# rsync -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol receiving file list ... done ./ k.local.lab/ k.local.lab/Policies/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/ k.local.lab/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/ k.local.lab/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/ k.local.lab/scripts/ sent 115 bytes received 6,292 bytes 12,814.00 bytes/sec total size is 40 speedup is 0.01
コピーしたsysvolの内容でACLのリセットを行います。
# samba-tool ntacl sysvolreset
【k-addc02】rsyncのcron設定
rsyncが定期的に実行されるようにcronに登録します。
任意の名前でcronファイルを作成します。
# vi /etc/cron.d/k-addc
作成したcronファイルに下記の内容を記載します。今回は5分おきにrsyncが実行されるようにしています。
*/5 * * * * root rsync -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol
cron登録後にrsyncが指定時間単位で繰り返し行われていることを確認します。
# journalctl -u cron | grep rsync Jul 14 15:00:01 k-addc02 CRON[6713]: (root) CMD (rsync -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol) Jul 14 15:05:01 k-addc02 CRON[6720]: (root) CMD (rsync -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol) Jul 14 15:10:01 k-addc02 CRON[6730]: (root) CMD (rsync -XAavz --delete-after --password-file=/var/lib/samba/etc/rsync-sysvol.secret rsync://sysvol-replication@k-addc01/SysVol/ /var/lib/samba/sysvol)
【k-addc02】Samba Active Directory起動
Ssamba Active Directoryを起動します。
# systemctl start samba-ad-dc
正常に起動していることを確認します。
# systemctl status samba-ad-dc
いくつからエラーっぽい表示がありました。調べた感じ問題なさそう(既知のバグ)だったのとその後発生していないため詳細の記録を忘れていました。
また見つけたら追記したいと思います。
追加設定
追加設定の項目は、SAMABのドキュメントに記載は明記されていませんでしたが、このままでは良くないなと思うところを修正しています。
DNSサーバー設定変更
【k-addc01】DNSサーバー設定変更
「resolv.conf」ファイルにDNSサーバになっている【k-addc01】【k-addc02】の2台をnameserverとして追加します。
# cat /etc/resolv.conf nameserver 192.168.10.201 nameserver 192.168.10.202 search k.local.lab
ネットワークインターフェースに設定されいているDNSエントリも修正します。
# cat /etc/netplan/99-netcfg-vmware.yaml # Generated by VMWare customization engine. network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no dhcp6: no addresses: - 192.168.10.201/24 gateway4: 192.168.10.254 nameservers: addresses: [192.168.10.201, 192.168.10.202]
修正後、インターフェースの変更を適用します。
# netplan apply
【k-addc02】DNSサーバー設定変更
「resolv.conf」ファイルにDNSサーバになっている【k-addc01】【k-addc02】の2台をnameserverとして追加します。
# cat /etc/resolv.conf nameserver 192.168.10.202 nameserver 192.168.10.201 search k.local.lab
ネットワークインターフェースに設定されいているDNSエントリも修正します。
# cat /etc/netplan/99-netcfg-vmware.yaml # Generated by VMWare customization engine. network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no dhcp6: no addresses: - 192.168.10.202/24 gateway4: 192.168.10.254 nameservers: addresses: [192.168.10.202, 192.168.10.201]
修正後、インターフェースの変更を適用します。
# netplan apply
【k-addc02】時刻同期の構成
Kerberos認証が正常に使用できるように、クライアントからADサーバを使用した時刻同期(NT5DS プロトコル)できるように設定します。
構成はドキュメントにある推奨構成に則って設定していきます。
詳細は下記を参照ください。
本手順を行うことによりドメインに参加しているメンバーは、【k-addc01】【k-addc02】のどちらかから時刻同期を行うようになります。Windows ADの場合は、FSMOからのみ時刻同期を行い他のドメインコントローラもFSMOから同期を行う構成になるため少し動きが異なっています。
Samba ADの推奨構成ではありますが、この構成にも問題はあり別の構成としては全てのドメインコントローラーを外部NTPと同期する方法も示されています。
There is however a problem with this, Windows clients get their time from the PDC emulator DC and if this goes offline, they will not use the other DC’s and the other DC’s will be looking for the PDC emulator DC. As a workaround for this, set the same external time servers on all DC’s, then if the PDC emulator goes offline and cannot easily be restarted, transfer or seize the PDC emulator role to another DC.
今回はchronyを使っているので、chrony向けの設定を進めていきます。
ntp_signdディレクトリに_chronyグループからアクセスできるように読み取り権限を設定します。
# chown root:_chrony /var/lib/samba/ntp_signd/ # chmod 750 /var/lib/samba/ntp_signd/
chrony.confを設定します。
# vi /etc/chrony/chrony.conf
下記の設定を追加します。allowは事前の設定で追加しているはずですが、まだしていなければ設定を行います。
# AddConfig-Allow NTP Client Access from local network allow 192.168.10.0/24 # bind the chrony service to IP address of the Samba AD bindcmdaddress 192.168.10.202 # specify the ntpsigndsocket directory for the Samba AD ntpsigndsocket /var/lib/samba/ntp_signd
設定項目 | 意味 |
allow | 時刻同期してくるクライアントのネットワーク許可範囲 |
bindcmdaddress | 時刻時に使用するIPアドレス。 |
ntpsigndsocket | ntp_signdソケットのディレクトリを指定 |
設定を反映するためchronydを再起動します。
# systemctl restart chronyd
chronydのステータスを確認し、ログに「MS-SNTP authentication enabled」が出力されていることを確認します。
# systemctl status chronyd ● chrony.service - chrony, an NTP client/server Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2023-07-14 16:14:32 JST; 6s ago Docs: man:chronyd(8) man:chronyc(1) man:chrony.conf(5) Process: 7292 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS) Main PID: 7302 (chronyd) Tasks: 2 (limit: 9388) Memory: 1.2M CPU: 70ms CGroup: /system.slice/chrony.service ├─7302 /usr/sbin/chronyd -F 1 └─7303 /usr/sbin/chronyd -F 1 Jul 14 16:14:32 k-addc02 systemd[1]: Starting chrony, an NTP client/server... Jul 14 16:14:32 k-addc02 chronyd[7302]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SI> Jul 14 16:14:32 k-addc02 chronyd[7302]: Frequency -9.282 +/- 0.059 ppm read from /var/lib/chrony/chrony.drift Jul 14 16:14:32 k-addc02 chronyd[7302]: Using right/UTC timezone to obtain leap second data Jul 14 16:14:32 k-addc02 chronyd[7302]: MS-SNTP authentication enabled Jul 14 16:14:32 k-addc02 chronyd[7302]: Loaded seccomp filter (level 1) Jul 14 16:14:32 k-addc02 systemd[1]: Started chrony, an NTP client/server. Jul 14 16:14:36 k-addc02 chronyd[7302]: Selected source 192.168.10.201 Jul 14 16:14:36 k-addc02 chronyd[7302]: System clock TAI offset set to 37 seconds
【k-addc02】Samba Active Directory動作確認
Aレコード確認
ADサーバのAレコードの名前解決がローカルで行えることを確認します。
【k-addc01】【k-addc02】の2台分が表示されます。
# host -t A k.local.lab localhost Using domain server: Name: localhost Address: 127.0.0.1#53 Aliases: k.local.lab has address 192.168.10.201 k.local.lab has address 192.168.10.202
_kerberos・_ldapサービス レコード確認
kerberosとldapのSRVレコードの名前解決がローカルで行えることを確認します。
【k-addc01】【k-addc02】の2台分が表示されます。
# host -t SRV _kerberos._udp.k.local.lab localhost Using domain server: Name: localhost Address: 127.0.0.1#53 Aliases: _kerberos._udp.k.local.lab has SRV record 0 100 88 k-addc01.k.local.lab. _kerberos._udp.k.local.lab has SRV record 0 100 88 k-addc02.k.local.lab. # host -t SRV _ldap._tcp.k.local.lab localhost Using domain server: Name: localhost Address: 127.0.0.1#53 Aliases: _ldap._tcp.k.local.lab has SRV record 0 100 389 k-addc01.k.local.lab. _ldap._tcp.k.local.lab has SRV record 0 100 389 k-addc02.k.local.lab.
レプリケーション確認
レプリケーションに問題がないことを確認します。
# samba-tool drs showrepl Default-First-Site-Name\K-ADDC02 DSA Options: 0x00000001 DSA object GUID: 15c5fb46-1ec9-4422-bd74-cedd0c6251ce DSA invocationId: f8a84fad-c794-434a-8779-62e3d8e253f7 ==== INBOUND NEIGHBORS ==== DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ Fri Jul 14 15:45:57 2023 JST was successful 0 consecutive failure(s). Last success @ Fri Jul 14 15:45:57 2023 JST DC=ForestDnsZones,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ Fri Jul 14 15:45:57 2023 JST was successful 0 consecutive failure(s). Last success @ Fri Jul 14 15:45:57 2023 JST CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ Fri Jul 14 15:45:57 2023 JST was successful 0 consecutive failure(s). Last success @ Fri Jul 14 15:45:57 2023 JST CN=Configuration,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ Fri Jul 14 15:45:57 2023 JST was successful 0 consecutive failure(s). Last success @ Fri Jul 14 15:45:57 2023 JST DC=DomainDnsZones,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ Fri Jul 14 15:45:57 2023 JST was successful 0 consecutive failure(s). Last success @ Fri Jul 14 15:45:57 2023 JST ==== OUTBOUND NEIGHBORS ==== DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ NTTIME(0) was successful 0 consecutive failure(s). Last success @ NTTIME(0) DC=ForestDnsZones,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ NTTIME(0) was successful 0 consecutive failure(s). Last success @ NTTIME(0) CN=Schema,CN=Configuration,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ NTTIME(0) was successful 0 consecutive failure(s). Last success @ NTTIME(0) CN=Configuration,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ NTTIME(0) was successful 0 consecutive failure(s). Last success @ NTTIME(0) DC=DomainDnsZones,DC=k,DC=local,DC=lab Default-First-Site-Name\K-ADDC01 via RPC DSA object GUID: e467c23b-f335-4352-aaa3-47162ac4d334 Last attempt @ NTTIME(0) was successful 0 consecutive failure(s). Last success @ NTTIME(0) ==== KCC CONNECTION OBJECTS ==== Connection -- Connection name: 6773f69e-3cba-42e1-840a-74684c19e12a Enabled : TRUE Server DNS name : k-addc01.k.local.lab Server DN name : CN=NTDS Settings,CN=K-ADDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=k,DC=loc TransportType: RPC options: 0x00000001 Warning: No NC replicated for Connection!
ディレクトリ比較
ディレクトリ内容を比較しエラーがないこと確認します。
# samba-tool ldapcmp ldap://k-addc01 ldap://k-addc02 -Uadministrator Password for [K\administrator]: * Comparing [DOMAIN] context... * Objects to be compared: 271 * Result for [DOMAIN]: SUCCESS * Comparing [CONFIGURATION] context... * Objects to be compared: 1625 * Result for [CONFIGURATION]: SUCCESS * Comparing [SCHEMA] context... * Objects to be compared: 1739 * Result for [SCHEMA]: SUCCESS * Comparing [DNSDOMAIN] context... * Objects to be compared: 43 * Result for [DNSDOMAIN]: SUCCESS * Comparing [DNSFOREST] context... * Objects to be compared: 18 * Result for [DNSFOREST]: SUCCESS
Kerberos認証確認
# smbclient //localhost/netlogon -UAdministrator -c 'ls' Password for [K\Administrator]: . D 0 Thu Jul 13 12:48:22 2023 .. D 0 Thu Jul 13 12:48:26 2023 49713728 blocks of size 1024. 39601812 blocks available
Kerbero認証で使用されるチケットをadministratorで取得します。
# kinit administrator Password for administrator@K.LOCAL.LAB: Warning: Your password will expire in 40 days on Thu 24 Aug 2023 12:48:27 PM JST
チケットのリストが表示できることを確認します。
# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@K.LOCAL.LAB Valid starting Expires Service principal 07/14/2023 16:21:52 07/15/2023 02:21:52 krbtgt/K.LOCAL.LAB@K.LOCAL.LAB renew until 07/15/2023 16:21:49
ADドメイン参加テスト
Windowsクライアントからドメインに参加できることを確認します。
ドメインユーザー作成
事前にドメインユーザー「ktest」を作成しました。RSATからGUIで手動で作成しています。
【k-addc01】で作成したドメインユーザーが存在することを確認します。
# samba-tool user list | grep ktest ktest
【k-addc02】で作成したドメインユーザーが存在することを確認します。
# samba-tool user list | grep ktest ktest
ドメイン参加
WindowsクライアントにIPアドレスとDNSを設定します。
いつも通りドメイン参加し、ドメインユーザーでログインできることを確認します。
コンピュータオブジェクトが登録されていることを確認します。
DNSレコード確認
【k-addc01】【k-addc02】のDNSにレコードが登録されいていることを確認します。
自動で登録されてない時はWindowsクライアントで「ipconfig /registerdns」コマンドを実行することで登録されました。
参考
公式
ブログなど
まとめ
設定内容を全て把握できたわけではありませんが、一旦Samba ADを2台構成で動かすことができました。
うーん!すっごくめんどくさいですねぇ