SAMBAでAD DCを構築した記録(Ver.4.13.4)

自宅ではStandaloneのsambaをファイルサーバーとしているが、実家の光回線を有効活用するためにESXiを使っていろいろ構築し、便利に使いたい。
手始めにADサーバーを構築することにしました。
こんな記事を書いていてなんですが、sambaはすごく高機能なので1冊正確な情報の書籍があるといいと思います。ネットを探し回る時間を考えたら、非常に有効な手段だとおもいます。
ネット情報はもちろんオフィシャルを基本にすべきです。
今回はDebian10を使っています。
debianは安定性が非常に高いと思いますが、パッケージが結構古いです。sambaも現在4.9バージョンらしいので、sourceから入れます。
というかsambaは使い始めた15年以上パッケージを使ったことがない。。
ビルドするためにbuild-essential, パッケージダウンロード用にcurlは入れておきます。
$ sudo cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" $ uname -a Linux ad1 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux
ビルドするときにLANGがCだとエラーになるといったことを聞いたので、utf-8にしておきました。
$ vim ~/.profile export LANG=ja_JP.UTF-8 #追記 $ source ~/.profile
ホスト名の設定
$ sudo vim /etc/hosts 192.168.100.100 ad1.site.yatao.net ad1
時刻同期の設定をします。ドメイン内で時刻同期を行う基本となるので重要です。
chronyという効率がよくなったntpdの代替ソフトとのこと。
$ sudo apt install -y chrony $ sudo vim /etc/chrony/chrony.conf #pool 2.debian.pool.ntp.org iburst 初期設定をコメントアウト # ntpサーバー登録 server ntp.nict.jp iburst server ntp1.jst.mfeed.ad.jp iburst server ntp2.jst.mfeed.ad.jp iburst server ntp3.jst.mfeed.ad.jp iburst # 参照範囲設定 allow 192.168.100.0/24 # Server time even if not synchronized to a time source. local stratum 10 再起動 $ sudo systemctl restart chrony 自動起動設定 $ sudo systemctl enable chrony 動作確認 $ sudo systemctl is-enabled chrony enabled $ chronyc sources 210 Number of sources = 4 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp-k1.nict.jp 1 6 77 14 +5840us[ +10ms] +/- 20ms ^- ntp1.jst.mfeed.ad.jp 2 6 77 14 +1470us[+1470us] +/- 67ms ^- ntp2.jst.mfeed.ad.jp 2 6 77 12 +5225us[+5225us] +/- 60ms ^- ntp3.jst.mfeed.ad.jp 2 6 77 12 +313us[ +313us] +/- 72ms
機種依存文字などの対応が出来なかった等の理由でlibiconvもsourceにパッチを当てて入れていました。今回もそうしました。
実際はどうなんでしょうかね?パッケージを入れてその使えるのだろうか?
今回は特にADサーバーなのでパッケージでよいのかもしれない。
今回はApolloron Projectさんのところからパッチをいただきました。
$ mkdir samba $ cd samba/ $ curl -L -O http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz $ curl -L -O http://apolloron.org/software/libiconv-1.14-ja/libiconv-1.14-ja-2.patch $ tar zxvf libiconv-1.14.tar.gz $ cd libiconv-1.14/ $ patch -p1 < ../libiconv-1.14-ja-2.patch $ ./configure $ make && make check defaultだと/usr/local/bin に入る パッケージ版が/usr/bin にあるかもしれないから確認しておく $ whereis iconv $ sudo make install $ sudo ldconfig -v $ /usr/local/bin/iconv -l | grep -- -MS
ここからsambaの環境整備行程です。
$ cd .. $ curl -L -O https://download.samba.org/pub/samba/stable/samba-4.13.4.tar.gz $ tar zxvf samba-4.13.4.tar.gz https://wiki.samba.org/index.php/Package_Dependencies_Required_to_Build_Samba 上記記載のパッケージを用意 $ sudo apt update $ sudo apt -y install \ acl \ apt-utils \ attr \ autoconf \ bind9utils \ binutils \ bison \ build-essential \ ccache \ chrpath \ curl \ debhelper \ dnsutils \ docbook-xml \ docbook-xsl \ flex \ gcc \ gdb \ git \ glusterfs-common \ gzip \ heimdal-multidev \ hostname \ htop \ krb5-config \ krb5-kdc \ krb5-user \ lcov \ libacl1-dev \ libarchive-dev \ libattr1-dev \ libavahi-common-dev \ libblkid-dev \ libbsd-dev \ libcap-dev \ libcephfs-dev \ libcups2-dev \ libdbus-1-dev \ libglib2.0-dev \ libgnutls28-dev \ libgpgme-dev \ libicu-dev \ libjansson-dev \ libjs-jquery \ libjson-perl \ libkrb5-dev \ libldap2-dev \ liblmdb-dev \ libncurses5-dev \ libpam0g-dev \ libparse-yapp-perl \ libpcap-dev \ libpopt-dev \ libreadline-dev \ libsystemd-dev \ libtasn1-bin \ libtasn1-6-dev \ libunwind-dev \ lmdb-utils \ locales \ lsb-release \ make \ mawk \ mingw-w64 \ patch \ perl \ perl-modules-5.28 \ pkg-config \ procps \ psmisc \ python3 \ python3-cryptography \ python3-dbg \ python3-dev \ python3-dnspython \ python3-gpg \ python3-iso8601 \ python3-markdown \ python3-matplotlib \ python3-pexpect \ python3-pyasn1 \ python3-setproctitle \ rng-tools \ rsync \ sed \ sudo \ tar \ tree \ uuid-dev \ wget \ xfslibs-dev \ xsltproc \ zlib1g-dev $ sudo ldconfig -v Kerberosの問い ・Configuring Kerberos Authentication When users attempt to use Kerberos and specify a principal or user name without specifying what administrative Kerberos realm that principal belongs to, the system appends the default realm. The default realm may also be used as the realm of a Kerberos service running on the local machine. Often, the default realm is the uppercase version of the local DNS domain. Default Kerberos version 5 realm: =>SITE.YATAO.NET ・Configuring Kerberos Authentication Enter the hostnames of Kerberos servers in the SITE.YATAO.NET Kerberos realm separated by spaces. Kerberos servers for your realm: =>AD1.SITE.YATAO.NET ・Configuring Kerberos Authentication Enter the hostname of the administrative (password changing) server for the SITE.YATAO.NET Kerberos realm. │ Administrative server for your Kerberos realm: =>AD1.SITE.YATAO.NET
必要なパッケージを入れましたがこの状態でrng-toolsがエラーを吐いていたので対応しました。
$ sudo vim /etc/default/rng-tools HRNGDEVICE=/dev/urandom #追加 $ sudo systemctl restart rng-tools.service $ sudo systemctl status rng-tools.service ● rng-tools.service Loaded: loaded (/etc/init.d/rng-tools; generated) Active: active (running) since Sun 2021-02-21 11:07:51 JST; 8s ago Docs: man:systemd-sysv-generator(8) Process: 1807 ExecStart=/etc/init.d/rng-tools start (code=exited, status=0/SUCCESS) Tasks: 4 (limit: 4698) Memory: 632.0K CGroup: /system.slice/rng-tools.service └─1809 /usr/sbin/rngd -r /dev/urandom
既存のKerberos設定ファイルをバックアップ、削除 $ sudo mv /etc/krb5.conf{,.back}
sambaのビルド行程
fhsオンにしても/usr/local/samba以下になったので prefix等も指定 これでsystemdファイル出してくれる $ ./configure \ --with-libiconv=/usr/local \ --disable-cups \ --enable-selftest \ --with-systemd \ --systemd-install-services \ --with-systemddir=/etc/systemd/system \ --systemd-samba-extra=NotifyAccess=all \ --enable-fhs \ --prefix=/usr \ --libdir=/usr/lib/x86_64-linux-gnu --sysconfdir=/etc \ --localstatedir=/var \ --with-piddir=/run/samba \ --disable-spotlight \ 2>&1 | tee log.configure.`date +"%Y%m%d"` $ make -j4 テストしてみます $ make quicktest どのバージョンでテストしてもエラーが出ますが、数週間使ってみたところ今のところ致命的な問題になっていません。 このまま入れます。 $ sudo make install
libnss_winbindライブラリのシンボリックリンクを作成する必要があるそうです。
$ sudo ln -s /usr/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/ $ sudo ln -s /lib/x86_64-linux-gnu/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so $ sudo ldconfig
resolv.confを自分に向けます。
$ sudo vim /etc/resolv.conf nameserver 192.168.100.100 #下記追加
ドメインのデプロイ
$ sudo samba-tool domain provision --use-rfc2307 \ --realm=SITE.YATAO.NET \ --server-role=dc \ --dns-backend=SAMBA_INTERNAL \ --domain=SITE \ --host-name=AD1 \ --host-ip=192.168.100.100 \ --adminpass=P@ssword00 \ --option="interfaces=lo ens192" \ --option="bind interfaces only=yes" ※対話型の場合 $ sudo samba-tool domain provision --use-rfc2307 --interactive
コンフィグファイルを編集します。
デプロイした状態で問題なく動作してくれますが、ログファイル設定などを追加しました。
$ sudo vim /etc/samba/smb.conf # Global parameters [global] bind interfaces only = Yes dns forwarder = 192.168.100.254 interfaces = lo ens192 netbios name = AD1 realm = SITE.YATAO.NET server role = active directory domain controller workgroup = LO2 idmap_ldb:use rfc2307 = yes winbind nested groups = yes load printers = no printing = bsd printcap name = /dev/null max log size = 1000 log level = 1 auth_audit:3 auth_json_audit:3 [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/site.yatao.net/scripts read only = No
ついにサービスを起動してみます。
事前にコンフィグ設定をチェックしてから問題なければ起動します。
$ testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Weak crypto is allowed Server role: ROLE_ACTIVE_DIRECTORY_DC Press enter to see a dump of your service definitions $ sudo systemctl start samba $ sudo systemctl status samba * samba.service - Samba AD Daemon Loaded: loaded (/lib/systemd/system/samba.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2021-01-14 22:22:12 JST; 10s ago Docs: man:samba(8) man:samba(7) man:smb.conf(5) Main PID: 19023 (samba) Status: "samba: ready to serve connections..." Tasks: 58 (limit: 4698) Memory: 177.4M CGroup: /system.slice/samba.service |-19023 samba: root process |-19024 samba: tfork waiter process(19025) |-19025 samba: task[s3fs] pre-fork master |-19026 samba: tfork waiter process(19028) |-19027 samba: tfork waiter process(19030) |-19028 samba: task[rpc] pre-fork master |-19029 samba: tfork waiter process(19034) |-19030 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground |-19031 samba: tfork waiter process(19032) |-19032 samba: task[rpc] pre-forked worker(0) |-19033 samba: tfork waiter process(19036) |-19034 samba: task[nbt] pre-fork master |-19035 samba: tfork waiter process(19038) |-19036 samba: task[rpc] pre-forked worker(1) |-19037 samba: tfork waiter process(19040) |-19038 samba: task[wrepl] pre-fork master |-19039 samba: tfork waiter process(19042) |-19040 samba: task[rpc] pre-forked worker(2)
様々動作チェックします。
ドメインのシステム ボリューム ツリー共有の確認 $ sudo smbclient -L localhost -U% Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk IPC$ IPC IPC Service (Samba 4.13.4) SMB1 disabled -- no workgroup available ドメインコントローラーの共有はデフォルトで「netlogon」「sysvol」「IPC$」の三つ ドメインコントローラーへの接続確認 $ sudo smbclient //localhost/netlogon -UAdministrator -c 'ls' Enter SITE\Administrator's password: . D 0 Thu Jan 14 22:20:58 2021 .. D 0 Thu Jan 14 22:21:03 2021 31372092 blocks of size 1024. 26193272 blocks available DNSゾーンリストの確認 $ sudo samba-tool dns zonelist 127.0.0.1 -U Administrator Password for [SITE\Administrator]: 2 zone(s) found pszZoneName : site.yatao.net Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE ZoneType : DNS_ZONE_TYPE_PRIMARY Version : 50 dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED pszDpFqdn : DomainDnsZones.site.yatao.net pszZoneName : _msdcs.site.yatao.net Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE ZoneType : DNS_ZONE_TYPE_PRIMARY Version : 50 dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED pszDpFqdn : ForestDnsZones.site.yatao.net 2つのDNSゾーンが表示されていればok。 DNSエントリの確認 $ host ad1.site.yatao.net ad1.site.yatao.net has address 192.168.100.100 $ host -t SRV _ldap._tcp.site.yatao.net _ldap._tcp.site.yatao.net has SRV record 0 100 389 ad1.site.yatao.net. $ host -t SRV _kerberos._tcp.site.yatao.net _kerberos._tcp.site.yatao.net has SRV record 0 100 88 ad1.site.yatao.net. $ host google.co.jp google.co.jp has address 172.217.25.67 google.co.jp has IPv6 address 2404:6800:4004:818::2003 google.co.jp mail is handled by 20 alt1.aspmx.l.google.com. google.co.jp mail is handled by 10 aspmx.l.google.com. google.co.jp mail is handled by 50 alt4.aspmx.l.google.com. google.co.jp mail is handled by 30 alt2.aspmx.l.google.com. google.co.jp mail is handled by 40 alt3.aspmx.l.google.com. 逆引きゾーンの作成 $ sudo samba-tool dns zonecreate ad1.site.yatao.net 100.168.192.in-addr.arpa -U Administrator Password for [SITE\Administrator]: Zone 100.168.192.in-addr.arpa created successfully ADサーバレコードの追加 ~$ sudo samba-tool dns add ad1.site.yatao.net 100.168.192.in-addr.arpa 100 PTR ad1.site.yatao.net -U Administrator Password for [SITE\Administrator]: Record added successfully ユーザー情報の確認 $ sudo samba-tool user list Administrator krbtgt Guest デフォルトでは3ユーザー fsmoの確認 $ sudo samba-tool fsmo show SchemaMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net InfrastructureMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net RidAllocationMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net PdcEmulationMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net DomainNamingMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=AD1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=site,DC=yatao,DC=net ※レプリケーションを確認する場合 $ sudo samba-tool drs showrepl Default-First-Site-Name\AD1 DSA Options: 0x00000001 DSA object GUID: 8b8b2b29-268e-44bd-9b68-769ebd193959 DSA invocationId: 2a83f353-99e2-4cc1-905b-82895a0d7386 ==== INBOUND NEIGHBORS ==== ==== OUTBOUND NEIGHBORS ==== ==== KCC CONNECTION OBJECTS ==== 設定していないので出ない ドメインレベルの確認 $ sudo samba-tool domain level show Domain and forest function level for domain 'DC=site,DC=yatao,DC=net' Forest function level: (Windows) 2008 R2 Domain function level: (Windows) 2008 R2 Lowest function level of a DC: (Windows) 2008 R2 Kerberos認証用チケットの取得確認 $ sudo kinit Administrator@SITE.YATAO.NET Password for Administrator@SITE.YATAO.NET: Warning: Your password will expire in 41 days on Fri Feb 26 10:22:00 2021 期限が出たらok 再確認 $ sudo klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: Administrator@SITE.YATAO.NET Valid starting Expires Service principal 01/14/21 23:01:02 01/15/21 09:01:02 krbtgt/SITE.YATAO.NET@SITE.YATAO.NET renew until 01/15/21 23:00:58
問題が無いようであれば、コンフィグファイルをバックアップしつつ、常時起動するように設定。
初期設定をバックアップ $ sudo cp /etc/samba/smb.conf{,.back} 常時起動に登録 $ sudo systemctl enable samba.service Created symlink /etc/systemd/system/multi-user.target.wants/samba.service -> /lib/systemd/system/samba.service.
ネームサービススイッチにwinbindを追加します。
$ sudo vim /etc/nsswitch.conf passwd: files systemd winbind #winbindを追加 group: files systemd winbind #winbindを追加 ※shadowに追加してはいけない。とオフィシャルに書いてありました。
ここまででAD DCサーバーとしての動作は問題ないと思います。
windowsホストでドメイン参加も確認しました。
今回はメンバーサーバーでad バックドメインとするので、以下の設定が大事です。
これが理解できずに1週間かかりました。。
下記サイトコンテンツがスクリプトともに非常に有用であり、必須です。ありがとうございました。
BENEDICAM TE.さんのsamba 4 ad dc with idmap backend ad その一: FSMOマスタ(PDC)の構築
今回は下記設定としました。
idmap range = 20000-29999
DN(objectCategoryじゃない様だ)は下記コマンドで確認できる。
sudo samba-tool group edit “Domain Users”
BUILTINのグループにgidをつける $ cd /etc/samba $ sudo vim /etc/samba/mod-builtin-grp.sh スクリプトを作ります。 $ sudo sh mod-builtin-grp.sh ドメイングループにgidをつける $ sudo vim /etc/samba/mod-mydomain.site-grp.sh スクリプトを作ります。 $ sudo sh mod-mydomain.site-grp.sh ドメインユーザーにDefault userにuidNumber,, gidNumber, loginShell, unixHomeDirectoryを設定。 $ sudo vim /etc/samba/mod-mydomain.site-usr.sh スクリプトを作ります。 $ sudo sh mod-mydomain.site-usr.sh
ユーザーの追加方法
実際にはWindowsホストにRSAT(Remote Server Administration Tools)を入れて管理することが現実的なんだと思いますが、とりあえずコマンドラインでユーザーを追加する方法を調べました。
ユーザーの追加 $ sudo samba-tool user create user01 P@ssword7 --description user01 \ --nis-domain=site.yatao.net --uid=user01 --uid-number=20000 --gid-number=28513 \ --login-shell=/bin/bash --unix-home=/home/lo2/user01 User 'user01' created successfully ドメイン管理者設定 $ sudo samba-tool group addmembers "Domain Admins" user01 Added members to group Domain Admins $ sudo samba-tool group listmembers "Domain Admins" Administrator user01 Administratorを無効にする方法 $ sudo samba-tool user disable Administrator ユーザー追加 $ sudo samba-tool user create user02 P@ssword7 --description user02 \ --nis-domain=site.yatao.net --uid=user02 --uid-number=20001 --gid-number=28513 \ --login-shell=/usr/sbin/nologin --unix-home=/home/lo2/user02 User 'user02' created successfully グループ作成 $ sudo samba-tool group add group01 --description user01 \ --nis-domain=site.yatao.net --gid-number=20002 Added group user01 グループへのユーザー追加 $ sudo samba-tool group addmembers group01 user02 Added members to group group01 グループのメンバーリスト $ sudo samba-tool group listmembers group01 user01 user02 パスワードの変更 $ sudo samba-tool user setpassword user01 New Password: Retype Password: Changed password OK
以上で一通りAD構築完了
同バージョンで構築したsambaをメンバーとして利用することが出来ています。
ESXiを使ったことで構築手順を何度も復習しながら確認することが簡単にできました。システムをまるごとスナップショットとれるって良いですね。