前提条件
※プライマリ(192.168.1.11)とセカンダリ(192.168.1.12)の2台を設定
※ddnsは別のbindサーバーが担うので設定しない
※ntpサーバーは外部のものを使うので設定しない
※プライマリのみをファイルサーバーにする
・ Ubuntu: 22.04.4
・ samba: 4.15.13
プライマリとセカンダリ共通の設定手順
ホスト名をFQDNにする。
# hostnamectl set-hostname [ホスト名].ad.example.jp
公式によると下記のパッケージが必要らしいのでインストール。
# apt install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
samba-ad-dcサービスのマスクを解除する。
# systemctl unmask samba-ad-dc
まぎらわしいサービスを無効化する。
# systemctl disable --now smbd nmbd winbind
# systemctl mask smbd nmbd winbind
設定ファイルのバックアップを取る。
# mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
# mv /etc/krb5.conf /etc/krb5.conf.backup
プライマリドメインコントローラーの設定手順
ドメインのプロビジョニングを実行する。
※–-use-rfc2307
(UNIX系を認証する場合は必須)
※--interactive
(セットアップを対話式で行う)
# samba-tool domain provision --use-rfc2307 --interactive
----------------------------------------
Realm: AD.EXAMPLE.JP
Domain [AD]: EXAMPLE
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) [127.0.0.53]: 8.8.8.8
Administrator password:
Retype password:
…
もし実行中に下記メッセージで停止してしまう場合は、sambaをpurgeして、/var/lib/samba/を削除して、sambaを再インストールしてからやり直す。
Repacking database from v1 to v2 format (first record CN=FileLinks,CN=System,DC=ad,DC=example,DC=jp)
できあがったkrb5.confをコピーする。
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
samba-ad-dcサービスを有効化する。
# systemctl enable --now samba-ad-dc
systemd-resolvedがDNSサーバーの邪魔をするので無効化する。
# systemctl disable --now systemd-resolved
# rm /etc/resolv.conf
/etc/resolv.confをNetworkManagerに作らせるためmainセクションに追記する。
[main]
dns=default
…
DNSを自分自身に変更して再起動する。
# nmcli connection modify [コネクションID] ipv4.dns 127.0.0.1
# shutdown -r now
セカンダリドメインコントローラーの設定手順
参照するDNSをプライマリに変更する。
# nmcli connection modify [コネクションID] ipv4.dns 192.168.1.11
# nmcli connection up [コネクションID]
ドメインコントローラーとしてjoinする。
# samba-tool domain join ad.example.jp DC -U administrator@example
smb.confのglobalセクションに下記を追記する。
…
dns forwarder = [プライマリと同じforwarder]
idmap_ldb:use rfc2307 = yes
…
GPOが同期されないので、セカンダリ側からプライマリのGPOをコピーするスクリプトを適当に書いた。GPOの変更はプライマリに対して行う運用にして、変更後はセカンダリで下記スクリプトをrootで実行するようにする。スクリプトにはパスワード書いておくのでパーミッションは700にする。
#!/bin/bash
if [ ${EUID:-${UID}} != 0 ]; then
echo "Please run with Root."
exit 1
fi
mount.cifs -V 1>/dev/null 2>/dev/null
if [ ! $? -eq 0 ]; then
echo "cifs-utils is not installed."
exit 1;
fi
temporary="/tmp/sysvol"
dc="pdc.ad.example.jp"
domain="example";
user="administrator";
pass="password";
mkdir -p $temporary
mount.cifs -o username=$user@$domain,password=$pass,file_mode=0400,dir_mode=0500 //$dc/sysvol $temporary
if [ ! $? -eq 0 ]; then
exit 1;
fi
cp -rf $temporary/* /var/lib/samba/sysvol/
samba-tool ntacl sysvolreset
umount $temporary
ここからプライマリと同じ手順。
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# systemctl enable --now samba-ad-dc
# systemctl disable --now systemd-resolved
# rm /etc/resolv.conf
# sed -i "s/\[main\]/\[main\]\ndns=default/g" /etc/NetworkManager/NetworkManager.conf
# nmcli connection modify [コネクションID] ipv4.dns 127.0.0.1
# shutdown -r now
ファイルサーバーの設定手順
共有するディレクトリを作成する。
※root以外がアクセスできないようにする
# mkdir -p /data/samba/share
# chmod 770 /data/samba/share
sambaの設定ファイルを編集して最下行に追記する。
※Linuxへの共有が目的なので「Windows ACL」はいらない
※”force user”にrootを指定してファイル操作をrootで実行させる
…
[share]
path = /data/samba/share
nt acl support = no
create mask = 0660
directory mask = 0770
force user = root
writable = yes
valid users = "example\user1" @"example\Domain Admins"
samba-ad-dcサービスを再起動する。
# systemctl restart samba-ad-dc
使いそうなコマンド
DNSレコードに登録されているLDAPとKerberosのサービスを確認できる。この手順で構築した環境で実行すると2行のレコードが表示される。
# host -t SRV _ldap._tcp.ad.example.jp.
# host -t SRV _kerberos._udp.ad.example.jp.
DNSの更新状況を確認できる。
No DNS updates needed ならOKらしい。
# samba_dnsupdate --verbose
パスワードに関するポリシーの確認と変更ができる。
# samba-tool domain passwordsettings show
# samba-tool domain passwordsettings set --complexity=off
# samba-tool domain passwordsettings set --min-pwd-length=5
# samba-tool domain passwordsettings set --min-pwd-age=30
# samba-tool domain passwordsettings set --max-pwd-age=0
# samba-tool domain passwordsettings set --account-lockout-duration=60
# samba-tool domain passwordsettings set --account-lockout-threshold=3
# samba-tool domain passwordsettings set --reset-account-lockout-after=60
# samba-tool domain passwordsettings set --history-length=5
ユーザーの新規作成、初回ログイン時にパスワードを変更させる。
# samba-tool user add user1 --must-change-at-next-login
ユーザーのロック状態を解除する。
# samba-tool user unlock user1
ユーザーのパスワードを変更して、次回ログイン時にパスワードを変更させる。
# samba-tool user setpassword user1 --must-change-at-next-login
ユーザーをグループに追加する。
# samba-tool group addmembers "Domain Admins" user1
ドメインコントローラーの降格。
# samba-tool domain demote --remove-other-dead-server=[ホスト名]
FSMOを確認できる。
# samba-tool fsmo show
FSMOの移行。転送先サーバーで下記コマンドを実行する。
# samba-tool fsmo transfer --role all
DNSレコードを確認する。
# samba-tool dns query localhost ad.example.jp. @ ALL -U Administrator
DNSレコードを削除する。まれにDNSレコードのIPアドレスが一切更新されなくなるクライアントがある。下記を実行して古いDNSレコードを削除するとそのうち直る。
# samba-tool dns delete localhost ad.example.jp. client01 A 192.168.1.222 -U Administrator