Samba AD DC更新作業4:二台目DC構築

前回までの記事はこちら:

Samba AD DC更新作業1:はじめに

Samba AD DC更新作業2:Samba更新

Samba AD DC更新作業3:Ubuntu更新

 

今回の話題は二台目DCの構築について。基本的なシステム構築手順の+α部分を記述する。Ubuntu 22.04LTSのインストール、言語・標準時・ネットワーク・DNSなどの設定は一般的な話題のため割愛。DC動作として大切なものは時刻同期とファイアウォールのため、それらについてまず述べる。

SambaはKerberos認証を使うが、時刻のずれが5分を超えると認証は失敗する。そのため時刻同期が必須になる。デフォルトでNTPサービスが運用されているはずだが、一応NTPがアクティブであることを確認する。

root@dc2:~# timedatectl
               Local time: 金 2024-10-25 09:25:32 JST
           Universal time: 金 2024-10-25 00:25:32 UTC
                 RTC time: 金 2024-10-25 00:25:32
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

"NTP service: active"となっていれば良い。もしinactiveであれば、次のコマンドでアクティブにする。

 # timedatectl set-ntp true

NTPサーバは、国内であればnictを指定するといいだろう。もし他のNTPサーバも追加したい場合は、スペース区切りで以下の例のように書く。

root@dc2:~# vi /etc/systemd/timesyncd.conf 
#NTP=
NTP=ntp.nict.jp ntp.aaa.xxx ntp.bbb.yyy

そしてサービスデーモン再起動。

root@dc2:~# systemctl restart systemd-timesyncd
root@dc2:~# systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-10-25 09:29:40 JST; 5s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 5209 (systemd-timesyn)
     Status: "Initial synchronization to time server 133.243.238.244:123 (ntp.nict.jp)."
...
root@dc2:~# timedatectl timesync-status
       Server: 133.243.238.244 (ntp.nict.jp)
Poll interval: 4min 16s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: NICT
    Precision: 1us (-20)
Root distance: 36.017ms (max: 5s)
       Offset: +870us
        Delay: 1.605ms
       Jitter: 342us
 Packet count: 4
    Frequency: +4.089ppm

上記の例ではntp.nict.jpが認識されている。timesync-statusのOffsetは時刻のずれ、Delayは遅延、Jitterは分散(正確さ)を示す。

次にファイアウォールを設定する。Sambaは以下の複数ポートを使うので、あらかじめそれらを開けておく。

  • 53: DNSサービス
  • 88: kerberosキー配布
  • 135: MS-RPC
  • 139: SMB
  • 389: LDAP
  • 445: SMB
  • 464: kerberosキー配布
  • 636: LDAP
  • 1024: MS-RPC
  • 3268: グローバルカタログサーバ
  • 3269: グローバルカタログサーバ

コマンド実行。

root@dc1:~# firewall-cmd --add-port=53/tcp --permanent;firewall-cmd --add-port=53/udp --permanent; \
> firewall-cmd --add-port=88/tcp --permanent;firewall-cmd --add-port=88/udp --permanent; \
> firewall-cmd --add-port=135/tcp --permanent; \
> firewall-cmd --add-port=137-138/udp --permanent; \
> firewall-cmd --add-port=139/tcp --permanent; \
> firewall-cmd --add-port=389/tcp --permanent; firewall-cmd --add-port=389/udp --permanent; \
> firewall-cmd --add-port=445/tcp --permanent; \
> firewall-cmd --add-port=464/tcp --permanent;firewall-cmd --add-port=464/udp --permanent; \
> firewall-cmd --add-port=636/tcp --permanent; \
> firewall-cmd --add-port=1024-5000/tcp --permanent; \
> firewall-cmd --add-port=3268-3269/tcp --permanent; \
> firewall-cmd --add-port=49152-65535/tcp --permanent
success
...
Warning: ALREADY_ENABLED: 3268-3269:tcp
...
success
root@dc2:~# firewall-cmd --reload
root@dc2:~# firewall-cmd --list-ports
53/tcp 88/tcp 135/tcp 139/tcp 389/tcp 445/tcp 464/tcp 636/tcp 1024-5000/tcp 49152-65535/tcp 53/udp 88/udp 137-138/udp 389/udp 464/udp

3268-3269はすでにenableと怒られてしまった。まあいいか。

ここまでで基本設定は終了。次はいよいよSambaとBind9のインストールだが、その前に必要パッケージを確認しておく。なければ apt install を実施。

  • gcc (build-essential)
  • python3-dev
  • libparse-yapp-perl
  • tcpdump
  • apparmor
  • perl
  • zlib1g
  • gnutls

SambaとBind9インストール。インストール中に"デフォルトのケルベロスバージョン5レルム:"がターミナルに現れるので、dc1で設定されているレルムを記入する。

root@dc2:~# apt update
root@dc2:~# apt -y install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle smbclient ldb-tools bind9
root@dc2:~# samba -V
Version 4.15.13-Ubuntu
root@dc2:~# named -v
BIND 9.18.28-0ubuntu0.22.04.1-Ubuntu (Extended Support Version) 
root@dc2:~# id bind
uid=114(bind) gid=123(bind) groups=123(bind)

bindというユーザも自動生成された。続いて/etc/krb5.confを編集する。

[libdefaults]
        default_realm = <レルム名>
        dns_lookup_realm = false
        dns_lookup_kdc = true

ここで、自動起動サービスを整理する。smbd, nmbd, winbindを自動起動からはずし、samba-ad-dcを自動起動設定する。

root@dc2:~# systemctl list-unit-files | egrep "samba|smbd|nmbd|winbind"
nmbd.service                               enabled         enabled
samba-ad-dc.service                        masked          enabled
smbd.service                               enabled         enabled
winbind.service                            enabled         enabled
root@dc2:~# systemctl stop smbd nmbd winbind
root@dc2:~# systemctl mask smbd nmbd winbind
root@dc2:~# systemctl disable smbd nmbd winbind
root@dc2:~# systemctl unmask samba-ad-dc
root@dc2:~# systemctl enable samba-ad-dc
root@dc2:~# systemctl daemon-reload
root@dc2:~# systemctl list-unit-files | egrep 'samba|smbd|nmbd|winbind'
nmbd.service                               masked          enabled
samba-ad-dc.service                        enabled         enabled
smbd.service                               masked          enabled
winbind.service                            masked          enabled

さて、いよいよjoinを実行する時が来た。dc1と同じオプション(/etc/samba/smb.confに記述)をつけて実行する。なお、smb.confとsecrets.tdbがあるとjoin失敗するので(上書きはしないようだ)、先にそれらを退避してからjoinする。

root@dc2:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
root@dc2:~# mv /var/lib/samba/private/secrets.tdb /var/lib/samba/private/secrets.tdb.org
root@dc2:~# samba-tool domain join <レルム名> DC -UAdministrator --dns-backend=BIND9_DLZ --realm=<レルム名> --option='max log size = 1000' --option='dns proxy = no' --option='syslog = 0' --option='panic action = /usr/share/samba/panic-action %d' --option='obey pam restrictions = yes' --option='map to guest = bad user' --option='log file = /var/log/samba/log.client' --option='passdb backend = ldapsam:"ldaps://localhost"' --option='load printers = no' --option='printcap name = /dev/null' --option='printing = bsd' --option='idmap_ldb:use rfc2307 = yes'

最後に"Joined domain XXX (SID xxxxx) as a DC"のようなメッセージが出れば成功。/etc/samba/smb.confが新しく作られるので、オプション設定が入っていることを確認しておく。

この後少々、Bind9をカスタマイズする。まずnamedのバージョンに合ったドライバーが指定されていることを確認する。

root@dc2:~# cat /var/lib/samba/bind-dns/named.conf
    # For BIND 9.18.x
    database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_18.so";

次に、named.conf編集。

root@dc2:~# vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/var/lib/samba/bind-dns/named.conf";    ←追加

keytabの指定と、パフォーマンス向上のためのDynamic DNS updatesの有効化。

root@dc2:~# ll /var/lib/samba/private/dns.keytab 
-rw-r----- 2 root bind 490 10月  25 10:20 /var/lib/samba/private/dns.keytab
root@dc2:~# vi /etc/bind/named.conf.options 
        ...
        tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";  ←追加
        minimal-responses yes;	←追加
};

bindユーザのファイル読み書き許可。

root@dc2:~# vi /etc/apparmor.d/local/usr.sbin.named 
/var/lib/samba/bind-dns/dns/** rwk,
/var/lib/samba/bind-dns/dns.keytab rlk,
/var/lib/samba/bind-dns/named.conf r,
/usr/lib/x86_64-linux-gnu/samba/**/*.so rm,
/usr/lib/x86_64-linux-gnu/samba/ldb/** rm,
/usr/lib/x86_64-linux-gnu/ldb/modules/ldb/** rm,
/var/lib/samba/private/krb5.conf r,
/var/tmp/** rwmk,
/dev/urandom rw,
/etc/gss/mech.d/ r,
/etc/gss/mech.d/** r,
root@dc2:~# systemctl reload apparmor
root@dc2:~# chgrp bind /etc/krb5.conf
root@dc2:~# ll /etc/krb5.conf
-rw-r--r-- 1 root bind 95 10月 25 10:20 /etc/krb5.conf

終了まであともう一息。IDマッピングがdc1と異なっているので合わせる。dc1でidmapのバックアップを取り、それをdc2に設置する。

[DC1作業]
root@dc1:~# tdbbackup -s .bak /var/lib/samba/private/idmap.ldb
root@dc1:~# ls -alrt /var/lib/samba/private/
...
-rw-------  1 root root   61440 10月 25 10:23 idmap.ldb.bak
root@dc1:~# rsync -av /var/lib/samba/private/idmap.ldb.bak dc2:

[DC2作業]
root@dc2:~# cd /var/lib/samba/private/
root@dc2:/var/lib/samba/private# ll idmap.ldb 
-rw------- 1 root root 1286144 10月 25 10:56 idmap.ldb
root@dc2:/var/lib/samba/private# mv idmap.ldb idmap.ldb.org
root@dc2:/var/lib/samba/private# mv ~/idmap.ldb.bak idmap.ldb
root@dc2:/var/lib/samba/private# ll idmap.ldb*
-rw------- 1 root root   61440 10月 25 11:16 idmap.ldb
-rw------- 1 root root 1286144 10月 10 10:56 idmap.ldb.org
root@bdc:/var/lib/samba/private# net cache flush

SysvolフォルダのACLをリセット。これもdc1で取ったバックアップをdc2に設置する。

[DC1作業]
root@dc1:~# cd /var/lib/samba/sysvol/
root@dc1:/var/lib/samba/sysvol# ll
...
drwxrwx---+  4 root 3000000 4096 10月  24 16:20 this.is.realm.name/
root@dc1:/var/lib/samba/sysvol# tar --xattrs --acls -cvf this.is.realm.name.tar this.is.realm.name
root@dc1:/var/lib/samba/sysvol# ll
...
drwxrwx---+  4 root 3000000  4096 10月  24 16:20 this.is.realm.name/
-rw-rw----+  1 root root    30720 10月 25 11:21 this.is.realm.name.tar
root@dc1:/var/lib/samba/sysvol# rsync -av this.is.realm.name.tar dc2:/var/lib/samba/sysvol

[DC2作業]
root@dc2:/var/lib/samba/sysvol# ll
...
drwxr-xr-x 3 root root  4096 10月 25 10:56 this.is.realm.name/
-rw-r----- 1 root root 30720 10月 25 11:22 this.is.realm.name.tar
root@dc2:/var/lib/samba/sysvol# mv this.is.realm.name this.is.realm.name.org
root@dc2:/var/lib/samba/sysvol# tar --xattrs --acls -xvf this.is.realm.name.tar 
root@dc2:/var/lib/samba/sysvol# rm this.is.realm.name.tar
root@dc2:/var/lib/samba/sysvol# ll
drwxrwx---+ 4 root 3000000 4096 10月  24 16:20 this.is.realm.name/
drwxr-xr-x  3 root root    4096 10月  25 10:56 this.is.real.name.org/
root@dc3:/var/lib/samba/sysvol# samba-tool ntacl sysvolreset

さて、いよいよBind9とSamba再起動。

root@dc2:~# systemctl restart bind9
root@dc2:~# systemctl start samba-ad-dc

これで、dc1とdc2のDCグループができた。ちなみにSambaはMaster-Slave方式ではなくMulti-Masterであり、各DCが相互にデータを複製(レプリケーション)する。ただ、FSMOという特権サーバ(=dc1)が存在するのだが。

 

2024/11/22(金)Blog 6