自宅にSamba4 Active Directoryを導入しましたので構築方法を記載します。
Active Directoryは、MicroSoft Windows Serverにある一つの機能で、企業がWindows PCのアカウント管理を一元化するために導入されています。
Windows Server機は高額で個人の手に届かないことから、今回はWindows ServerのADと互換性のあるSamba4のActive Directoryで代用する方法を記載します。
Samba4 ADの制約
Samba4のActive Directoryは、Windows Serverと比べていくつかの機能制約があります。
- SYSVOLのレプリケーションが出来ない:追加ADサーバーを構築した際、SambaはSYSVOLのレプリケーション機能(自動コピー)を持ちません。rsyncなどで対処は出来ますが相当のLinux知識は必要となります。
- Internal DNSの機能制限:SambaはADフォレストルートドメインの名前変更をサポートしていません。複数のADを稼働させる必要に迫られた場合は、Linuxのbind9に切り替える、もしくは、Windows Server機に切り替えてSIerに外部委託するほうが本業に専念できて良いと思います。
いずれの制約も企業規模が大きくなった場合に影響が出るくらいです。
1拠点であればSamba4でも十分運用に耐えれると思います。(Unixがさわれる担当は必要ですが)
環境整備とパラメータ設計
本記事は以下のハードウェア環境で構築しています。
- ハードウェア:自作PC(Core i7-10700(8C/16T) , Mem 16G)にProxmox8を構築
- OSバージョン:Ubuntu22.04LTS(ゲストOSとして2コアを割り当て)
- SAMBAバージョン:4.15.13(記事記載時点でaptに上がってる最新バージョン)
- AD構成:1台(小規模ですので当面は1台で運用します)
設定パラメータ
ADの運用を始めると設定を変えにくいため、設定パラメータは近い将来を考えて決定しておきます。
項目 | 値 | 備考 |
ドメイン名 | falcon.local.org | インターネット上に存在しない名称にする
「~.local」は使えない |
ホスト名 | ad1 | ad2, ad3の拡張ができるようにするとあとあと便利 |
IPアドレス | 192.168.0.121/24 | |
完全修飾ドメイン名(FQDN) | ad1.falcon.local.org | |
レルム | FALCON.LOCAL.ORG |
サーバーの事前設定
Windows端末との接続環境を構築
Proxmoxのコンソール画面ではコピペができませんので、Windows PCのTeratermで接続し、作業を進めるようにします。
Ubuntu側にsshをインストールします。
$ sudo apt install openssh-server
sshをインストール後、WindowsPCのteratermからSSHで接続します。
teratermはVer.4を使うほうが良いです。
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.8.0-40-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro Expanded Security Maintenance for Applications is not enabled. 0のアップデートはすぐに適用されます。 Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status Last login: Sun Sep 8 16:02:55 2024 from 192.168.0.102 falcon@ad1:~$
AD構築作業はsuper userで行うため、"sudo su"で特権を取得します。
falcon@ad1:~$ sudo su [sudo] falcon のパスワード: root@ad1:/home/falcon#
設定ファイルの編集ですが、viエディタの操作が少々苦手なので、ubuntuにプリインストールされているnanoエディタを使いました。
ファイルシステムのサポート確認
カーネルでext4のACLサポートが有効になっていることを確認します。
# 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
ホスト名の設定
ホスト名に"ad1"が設定されていることを確認します。
# hostnamectl Static hostname: ad1 Icon name: computer-vm Chassis: vm Machine ID: 13377827e5ae4da3bbeb66d6132935ad Boot ID: 7fa79480a19242268b9a6ed1e3b1f9c0 Virtualization: kvm Operating System: Ubuntu 22.04.4 LTS Kernel: Linux 6.8.0-40-generic Architecture: x86-64
hostsファイルの編集
/etc/hostsファイルに"ad1"のアドレスを追記します。
# cat /etc/hosts 127.0.0.1 localhost 192.168.0.121 ad1.falcon.local.org ad1 # 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
FQDN(ad1.falcon.local.org)にpingし、疎通できることを確認します。
# ping ad1.falcon.local.org PING ad1.falcon.local.org (192.168.0.121) 56(84) bytes of data. 64 bytes from ad1.falcon.local.org (192.168.0.121): icmp_seq=1 ttl=64 time=0.014 ms 64 bytes from ad1.falcon.local.org (192.168.0.121): icmp_seq=2 ttl=64 time=0.015 ms 64 bytes from ad1.falcon.local.org (192.168.0.121): icmp_seq=3 ttl=64 time=0.017 ms
DNS設定
DNSはsamba4に内包されるモジュールを使いますが、Ubuntuの"systemd-resolved"が"/etc/resolv.conf"を書き換えてしまうため、"systemd-resolved"を無効化し、自動起動しないようにします。
# systemctl stop systemd-resolved.service # systemctl disable systemd-resolved.service # systemctl status systemd-resolved.service ○ systemd-resolved.service - Network Name Resolution Loaded: loaded (/lib/systemd/system/systemd-resolved.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-resolved.service(8) man:org.freedesktop.resolve1(5) https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients ....
Active: inactive (dead)であれば、無効化設定は完了です。
/etc/resolve.confの作成
"/etc/resolv.conf"が、"/run/systemd/resolve/stub-resolv.conf"のシンボリックリンクとなっているため削除します。
# unlink /etc/resolv.conf
ad1のDNS用に"/etc/resolv.conf"を新規作成します。
# nano /etc/resolv.conf
設定は以下の通り記述します。後の工程でインターネットに出る必要がありますので、1番目はこのad、2番目にgoogle DNS(8.8.8.8)を設定します。
# cat /etc/resolv.conf nameserver 192.168.0.121 nameserver 8.8.8.8 search falcon.local.org
ubuntuのネットワークインタフェース設定がnetplanに移行しているため、/etc/netplanの99番に新規設定を行います。
# nano /etc/netplan/99-cfg-proxmox.yaml
設定値はresolv.confのnameserverと値を合わせます。
"ens18"はLANインタフェース名称です。この値はPC環境により変動するため、事前に「ip a」コマンドでインタフェース確認した値を記述してください。
# cat 99-cfg-proxmox.yaml # Generated by falconblog.org network: version: 2 renderer: networkd ethernets: ens18: dhcp4: no dhcp6: no addresses: - 192.168.0.121/24 gateway4: 192.168.0.1 nameservers: addresses: - [192.168.0.121, 8.8.8.8]
記述に誤りがないことを確認して、applyにより有効化します。
重要:netplanの値を間違うと通信が切断されて復旧が困難になります。記述内容は再度確認するようにします。
# netplan apply ** (process:22400): WARNING **: 17:10:45.523: `gateway4` has been deprecated, use default routes instead.
参考:"gateway4"の記述でWARNINGが出力されます。これはnetplan設定の移行期で記述が古いとされているため、現時点では放置しても大丈夫のようです。(今後のバージョンからはErrorになるかもしれません。)
NTPの設定
ADのkerberos認証においては時刻同期が必要であるため、今回はNTPサーバー機能を持つchronyを導入します。
# apt install chrony
chrony.confに設定を記述します。
# nano /etc/chrony/chrony.conf
ntpサーバーはNICTのみとし、デフォルトのubuntu ntpサーバーはすべてコメントアウトします。
またDNSサーバーの同期対象マシンをセグメント内の端末(192.168.0.0/24)に制限するよう追記します。
#pool ntp.ubuntu.com iburst maxsources 4 #pool 0.ubuntu.pool.ntp.org iburst maxsources 1 #pool 1.ubuntu.pool.ntp.org iburst maxsources 1 #pool 2.ubuntu.pool.ntp.org iburst maxsources 2 pool ntp.nict.jp iburst allow 192.168.0.0/24
chronyサービスを再起動し、時刻同期が出来ていることを確認します。
# systemctl restart chrony # systemctl status chrony ● chrony.service - chrony, an NTP client/server Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-09-06 11:22:11 JST; 6s ago Docs: man:chronyd(8) man:chronyc(1) man:chrony.conf(5) Process: 12491 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS) Main PID: 12501 (chronyd) Tasks: 2 (limit: 4608) Memory: 1.4M CPU: 36ms CGroup: /system.slice/chrony.service tq12501 /usr/sbin/chronyd -F 1 mq12502 /usr/sbin/chronyd -F 1 9月 06 11:22:11 ad1 systemd[1]: Starting chrony, an NTP client/server... 9月 06 11:22:11 ad1 chronyd[12501]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDN> 9月 06 11:22:11 ad1 chronyd[12501]: Frequency -0.185 +/- 22.681 ppm read from /var/lib/chrony/chrony.drift 9月 06 11:22:11 ad1 chronyd[12501]: Using right/UTC timezone to obtain leap second data 9月 06 11:22:11 ad1 chronyd[12501]: Loaded seccomp filter (level 1) 9月 06 11:22:11 ad1 systemd[1]: Started chrony, an NTP client/server.
同期ソースの確認も行っておきます。
# chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ ntp-b2.nict.go.jp 1 6 177 3 -327us[ -327us] +/- 5125us ^* ntp-k1.nict.jp 1 6 177 4 -172us[ -188us] +/- 2851us ^+ ntp-a3.nict.go.jp 1 6 177 4 -490us[ -490us] +/- 5277us ^+ ntp-a2.nict.go.jp 1 6 177 4 -386us[ -386us] +/- 5458us
chronyサービスは、インストール時に自動起動で設定されていますので、後処理は不要でした。
# systemctl list-unit-files | grep chrony chrony-dnssrv@.service static - chrony.service enabled enabled chronyd.service alias - chrony-dnssrv@.timer disabled enabled
SAMBAインストールと設定
SAMBAのインストール
aptコマンドでSAMBAインストールを行います。
# apt-get install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
Sambaバージョンにより必要モジュールが変わる可能性があるため、構築時は以下HPも参照するようにしてください。
インストールが始まると、レルム、Kerberosサーバー名(FQDN)、Kerberos管理サーバー名(FQDN)を入れるピンク色の画面になりますので、最初に決めた値を入力していきます。
- Realm: FALCON.LOCAL.ORG (大文字で入れる)
- Kerberos servers: ad1.falcon.local.org
- Administrative server: ad1.falcon.local.org
参考:ここで入力を間違えた場合は、apt purgeコマンドでモジュールを削除し、インストールからやり直しするほうが手っ取り早いです。
# apt-get purge acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
不要サービスの停止
samba-ad-dcの動作障害になるsamba、nmbd、winbindサービスを停止します。
# systemctl stop smbd nmbd winbind # systemctl disable smbd nmbd winbind # systemctl mask smbd nmbd winbind
samba-ad-dcの自動起動設定
マシン起動時にsamba-ad-dcが起動するようsystemctlの設定を行います。
後作業でも良いのですが、忘れてしまいがちなのでこのタイミングで処置しておきます。
# systemctl unmask samba-ad-dc # systemctl enable samba-ad-dc
Active Directoryプロビジョニング
samba-toolでADの設定を行います。
/etc/smb.confが存在すると設定に失敗しますので、リネームしておきます。削除しても構いません。
# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
samba-toolを用いてプロビジョニング設定を行います。
インターネットサイトに出る必要があるため、DNS forwarderのみ8.8.8.8(google_DNS)に設定します。
# samba-tool domain provision --use-rfc2307 --interactives Realm [FALCON.LOCAL.ORG]: そのままEnter Domain [FALCON]: そのままEnter Server Role (dc, member, standalone) [dc]: そのままEnter DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: そのままEnter DNS forwarder IP address (write 'none' to disable forwarding) [192.168.0.121]: 8.8.8.8 ←入力する Administrator password: (入力する) Retype password: (入力する)
オプション設定の詳細は、以下HPを参考にしてください。
パスワードの入力が終わると、pythonスクリプトにより設定が行われます。
これまでの設定に不備があると、このスクリプト動作中に止まります。
設定をミスった場合は、apt purgeでアプリをアンインストールし、最初からやり直すほうが早いです。
INFO 2024-09-06 11:25:53,613 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2108: Looking up IPv4 addresses INFO 2024-09-06 11:25:53,613 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2125: Looking up IPv6 addresses WARNING 2024-09-06 11:25:53,613 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2132: No IPv6 address will be assigned INFO 2024-09-06 11:25:53,768 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2278: Setting up secrets.ldb INFO 2024-09-06 11:25:54,092 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2283: Setting up the registry INFO 2024-09-06 11:25:54,297 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2286: Setting up the privileges database INFO 2024-09-06 11:25:54,924 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2289: Setting up idmap db INFO 2024-09-06 11:25:55,415 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2296: Setting up SAM db INFO 2024-09-06 11:25:55,528 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #880: Setting up sam.ldb partitions and settings INFO 2024-09-06 11:25:55,529 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #892: Setting up sam.ldb rootDSE INFO 2024-09-06 11:25:55,606 pid:13456 /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 2024-09-06 11:25:55,806 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1383: Adding DomainDN: DC=falcon,DC=local,DC=org INFO 2024-09-06 11:25:55,936 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1415: Adding configuration container INFO 2024-09-06 11:25:56,072 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1430: Setting up sam.ldb schema INFO 2024-09-06 11:25:57,759 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1448: Setting up sam.ldb configuration data INFO 2024-09-06 11:25:57,850 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1489: Setting up display specifiers INFO 2024-09-06 11:25:58,925 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1497: Modifying display specifiers and extended rights INFO 2024-09-06 11:25:58,948 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1504: Adding users container INFO 2024-09-06 11:25:58,948 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1510: Modifying users container INFO 2024-09-06 11:25:58,949 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1513: Adding computers container INFO 2024-09-06 11:25:58,950 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1519: Modifying computers container INFO 2024-09-06 11:25:58,950 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1523: Setting up sam.ldb data INFO 2024-09-06 11:25:59,025 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1553: Setting up well known security principals INFO 2024-09-06 11:25:59,050 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1567: Setting up sam.ldb users and groups INFO 2024-09-06 11:25:59,113 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1575: Setting up self join Repacking database from v1 to v2 format (first record CN=Network-Address,CN=Schema,CN=Configuration,DC=falcon,DC=local,DC=org) Repack: re-packed 10000 records so far Repacking database from v1 to v2 format (first record CN=remoteStorageServicePoint-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=falcon,DC=local,DC=org) Repacking database from v1 to v2 format (first record CN=82112ba0-7e4c-4a44-89d9-d46c9612bf91,CN=Operations,CN=DomainUpdates,CN=System,DC=falcon,DC=local,DC=org) INFO 2024-09-06 11:26:01,487 pid:13456 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1200: Adding DNS accounts INFO 2024-09-06 11:26:01,776 pid:13456 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1234: Creating CN=MicrosoftDNS,CN=System,DC=falcon,DC=local,DC=org INFO 2024-09-06 11:26:01,787 pid:13456 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1247: Creating DomainDnsZones and ForestDnsZones partitions INFO 2024-09-06 11:26:02,062 pid:13456 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1252: Populating DomainDnsZones and ForestDnsZones partitions Repacking database from v1 to v2 format (first record DC=f.root-servers.net,DC=RootDNSServers,CN=MicrosoftDNS,DC=DomainDnsZones,DC=falcon,DC=local,DC=org) Repacking database from v1 to v2 format (first record DC=_ldap._tcp.2b89b40a-ac64-4612-a862-3af6228de26b.domains,DC=_msdcs.falcon.local.org,CN=MicrosoftDNS,DC=ForestDnsZones,DC=falcon,DC=local,DC=org) INFO 2024-09-06 11:26:02,835 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2012: Setting up sam.ldb rootDSE marking as synchronized INFO 2024-09-06 11:26:02,879 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2017: Fixing provision GUIDs INFO 2024-09-06 11:26:03,823 pid:13456 /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 2024-09-06 11:26:03,823 pid:13456 /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! INFO 2024-09-06 11:26:04,022 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2082: Setting up fake yp server settings INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #487: Once the above files are installed, your Samba AD server will be ready to use INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #492: Server Role: active directory domain controller INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #493: Hostname: ad1 INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #494: NetBIOS Domain: FALCON INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #495: DNS Domain: falcon.local.org INFO 2024-09-06 11:26:04,221 pid:13456 /usr/lib/python3/dist-packages/samba/provision/__init__.py #496: DOMAIN SID: S-1-5-21-3194861734-1142622192-218957921
作成されたsmb.confの確認をします。
# cat /etc/samba/smb.conf # Global parameters [global] dns forwarder = 8.8.8.8 netbios name = AD1 realm = FALCON.LOCAL.ORG server role = active directory domain controller workgroup = FALCON idmap_ldb:use rfc2307 = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/falcon.local.org/scripts read only = No
Kerberosファイルのコピー
Kerberosファイル(krb5.conf)も生成されているのでコピーします。
krb5.confは手動でコピーする必要があります。
# mv /etc/krb5.conf /etc/krb5.conf.org # cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
/etc/krb5.confの内容も確認します。
# cat /etc/krb5.conf [libdefaults] default_realm = FALCON.LOCAL.ORG dns_lookup_realm = false dns_lookup_kdc = true [realms] FALCON.LOCAL.ORG = { default_domain = falcon.local.org } [domain_realm] ad1 = FALCON.LOCAL.ORG
Samba AD起動と動作確認
samba-ad-dcを起動し、動作状態を確認します。
# systemctl start samba-ad-dc # systemctl status samba-ad-dc ● samba-ad-dc.service - Samba AD Daemon Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-09-06 11:24:35 JST; 2min 11s ago Docs: man:samba(8) man:samba(7) man:smb.conf(5) Main PID: 13025 (samba) Status: "samba: ready to serve connections..." Tasks: 60 (limit: 4608) Memory: 200.5M CPU: 1.528s CGroup: /system.slice/samba-ad-dc.service tq13025 "samba: root process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13026 "samba: tfork waiter process(13027)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13027 "samba: task[s3fs] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13028 "samba: tfork waiter process(13030)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13029 "samba: tfork waiter process(13031)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13030 "samba: task[rpc] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13031 /usr/sbin/smbd -D "--option=server role check:inhibit=yes" --foreground "" tq13032 "samba: tfork waiter process(13033)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13033 "samba: task[nbt] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13034 "samba: tfork waiter process(13035)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13035 "samba: task[wrepl] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13036 "samba: tfork waiter process(13038)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13037 "samba: tfork waiter process(13039)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13038 "samba: task[rpc] pre-forked worker(0)" "" "" "" "" "" "" "" "" "" "" tq13039 "samba: task[ldap] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13040 "samba: tfork waiter process(13041)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13041 "samba: task[rpc] pre-forked worker(1)" "" "" "" "" "" "" "" "" "" "" tq13042 "samba: tfork waiter process(13044)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13043 "samba: tfork waiter process(13045)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13044 "samba: task[cldap] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13045 "samba: task[rpc] pre-forked worker(2)" "" "" "" "" "" "" "" "" "" "" tq13046 "samba: tfork waiter process(13047)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13047 "samba: task[kdc] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13048 "samba: tfork waiter process(13049)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13049 "samba: task[rpc] pre-forked worker(3)" "" "" "" "" "" "" "" "" "" "" tq13050 "samba: tfork waiter process(13052)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13051 "samba: tfork waiter process(13053)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13052 "samba: task[drepl] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13053 "samba: task[kdc] pre-forked worker(0)" "" "" "" "" "" "" "" "" "" "" tq13054 "samba: tfork waiter process(13055)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13055 "samba: task[kdc] pre-forked worker(1)" "" "" "" "" "" "" "" "" "" "" tq13056 "samba: tfork waiter process(13058)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13057 "samba: tfork waiter process(13059)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13058 "samba: task[winbindd] pre-fork master" "" "" "" "" "" "" "" "" "" "" tq13059 "samba: task[kdc] pre-forked worker(2)" "" "" "" "" "" "" "" "" "" "" tq13060 "samba: tfork waiter process(13063)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13061 "samba: tfork waiter process(13064)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13062 "samba: tfork waiter process(13065)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13063 "samba: task[kdc] pre-forked worker(3)" "" "" "" "" "" "" "" "" "" "" tq13064 "samba: task[ntp_signd] pre-fork master" "" "" "" "" "" "" "" "" "" tq13065 /usr/sbin/winbindd -D "--option=server role check:inhibit=yes" --foreground "" tq13066 "samba: tfork waiter process(13067)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13067 "samba: task[kcc] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13068 "samba: tfork waiter process(13069)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13069 "samba: task[dnsupdate] pre-fork master" "" "" "" "" "" "" "" "" "" tq13070 "samba: tfork waiter process(13071)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13071 "samba: task[dns] pre-fork master" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13078 /usr/sbin/smbd -D "--option=server role check:inhibit=yes" --foreground "" tq13079 /usr/sbin/smbd -D "--option=server role check:inhibit=yes" --foreground "" tq13083 "winbindd: domain child [FALCONBLOG]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""> tq13084 "winbindd: idmap child" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "> tq13097 "samba: tfork waiter process(13098)" "" "" "" "" "" "" "" "" "" "" "" "" "" lines 1-64 tq13098 "samba: task[ldap] pre-forked worker(0)" "" "" "" "" "" "" "" "" "" tq13099 "samba: tfork waiter process(13100)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13100 "samba: task[ldap] pre-forked worker(1)" "" "" "" "" "" "" "" "" "" tq13101 "samba: tfork waiter process(13102)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13102 "samba: task[ldap] pre-forked worker(2)" "" "" "" "" "" "" "" "" "" tq13103 "samba: tfork waiter process(13104)" "" "" "" "" "" "" "" "" "" "" "" "" "" tq13104 "samba: task[ldap] pre-forked worker(3)" "" "" "" "" "" "" "" "" "" mq13105 /usr/lib/x86_64-linux-gnu/samba/samba-bgqd --ready-signal-fd=47 --parent-watch-fd=13 --debuglevel=0 -F 9月 06 11:24:35 ad1 samba[13025]: binary_smbd_main: samba: using 'prefork' process model 9月 06 11:24:35 ad1 systemd[1]: Started Samba AD Daemon. 9月 06 11:24:35 ad1 smbd[13031]: [2024/09/06 11:24:35.930489, 0] ../../source3/smbd/server.c:1734(main) 9月 06 11:24:35 ad1 smbd[13031]: smbd version 4.15.13-Ubuntu started. 9月 06 11:24:35 ad1 smbd[13031]: Copyright Andrew Tridgell and the Samba Team 1992-2021 9月 06 11:24:35 ad1 winbindd[13065]: [2024/09/06 11:24:35.972122, 0] ../../source3/winbindd/winbindd.c:1722(main) 9月 06 11:24:35 ad1 winbindd[13065]: winbindd version 4.15.13-Ubuntu started. 9月 06 11:24:35 ad1 winbindd[13065]: Copyright Andrew Tridgell and the Samba Team 1992-2021 9月 06 11:24:36 ad1 winbindd[13065]: [2024/09/06 11:24:36.213194, 0] ../../source3/winbindd/winbindd_cache.c:3085(initialize_win> 9月 06 11:24:36 ad1 winbindd[13065]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
「Active Running」が表示され、「Started Samba AD Daemon」であれば、ADは正常動作しています。
参考:以下はドメインが重複していた場合のFailログ(一部)になります。この場合はインストールからやり直しが良いでしょう。
9月 06 10:49:10 ad1 samba[11057]: [2024/09/06 10:49:10.072324, 0] ../../lib/util/util_runcmd.c:355(samba_runcmd_io_handler) 9月 06 10:49:10 ad1 samba[11057]: /usr/sbin/samba_dnsupdate: File "/usr/sbin/samba_dnsupdate", line 181, in get_credentials 9月 06 10:49:10 ad1 samba[11057]: [2024/09/06 10:49:10.072344, 0] ../../lib/util/util_runcmd.c:355(samba_runcmd_io_handler) 9月 06 10:49:10 ad1 samba[11057]: /usr/sbin/samba_dnsupdate: creds.get_named_ccache(lp, ccachename) 9月 06 10:49:10 ad1 samba[11057]: [2024/09/06 10:49:10.072360, 0] ../../lib/util/util_runcmd.c:355(samba_runcmd_io_handler) 9月 06 10:49:10 ad1 samba[11057]: /usr/sbin/samba_dnsupdate: RuntimeError: kinit for AD1$@FALCONBLOG.ORG failed (Cannot contact> 9月 06 10:49:10 ad1 samba[11057]: [2024/09/06 10:49:10.072383, 0] ../../lib/util/util_runcmd.c:355(samba_runcmd_io_handler) 9月 06 10:49:10 ad1 samba[11057]: /usr/sbin/samba_dnsupdate: 9月 06 10:49:10 ad1 samba[11057]: [2024/09/06 10:49:10.091632, 0] ../../source4/dsdb/dns/dns_update.c:85(dnsupdate_nameupdate_do> 9月 06 10:49:10 ad1 samba[11057]: dnsupdate_nameupdate_done: Failed DNS update with exit code 1
時刻同期chronyの設定
Kerberos認証を機能させるには時刻同期が必須となります。
今回は時刻同期にchronyを使いましたのでchronyとKerberosの紐づけ設定を進めます。
参考:内蔵NTPを使う場合は以下HPを参照してください。
ntp_signdが_chronyグループからアクセスできるように権限を与えます。
# chown root:_chrony /var/lib/ntp_signd/ # chmod 750 /var/lib/ntp_signd/
/etc/chrony/chrony.confを編集します。
# nano /etc/chrony/chrony.conf
chrony.confの適当な場所に以下の設定を追記します。
# ipaddress of this DC bindcmdaddress 192.168.0.121 ntpsigndsocket /var/lib/ntp_signd
設定反映してステータス確認をします。「MS-SNTP authentication enabled」が出ていれば紐づけ設定は完了です。
# systemctl restart chronyd # 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 Sun 2024-09-08 19:31:49 JST; 9s ago Docs: man:chronyd(8) man:chronyc(1) man:chrony.conf(5) Process: 22796 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS) Main PID: 22807 (chronyd) Tasks: 2 (limit: 4608) Memory: 1.3M CPU: 34ms CGroup: /system.slice/chrony.service tq22807 /usr/sbin/chronyd -F 1 mq22808 /usr/sbin/chronyd -F 1 9月 08 19:31:49 ad1 systemd[1]: Starting chrony, an NTP client/server... 9月 08 19:31:49 ad1 chronyd[22807]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +A> 9月 08 19:31:49 ad1 chronyd[22807]: Frequency -0.176 +/- 0.051 ppm read from /var/lib/chrony/chrony.drift 9月 08 19:31:49 ad1 chronyd[22807]: Using right/UTC timezone to obtain leap second data 9月 08 19:31:49 ad1 chronyd[22807]: MS-SNTP authentication enabled 9月 08 19:31:49 ad1 chronyd[22807]: Loaded seccomp filter (level 1) 9月 08 19:31:49 ad1 systemd[1]: Started chrony, an NTP client/server. 9月 08 19:31:54 ad1 chronyd[22807]: Selected source 61.205.120.130 (ntp.nict.jp) 9月 08 19:31:54 ad1 chronyd[22807]: System clock TAI offset set to 37 seconds
以上で設定作業は終了です。
Samba ADの動作確認
サーバー動作確認
Listenポートの確認
net-toolをインストールし、Listenポートを確認することで、ADのサービスポートが動いていることを確認します。
ubuntu標準のdaemonが動いていると正常に動作しません。その場合は、systemctl stop, disableでkillしておきます。
# apt install net-tools # netstat -antp | egrep "sambad|samba" tcp 0 0 0.0.0.0:3269 0.0.0.0:* LISTEN 13538/samba: task[l tcp 0 0 0.0.0.0:3268 0.0.0.0:* LISTEN 13538/samba: task[l tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 13538/samba: task[l tcp 0 0 0.0.0.0:135 0.0.0.0:* LISTEN 13535/samba: task[r tcp 0 0 0.0.0.0:49153 0.0.0.0:* LISTEN 13535/samba: task[r tcp 0 0 0.0.0.0:49152 0.0.0.0:* LISTEN 13528/samba: task[r tcp 0 0 0.0.0.0:49154 0.0.0.0:* LISTEN 13535/samba: task[r tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 13569/samba: task[d tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 13545/samba: task[k tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 13538/samba: task[l tcp 0 0 0.0.0.0:464 0.0.0.0:* LISTEN 13545/samba: task[k tcp6 0 0 :::3269 :::* LISTEN 13538/samba: task[l tcp6 0 0 :::3268 :::* LISTEN 13538/samba: task[l tcp6 0 0 :::636 :::* LISTEN 13538/samba: task[l tcp6 0 0 :::135 :::* LISTEN 13535/samba: task[r tcp6 0 0 :::49153 :::* LISTEN 13535/samba: task[r tcp6 0 0 :::49152 :::* LISTEN 13528/samba: task[r tcp6 0 0 :::49154 :::* LISTEN 13535/samba: task[r tcp6 0 0 :::53 :::* LISTEN 13569/samba: task[d tcp6 0 0 :::88 :::* LISTEN 13545/samba: task[k tcp6 0 0 :::389 :::* LISTEN 13538/samba: task[l tcp6 0 0 :::464 :::* LISTEN 13545/samba: task[k
Samba ADで使われるポートは以下ページを参照してください。
AD機能レベルの確認
samba-toolでAD機能バージョンを確認します。
# samba-tool domain level show Domain and forest function level for domain 'DC=falcon,DC=local,DC=org' Forest function level: (Windows) 2008 R2 Domain function level: (Windows) 2008 R2 Lowest function level of a DC: (Windows) 2008 R2
Windows 2008 R2と古く感じますが、機能レベルとしては問題ないです。
kerberos、ldap、Aレコード確認
kerberos、ldap、Aレコードの名前解決が機能することを確認します。
# host -t SRV _kerberos._udp.falcon.local.org _kerberos._udp.falcon.local.org has SRV record 0 100 88 ad1.falcon.local.org. # host -t SRV _ldap._tcp.falcon.local.org _ldap._tcp.falcon.local.org has SRV record 0 100 389 ad1.falcon.local.org. # host -t A falcon.local.org falcon.local.org has address 192.168.0.121 # host -t A ad1.falcon.local.org ad1.falcon.local.org has address 192.168.0.121
Samba Clientを使ったリソース確認
samba-clientをインストールし、ADのリソースが提供されていることを確認します。
workgroupがno workgroupとなっていますが問題は無いと思います。
# apt install samba-client # smbclient -L falcon.local.org -N Anonymous login successful Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk IPC$ IPC IPC Service (Samba 4.15.13-Ubuntu) SMB1 disabled -- no workgroup available
kerberos認証の動作確認
以下コマンドでkerberosの動作確認を行います。
# smbclient //localhost/netlogon -UAdministrator -c 'ls' Password for [FALCON\Administrator]: . D 0 Fri Sep 6 11:25:55 2024 .. D 0 Fri Sep 6 11:25:59 2024 65220172 blocks of size 1024. 50764444 blocks available # kinit administrator Password for administrator@FALCON.LOCAL.ORG: Warning: Your password will expire in 39 days on 2024年10月18日 11時25分59秒 # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@FALCON.LOCAL.ORG Valid starting Expires Service principal 2024-09-08T22:07:07 2024-09-09T08:07:07 krbtgt/FALCON.LOCAL.ORG@FALCON.LOCAL.ORG renew until 2024-09-09T22:07:05
構築用DNSの削除
構築時のDNSに8.8.8.8を通していますが、今後は内部DNSでフォワードされ、不要な設定となりますのでコメントアウト等で書き換えておきます。
WindowsPCとの接続検証後に設定しても問題はありません。
/etc/resolv.confの修正
# cat /etc/resolv.conf nameserver 192.168.0.121 #nameserver 8.8.8.8 search falcon.local.org
/etc/netplan/99-cfg-proxmox.yamlの修正
# cat /etc/netplan/99-cfg-proxmox.yaml # Generated by VMWare customization engine. network: version: 2 renderer: networkd ethernets: ens18: dhcp4: no dhcp6: no addresses: - 192.168.0.121/24 gateway4: 192.168.0.1 nameservers: addresses: # - [192.168.0.121, 8.8.8.8] - 192.168.0.121
WindowsPCクライアントの設定
Samba ADが構築出来ましたので、いよいよWindowsPCをADに参加させてみます。
ネットワークとインターネットの設定→アダプタのオプションを変更→インターネットプロトコルバージョン4→プロパティでDNSを今回構築したADのIPアドレスに設定します。
コマンドプロンプトからnslookupコマンドでDNS動作を確認します。
c:\>nslookup falcon.local.org サーバー: UnKnown Address: 192.168.0.121 名前: falcon.local.org Address: 192.168.0.121
Windowsマーク→設定→ホーム→詳細情報→システムの詳細情報→コンピュータ名に進み、ドメイン設定の変更をクリックします。
所属するグループに今回設定したドメインを記入し、OKをクリックします。
ドメイン参加の認証要求がありますので、ユーザー名:administrator、パスワード:ADプロビジョニング時に設定したもの、を入れます。
ドメイン参加が認められると「ドメインへようこそ。」がでますので、そのまま再起動します。
再起動後、(ADドメイン名)\administratorでログインできることを確認します。
ログイン後、システムのプロパティを確認し、ドメインに参加出来ていることを確認します。
以上でPCクライアントの設定は完了です。
AD管理ツールRSATの導入
ADの管理はLinuxコマンドでも出来るのですが、直感的に作業ができないため、Microsoftが提供しているRSATというツールを使うのが便利です。
RSATはWindows10に標準インストールされていますが、デフォルトで無効化されているため、個別に有効化設定を行う必要があります。
有効化手順は以下の通りです。
1.コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化
Active Directory ライトウェイトディレクトリサービスにチェックし、インストール
2.Windowsマーク→設定→ホーム→オプション機能→機能の追加をクリックし、以下機能を追加
- RSAT: Active Directory 証明書サービス・ツール
- RSAT:グループポリシー管理ツール
- RSAT:サーバーマネージャー
有効化が完了するとWindows管理ツールにAD関係のツールが出てきます。
AD配下のアカウントから「Active Directory ユーザーとコンピューター」を起動すると、Windows Serverのサーバーマネージャと同じ画面が出ますので、GUIでアカウント作成などが出来るようになります。
Samba4 ADは高コスパ
Samba4でActive Directoryを組んでみましたが、コマンド類が特殊である上、ネットワークの知識もふんだんに必要であるため、高難度でした。
しかし、機能的にはWindows Serverと遜色がありませんし、ユーザーライセンス(CAL)も不要のため、労力以上のコストパフォーマンスが得られます。
ADの自宅運用は初めてですので、これから慣れていき、運用ノウハウを記事にしたいと思います。