Windows Server 2012(R2)が2023年10月10日でEOLになるので、Samba4でWindowsのActiveDirectoryサーバを構築してみた。
(前提条件)
- Samba4のインストール先 /opt/samba
- サーバのIPアドレス 192.168.1.1
- ホスト名 ad.sec-portal.jp
- DNSサーバ 192.168.2.1
- ADドメイン名 sec-portal.jp
事前準備
既存パッケージの削除
標準のSambaパッケージは、ADのサポートを行っていないので、インストールしている場合は、削除すること。
1 |
dnf remove samba samba-common samba-common-libs samba-common-tools samba-libs samba-client samba-client-libs samba-dcerpc samba-dc-libs |
関連パッケージのインストール
1 2 3 4 5 6 7 |
dnf install gnutls-devel gpgme-devel jansson-devel \ keyutils-libs-devel krb5-workstation libacl-devel libaio-devel \ libarchive-devel libattr-devel libblkid-devel libtasn1-tools \ libxml2-devel lmdb-devel openldap-devel pam-devel perl \ perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel python3-cryptography \ python3-dns python36-devel readline-devel rpcgen systemd-devel \ dbus-devel python3-markdown bind-utils |
OS環境準備
ホスト名(FQDN)やIPアドレス・DNSサーバの設定は、事前に設定が完了していること。
以下をホスト設定「/etc/hosts」に追加する。
1 |
192.168.1.1 ad.sec-portal.jp ad |
DNSリゾルバ設定「/etc/resolv.conf」を確認する。
1 2 3 |
# Generated by NetworkManager search sec-portal.jp nameserver 192.168.2.1 |
Samba4 コンパイル&インストール
1 2 3 4 5 6 7 8 9 10 11 |
mkdir -p /opt/src && cd /opt/src curl -O https://download.samba.org/pub/samba/samba-latest.tar.gz tar -xvf samba-latest.tar.gz cd samba-4.* ./configure --prefix=/opt/samba make make install echo "export PATH=/opt/samba/bin:/opt/samba/sbin:$PATH" >> ~/.bashrc source ~/.bashrc ( cd /lib64 ; ln -sv /opt/samba/lib/libnss_win* .) ( cd /lib64/security ; ln -sv /opt/samba/lib/security/pam_winbind.so . ) |
環境・サービス設定
ドメイン準備
DNSフォワーダーIPアドレス(DNS forwarder IP address)と管理者のパスワード(Windows初期パスワードポリシーに従う:英数字記号混在、3文字以上、ユーザ名を含まない)を入力する。
1 2 3 4 5 6 7 8 9 |
samba-tool domain provision --use-rfc2307 --interactive Realm [SEC-PORTAL.JP]: Domain [SEC-PORTAL]: 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) [192.168.2.1]: 192.168.2.1 Administrator password: Retype password: |
環境設定
1 2 |
cp /etc/krb5.conf /etc/krb5.conf.orig cp /opt/samba/private/krb5.conf /etc/krb5.conf |
1 2 3 4 5 6 7 8 9 10 11 12 |
[libdefaults] default_realm = SEC-PORTAL.JP dns_lookup_realm = false dns_lookup_kdc = true [realms] SEC-PORTAL.JP = { default_domain = sec-portal.jp } [domain_realm] ad = SEC-PORTAL.JP |
NTP(chronyd)サーバにクライアントの時刻同期を行うIPアドレスの追加とSamba連携の設定を行う。
1 2 3 |
: allow 192.168.0.0.0/16 ntpsigndsocket /opt/samba/var/lib/ntp_signd |
NTP(chronyd)サーバの再起動
1 2 3 4 5 |
mkdir -p /opt/samba/var/lib/ntp_signd chown root:chrony /opt/samba/var/lib/ntp_signd chmod 750 /opt/samba/var/lib/ntp_signd systemctl restart chronyd chronyc sources |
Samba設定ファイルの変更
・ 「server services」行の追加
・ 「utmp」行の追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Global parameters [global] dns forwarder = 192.168.2.1 netbios name = AD realm = SEC-PORTAL.JP server role = active directory domain controller workgroup = SEC-PORTAL idmap_ldb:use rfc2307 = yes server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns utmp = yes [sysvol] path = /opt/samba/var/locks/sysvol read only = No [netlogon] path = /opt/samba/var/locks/sysvol/sec-portal.jp/scripts read only = No |
移動ユーザープロファイルを使用する場合の設定
1 2 3 4 5 6 |
: 以下を追加 [Profiles] path = /opt/samba/var/profiles read only = No guest ok = Yes browseable = No |
1 2 |
mkdir -p /opt/samba/var/profiles chmod 1777 /opt/samba/var/profiles |
サービの設定
1 |
cp bin/default/packaging/systemd/samba.service /etc/systemd/system/samba.service |
環境設定ファイル(EnvironmentFile)をシステム標準のファイル「/etc/sysconfig/samba」に変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Unit] Description=Samba AD Daemon Documentation=man:samba(8) man:samba(7) man:smb.conf(5) Wants=network-online.target After=network.target network-online.target [Service] Type=notify PIDFile=/opt/samba/var/run/samba.pid LimitNOFILE=16384 EnvironmentFile=/etc/sysconfig/samba ExecStart=/opt/samba/sbin/samba --foreground --no-process-group $SAMBAOPTIONS ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target |
1 2 3 4 |
cp packaging/systemd/samba.sysconfig /etc/sysconfig/samba systemctl daemon-reload systemctl list-unit-files --type=service | grep samba systemctl enable samba |
この時点で、/etc/resolv.confの設定をlocalhostに変更する。
なお、サーバは、SambaのDNSフォワード設定を行っているので問題ない。
1 2 |
search sec-portal.jp nameserver 127.0.0.1 |
各サービスの起動
1 2 3 4 5 |
systemctl start samba journalctl -f -u samba --full -e systemctl restart chronyd chronyc sources |
その他の設定
ファイアウォールの環境設定
・ NTPの許可を追加
・ samba-dc サービスの追加(ポート番号は、以下を参考に設定)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Samba DC</short> <description>This option allows you to use this computer as a Samba Active Directory Domain Controller. You need the samba-dc package installed for this option to be useful.</description> <port protocol="tcp" port="53"/><!-- DNS --> <port protocol="udp" port="53"/><!-- DNS --> <port protocol="tcp" port="88"/><!-- Kerberos --> <port protocol="udp" port="88"/><!-- Kerberos --> <port protocol="tcp" port="135"/><!-- End Point Mapper (DCE/RPC Locator Service --> <port protocol="udp" port="137"/><!-- NetBIOS Name Service --> <port protocol="udp" port="138"/><!-- NetBIOS Datagram --> <port protocol="tcp" port="139"/><!-- NetBIOS Session --> <port protocol="tcp" port="389"/><!-- LDAP --> <port protocol="udp" port="389"/><!-- CLDAP --> <port protocol="tcp" port="445"/><!-- SMB over TCP --> <port protocol="tcp" port="464"/><!-- Kerberos kpasswd --> <port protocol="udp" port="464"/><!-- Kerberos kpasswd --> <port protocol="tcp" port="636"/><!-- LDAPS --> <port protocol="tcp" port="49152-65535"/><!-- Dynamic RPC Ports --> <port protocol="tcp" port="3268"/><!-- Global Catalog --> <port protocol="tcp" port="3269"/><!-- Global Catalog SSL --> <helper name="netbios-ns"/> </service> |
Sambaクライアントのセグメント単位で許可をどのように行うか検討すること。
サーバにおける動作確認
基本動作確認(Administratorでのログイン)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# smbclient --version Version 4.18.2 # smbclient -L ad.sec-portal.jp -U% Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk IPC$ IPC IPC Service (Samba 4.18.2) SMB1 disabled -- no workgroup available # smbclient //ad.sec-portal.jp/netlogon -Uadministrator Password for [SEC-PORTAL\administrator]: Try "help" to get a list of possible commands. smb: \> ls . D 0 Wed May 17 09:54:48 2023 .. D 0 Wed May 17 09:54:58 2023 52845352 blocks of size 1024. 42752236 blocks available smb: \> pwd Current directory is \\ad.sec-portal.jp\netlogon\ smb: \> quit |
DNSのテスト
1 2 |
# host -t SRV _ldap._tcp.sec-portal.jp. _ldap._tcp.sec-portal.jp has SRV record 0 100 389 ad.sec-portal.jp. |
Kerberosのテスト
1 2 3 4 5 6 7 8 9 10 11 |
# kinit administrator@SEC-PORTAL.JP Password for administrator@SEC-PORTAL.JP: Warning: Your password will expire in 41 days on 2023年06月28日 09時54分58秒 # klist -e Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@SEC-PORTAL.JP Valid starting Expires Service principal 2023-05-17T10:22:13 2023-05-17T20:22:13 krbtgt/SEC-PORTAL.JP@SEC-PORTAL.JP renew until 2023-05-18T10:22:02, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 |
(注意) 指定するドメイン名は、大文字で指定すること。
ユーザの追加(移動プロファイル)
1 |
samba-tool user create user01 pass123456$ --profile-path="\\\ad.sec-portal.jp\profiles\%USERNAME%" |
その他管理コマンド等
パスワード方針表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# samba-tool domain passwordsettings show Password information for domain 'DC=sec-portal,DC=jp' Password complexity: on ・・・パスワードの複雑性 ( 英数字記号混在、3文字以上、ユーザ名を含まない ) を強制 Store plaintext passwords: off ・・・パスワードを平文のまま保存するかしないか Password history length: 24 ・・・過去のパスワードを何世代保存しておくか Minimum password length: 7 ・・・最小パスワード長 Minimum password age (days): 1 ・・・パスワード変更禁止期間 ( 0にすると即座に変更可能 ) Maximum password age (days): 42 ・・・パスワード有効期限 ( 0にすると無期限 ) Account lockout duration (mins): 30 ・・・一定回数、パスワードを間違った場合にロックされる期間 (分) Account lockout threshold (attempts): 0 ・・・パスワードがロックされるまでの試行回数しきい値 ( 0はロックされない ) Reset account lockout after (mins): 30 ・・・パスワード試行回数が0になるまでの時間 (分) # samba-tool domain passwordsettings set --complexity=off # パスワード複雑性(英数字記号混在強制)無効化 # samba-tool domain passwordsettings set --complexity=on # パスワード複雑性(英数字記号混在強制)有効化 # samba-tool domain passwordsettings set --min-pwd-length=8 # 最小パスワード長設定 # samba-tool domain passwordsettings set --max-pwd-age=90 # パスワード有効期限設定 # samba-tool domain passwordsettings set --max-pwd-age=0 # パスワード有効期限設定の無効化 # samba-tool domain passwordsettings set --min-pwd-age=1 # パスワード変更禁止期間を1日に設定 # samba-tool domain passwordsettings set --min-pwd-age=0 # パスワード変更禁止期間を0日(同日中に変更可能)に設定 |
ユーザ管理
1 2 3 4 5 6 7 8 9 |
samba-tool user create user01 pass12345$ --profile-path="\\\ad.sec-portal.jp\profiles\%USERNAME%" samba-tool user delete user01 samba-tool user disable user01 samba-tool user enable user01 samba-tool user setpassword user01 --newpassword=password456@ samba-tool user list |
クライアント側の準備
- クライアント側のDNSサーバの設定は、SambaサーバのIPアドレスを設定する。
- IPv6のDHCPサーバがある場合、ADサーバが見つからない(IPv6優先のため)ので注意。
- ドメインへの参加を行う。
- ドメインのAdministratorで準備作業を行う。
Windows 10へのRSATインストールを行うと各管理ユーティリティが使用可能となる。
・ ActiveDirectoryユーザーとコンピュータ
・ グループポリシー管理ツール
・ DNS サーバツール
1 2 3 4 5 6 7 8 9 10 11 |
「設定」 「アプリ」 「アプリと機能」 ・ オプション機能 【機能の追加】 検索:RSAT RSAT: Active Directory Domain Services およびライトウェイト ディレクトリサービスツール RSAT: DNS サーバツール RSAT: グループポリシー管理ツール 「インストール」 |
Active Directoryの管理検討
- グループポリシー管理エディターが使用可能となる。
- フォルダーリダイレクトの検討・設定を行う。
- サイトとゾーンの割り当てを検討
AppdataをリダイレクトするとEdgeの起動などで「セキュリティの警告を表示」されるのでグループポリシーでADサーバをイントラネット ゾーンとして登録する必要があります。 - ローカルセキュリティポリシーの変更検討
対話型ログオン:最後にサインインしたユーザを表示しない