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を使ったことで構築手順を何度も復習しながら確認することが簡単にできました。システムをまるごとスナップショットとれるって良いですね。