💃

Raspberry Pi 4、Ubuntu 22.04 LTS、Samba 4を使ってActive DirectoryのDCを構築する

2022/06/17に公開

はじめに

Active Directory + WPA Enterpriseに関する検証が必要になったので、Raspberry Pi 4、Samba 4を使って検証環境を構築しました。
似たような記事は沢山ありますが、Ubuntu 22.04 LTS、Samba 4環境についての備忘録として残しておきます。

環境

ハードウェア的な環境は以下の通りです。

ソフトウェア的な環境は以下の通りです。

  • OS: Ubuntu 22.04 LTS
    • カーネル: 5.15.0-1011-raspi
  • Samba: 4.15.5
Ubuntuに関する詳細
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

$ uname -a
Linux dc1 5.15.0-1011-raspi #13-Ubuntu SMP PREEMPT Thu Jun 2 11:44:34 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
Sambaパッケージに関する詳細
$ dpkg -l | grep -i samba
ii  libwbclient0:arm64                2:4.15.5~dfsg-0ubuntu5                        arm64        Samba winbind client library
ii  python3-samba                     2:4.15.5~dfsg-0ubuntu5                        arm64        Python 3 bindings for Samba
ii  samba                             2:4.15.5~dfsg-0ubuntu5                        arm64        SMB/CIFS file, print, and login server for Unix
ii  samba-common                      2:4.15.5~dfsg-0ubuntu5                        all          common files used by both the Samba server and client
ii  samba-common-bin                  2:4.15.5~dfsg-0ubuntu5                        arm64        Samba common files used by both the server and the client
ii  samba-dsdb-modules:arm64          2:4.15.5~dfsg-0ubuntu5                        arm64        Samba Directory Services Database
ii  samba-libs:arm64                  2:4.15.5~dfsg-0ubuntu5                        arm64        Samba core libraries
ii  samba-vfs-modules:arm64           2:4.15.5~dfsg-0ubuntu5                        arm64        Samba Virtual FileSystem plugins

構築するActive Directory環境

Sambaを使ってActive Directory(AD)のドメインコントローラ(DC)を構築します。構成は以下の通りです。

  • ドメインコントローラ:
    • ホスト名: dc1
    • 完全修飾ドメイン名(FQDN): dc1.ad.nayutaya.jp
    • IPアドレス/マスク: 192.168.1.214/24
  • レルム: ad.nayutaya.jp
  • ADドメイン名: ad

一般的な設定

Ubuntuの一般的な設定を行います。本章の内容はActive Directoryの本質とは関係なく、単なるメモです。

ホスト名の設定

ホスト名を設定します。合わせて/etc/hostsも修正しておきます。

$ sudo hostnamectl set-hostname dc1
$ sudo vim /etc/hosts
$ cat /etc/hosts
127.0.0.1 localhost
192.168.1.214 dc1.ad.nayutaya.jp dc1
...

NTPサーバの設定

NTPサーバをntp.nict.jpに設定します。systemd-timesyncdサービスのドロップインファイルを使って設定します。

$ sudo mkdir /etc/systemd/timesyncd.conf.d/
$ cat <<EOS | sudo tee /etc/systemd/timesyncd.conf.d/10-ntp.conf
[Time]
NTP=ntp.nict.jp
EOS

$ sudo systemctl restart systemd-timesyncd.service
$ timedatectl timesync-status
       Server: 61.205.120.130 (ntp.nict.jp)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 1
    Reference: nict
    Precision: 1us (-20)
Root distance: 0 (max: 5s)
       Offset: +1.963ms
        Delay: 9.051ms
       Jitter: 0
 Packet count: 1
    Frequency: +2.881ppm

タイムゾーンの設定

タイムゾーンを日本標準時(JST)に設定します。

$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl
               Local time: Thu 2022-06-16 13:59:34 JST
           Universal time: Thu 2022-06-16 04:59:34 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

スワップメモリの設定

メモリが4GBでは少し心許ないので、2GBのスワップメモリを設定します。

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       183Mi       2.9Gi       3.0Mi       626Mi       3.4Gi
Swap:             0B          0B          0B

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
$ sudo mkswap /swapfile
$ sudo chmod 600 /swapfile
$ sudo swapon /swapfile
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       176Mi       880Mi       3.0Mi       2.7Gi       3.3Gi
Swap:          2.0Gi          0B       2.0Gi

$ echo "/swapfile  swap  swap  defaults  0  0" | sudo tee -a /etc/fstab
$ cat /etc/fstab
LABEL=writable	/	ext4	discard,errors=remount-ro	0 1
LABEL=system-boot       /boot/firmware  vfat    defaults        0       1
/swapfile  swap  swap  defaults  0  0

$ sudo reboot

# 再起動

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       180Mi       2.9Gi       3.0Mi       650Mi       3.4Gi
Swap:          2.0Gi          0B       2.0Gi

Sambaのセットアップ

Sambaをセットアップしていきます。地味に手数が多いです。

DNSの設定変更 その1

Sambaの内部DNSを使用するため、systemd-resolvedサービスを無効化します。また、一時的にGoogle Public DNSを使用するように設定します。

$ sudo systemctl disable systemd-resolved.service
$ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

パッケージのインストール

Sambaに必要なパッケージをインストールします。

$ sudo apt install acl attr dnsutils krb5-config krb5-user samba samba-dsdb-modules samba-vfs-modules smbclient winbind

設定ファイルの待避

設定ファイルが存在するとプロビジョニングに失敗するため、既存の設定ファイルを待避します。(削除しても構いません)

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.org
$ sudo mv /etc/krb5.conf /etc/krb5.conf.org

プロビジョニング

Sambaのプロビジョニングを実施します。レルム、ADドメイン名、サーバの役割、DNSバックエンド、DNSの転送先、Administratorユーザのパスワードを設定します。
最後のパスワード以外、デフォルト値([]内に示されている値)をそのまま設定しています。

$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [AD.NAYUTAYA.JP]:
Domain [AD]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [8.8.8.8]:
Administrator password:
Retype password:
...

設定ファイルのコピー、確認

生成された/etc/samba/smb.confの内容を確認します。

$ cat /etc/samba/smb.conf
# Global parameters
[global]
	dns forwarder = 8.8.8.8
	netbios name = DC1
	realm = AD.NAYUTAYA.JP
	server role = active directory domain controller
	workgroup = AD
	idmap_ldb:use rfc2307 = yes

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

[netlogon]
	path = /var/lib/samba/sysvol/ad.nayutaya.jp/scripts
	read only = No

生成されたKerberosの設定ファイルをコピーし、内容を確認します。

$ sudo cp /var/lib/samba/private/krb5.conf /etc/
$ cat /etc/krb5.conf
[libdefaults]
	default_realm = AD.NAYUTAYA.JP
	dns_lookup_realm = false
	dns_lookup_kdc = true

[realms]
AD.NAYUTAYA.JP = {
	default_domain = ad.nayutaya.jp
}

[domain_realm]
	dc1 = AD.NAYUTAYA.JP

不要なサービスの無効化

smbdサービス、nmbdサービス、winbindサービスを停止し、自動的に起動しないように設定します。

$ sudo systemctl stop smbd.service nmbd.service winbind.service
$ sudo systemctl disable smbd.service nmbd.service winbind.service

ADサービスの有効化

samba-ad-dcサービスのマスクを解除し、開始します。

$ sudo systemctl unmask samba-ad-dc.service
$ sudo systemctl enable samba-ad-dc.service
$ sudo systemctl start samba-ad-dc.service
$ systemctl status samba-ad-dc.service
● samba-ad-dc.service - Samba AD Daemon
     Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-16 14:11:54 JST; 11s ago
       Docs: man:samba(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 3579 (samba)
     Status: "samba: ready to serve connections..."
      Tasks: 62 (limit: 4415)
     Memory: 246.3M
        CPU: 12.402s
     CGroup: /system.slice/samba-ad-dc.service
...

DNSの設定変更 その2

Sambaの内部DNSを使用するように設定します。

$ echo -e "nameserver 127.0.0.1\nsearch ad.nayutaya.jp" | sudo tee /etc/resolv.conf

動作確認

Sambaサービス、DNSの動作を確認します。

$ sudo samba-tool computer list
DC1$

$ smbclient //localhost/netlogon -UAdministrator -c 'ls'
Password for [AD\Administrator]:
  .                                   D        0  Thu Jun 16 14:08:05 2022
  ..                                  D        0  Thu Jun 16 14:08:24 2022

		487987876 blocks of size 1024. 455212564 blocks available

$ host -t SRV _ldap._tcp.ad.nayutaya.jp
_ldap._tcp.ad.nayutaya.jp has SRV record 0 100 389 dc1.ad.nayutaya.jp.

$ host -t SRV _kerberos._udp.ad.nayutaya.jp
_kerberos._udp.ad.nayutaya.jp has SRV record 0 100 88 dc1.ad.nayutaya.jp.

$ host -t A ad.nayutaya.jp
ad.nayutaya.jp has address 192.168.1.214

おわりに

駆け足になりましたが、Raspberry Pi 4、Ubuntu 22.04 LTS、Samba 4を使ったActive Directory環境の基本的な構築は以上です。
何かの参考になれば幸いです。

参考

https://blog.inaho.space/post/1_bs41ajxe

関連

https://zenn.dev/yuyakato/articles/2f7f280b3d1c1e

Discussion