SAMBAでドメインメンバー(NAS)を構築した記録(Ver.4.13.4)
今回はドメインメンバーとしてのNASを構築したときの記録です。
動作確認済みなのでほぼ間違いなく下記の通りで動作します。
ただAD DCの構築記録にも書きましたが、確実な情報はオフィシャル情報や書籍を参考にすることをおすすめします。
まず構築環境から。
なお、ビルドするために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.110 nas.site.yatao.net nas
時刻同期設定
systemd-timesyncdでAD DCと合わせる
$ sudo timedatectl status
Local time: Sat 2021-01-16 21:37:12 JST
Universal time: Sat 2021-01-16 12:37:12 UTC
RTC time: Sat 2021-01-16 12:37:12
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
$ sudo vim /etc/systemd/timesyncd.conf
[Time]
NTP=ad1.site.yatao.net
FallbackNTP=ntp.nict.jp ntp1.jst.mfeed.ad.jp
再起動
$ sudo timedatectl set-ntp false
$ sudo timedatectl set-ntp true
確認
$ sudo timedatectl show-timesync --all
LinkNTPServers=
SystemNTPServers=ad1.site.yatao.net
FallbackNTPServers=ntp.nict.jp ntp1.jst.mfeed.ad.jp
ServerName=ad1.site.yatao.net
ServerAddress=192.168.100.100
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-26, RootDelay=6.912ms, RootDispersion=854us, Reference=85F3EEF4, OriginateTimestamp=Tue 2021-01-19 10:26:35 JST, ReceiveTimestamp=Tue 2021-01-19 10:26:35 JST, TransmitTimestamp=Tue 2021-01-19 10:26:35 JST, DestinationTimestamp=Tue 2021-01-19 10:26:35 JST, Ignored=no PacketCount=1, Jitter=0 }
Frequency=2329704
ok。
今回もsourceからlibiconvを入れます。
今回もApolloronProjectさんからパッチをいただきました。ありがとうございます。
$ 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
krb5の設定をします。
オフィシャル情報では下記項目以外設定しないことをおすすめしていますが、今回はloggingなど追加したかったので、いくつか設定を書いています。
[libdefaults]
default_realm = SAMDOM.EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
オリジナルバックアップ
$ sudo mv /etc/krb5.conf{,.backup}
$ sudo vim /etc/krb5.conf
-*-*-*-
[logging]
Default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = site.yatao.net
dns_lookup_realm = false
dns_lookup_kdc = true
forwardable = true
proxiable = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
site.yatao.net = {
kdc = ad1.site.yatao.net
admin_server = ad1.site.yatao.net
default_domain = ad1.site.yatao.net
}
[domain_realm]
.site.yatao.net = site.yatao.net
site.yatao.net = site.yatao.net
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
-*-*-*-
プリンシパルDB作成
$ sudo kdb5_util create -s -r site.yatao.net
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'site.yatao.net',
master key name 'K/M@site.yatao.net'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
krb5再起動
$ sudo systemctl restart krb5-kdc.service
$ sudo systemctl status krb5-kdc.service
* krb5-kdc.service - Kerberos 5 Key Distribution Center
Loaded: loaded (/lib/systemd/system/krb5-kdc.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-01-16 18:48:01 JST; 8s ago
Process: 13394 ExecStart=/usr/sbin/krb5kdc -P /var/run/krb5-kdc.pid $DAEMON_ARGS (code=exited, status=0/SUCCESS)
Main PID: 13395 (krb5kdc)
Tasks: 1 (limit: 4698)
Memory: 1.1M
CGroup: /system.slice/krb5-kdc.service
`-13395 /usr/sbin/krb5kdc -P /var/run/krb5-kdc.pid
rng-toolsでエラーが出ていたので対応
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
sambaのビルド行程
下記でsystemdファイルも作ってくれます。
$ ./configure \
--prefix=/usr \
--exec-prefix=/usr \
--enable-fhs \
--sysconfdir=/etc \
--localstatedir=/var \
--with-libiconv=/usr/local \
--with-piddir=/run/samba \
--without-ad-dc \
--disable-cups \
--disable-spotlight \
--enable-selftest \
--with-ads \
--with-shared-modules=idmap_ad \
--with-systemd \
--systemd-install-services \
--with-systemddir=/etc/systemd/system \
--systemd-smb-extra=NotifyAccess=all \
--systemd-nmb-extra=NotifyAccess=all \
--systemd-winbind-extra=NotifyAccess=all \
2>&1 | tee log.configure.`date +"%Y%m%d"`
$ make -j4 2>&1 | tee log.make.`date +"%Y%m%d"`
$ make quicktest -j4 2>&1 | tee log.quicktest.`date +"%Y%m%d"`
エラーが出る・・・
$ sudo make install -j4 2>&1 | tee log.makeinstall.`date +"%Y%m%d"`
winbindライブラリのシンボリックリンクを作ります。
ライブラリのpathを確認
$ /sbin/smbd -b | grep LIBDIR
LIBDIR: /usr/lib
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
sambaで共有するディレクトリを用意します。
adユーザー用のホームディレクトリ(まだ使っていないのでここは未チェック)、
共有ディレクトリを作成します。
adユーザー用ホームディレクトリを作る
$ sudo mkdir /home/SITE
共有フォルダ作成
$ sudo mkdir /srv/share
$ sudo chmod 1770 /srv/share/
以下、今回のコンフィグ内容です。(肝?
$ sudo vim /etc/samba/smb.conf
[global]
workgroup = SITE
security = ADS
realm = site.yatao.net
kerberos method = system keytab
# Default ID mapping configuration for local BUILTIN accounts
# and groups on a domain member. The default (*) domain:
# - must not overlap with any domain ID mapping configuration!
# - must use a read-write-enabled back end, such as tdb.
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# - You must set a DOMAIN backend configuration
# idmap config for the SAMDOM domain
idmap config SITE : backend = ad
idmap config SITE : schema_mode = rfc2307
idmap config SITE : range = 20000-29999
idmap config SITE : unix_nss_info = yes
idmap config SITE : unix_primary_group = yes
winbind use default domain = no
winbind refresh tickets = yes
winbind offline logon = yes
private dir = /etc/samba
template homedir = /home/SITE/%U
template shell = /bin/bash
vfs objects = acl_xattr catia recycle
acl_xattr:ignore system acls = yes
map acl inherit = Yes
store dos attributes = Yes
# 長いファイル名の文字化け対処
mangled names = no
# アクセス不可になる文字の置換設定
catia:mappings = 0x22:0xa8,0x2a:0xa4,0x2f:0xf8,0x3a:0xf7,0x3c:0xab,0x3e:0xbb,0x3f:0xbf,0x5c:0xff,0x7c:0xa6
# disable printing
load printers = no
printing = bsd
printcap name = /dev/null
log file = /var/log/samba/log.%m
max log size = 1000
log level = 1 auth_audit:3 auth_json_audit:3
hosts allow = 192.168.100.
unix charset = UTF-8
dos charset = CP932
guest ok = no
[share]
comment = share Directory
path = /srv/share
writable = yes
browseable = Yes
recycle:repository = .recycle/%u
recycle:keeptree = yes
recycle:touch = no
recycle:versions = yes
recycle:maxsize = 0
recycle:exclude = *.tmp *.temp *.o *.obj ~$* *.~?? *.jbf *.dwl *.err *.dmp *.gid Thums.db mscreate.dir
recycle:exclude_dir = /tmp|/temp|/cache
recycle:noversions = *.bak *.old
コンフィグテスト
$ sudo testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_DOMAIN_MEMBER
※お気づきと思いますが、ゴミ箱設定も行っております。
不要の場合はrecycle関連削除ください。
それではドメイン参加します。
$ sudo net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- SITE
Joined 'NAS' to dns domain 'site.yatao.net'
ユーザー名はドメイン管理者名にしましょう。
ここで、参加したホスト(NAS)のAレコードはDomainControllerに登録されるのですが、PTRレコードは手動で追加する必要があるようなのでDomainControllerで追加します。
※DomainControllerでの作業です。
$ sudo samba-tool dns add 192.168.100.100 100.168.192.in-addr.arpa 110 PTR nas.site.yatao.net -U Administrator
Password for [SITE\Administrator]:
Record added successfully
dnsのチェック
$ host nas.site.yatao.net
nas.site.yatao.net has address 192.168.100.110
$ host 192.168.100.110
110.100.168.192.in-addr.arpa domain name pointer nas.site.yatao.net.
ドメイン参加状況をチェック
$ sudo net ads info
LDAP server: 192.168.100.100
LDAP server name: ad1.site.yatao.net
Realm: site.yatao.net
Bind Path: dc=SITE,dc=YATAO,dc=NET
LDAP port: 389
Server time: Sun, 17 Jan 2021 23:25:45 JST
KDC server: 192.168.100.100
Server time offset: 0
Last machine account password change: Sun, 17 Jan 2021 22:50:05 JST
$ sudo net ads testjoin
Join is OK
ネームサービススイッチの設定
$ sudo vim /etc/nsswitch.conf
passwd: files systemd winbind
group: files systemd winbind
※shadowに追加してはいけない。
満を持して起動します。
$ sudo systemctl start smb.service nmb.service winbind.service
確認
$ ps ax | egrep "samba|smbd|nmbd|winbindd"
11734 ? Ss 0:00 /usr/sbin/smbd --foreground --no-process-group
11736 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
11737 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
11767 ? Ss 0:00 /usr/sbin/nmbd --foreground --no-process-group
11796 ? Ss 0:00 /usr/sbin/winbindd --foreground --no-process-group
11798 ? S 0:00 winbindd: domain child [SITE]
もろもろ接続接続チェック
winbinddサービスの接続チェック
$ sudo wbinfo --ping-dc
checking the NETLOGON for domain[SITE] dc connection to "ad1.site.yatao.net" succeeded
ADの情報取得
$ wbinfo -u
SITE\user01
SITE\user02
SITE\administrator
SITE\guest
SITE\krbtgt
$ wbinfo -g
SITE\domain guests
SITE\dnsadmins
SITE\schema admins
SITE\enterprise admins
SITE\read-only domain controllers
SITE\enterprise read-only domain controllers
SITE\allowed rodc password replication group
SITE\group policy creator owners
SITE\domain users
SITE\domain controllers
SITE\dnsupdateproxy
SITE\domain admins
SITE\denied rodc password replication group
SITE\domain computers
SITE\ras and ias servers
SITE\cert publishers
SITE\group01
稼働状況確認
$ sudo smbclient -L \\localhost -U SITE\\user01
Enter watanabek@SITE's password:
Sharename Type Comment
--------- ---- -------
share Disk share Directory
IPC$ IPC IPC Service (Samba 4.13.4)
SMB1 disabled -- no workgroup available
問題なさそうなら自動実行するように設定。
$ sudo systemctl enable smb.service nmb.service winbind.service
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service -> /lib/systemd/system/smb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service -> /lib/systemd/system/nmb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/winbind.service -> /lib/systemd/system/winbind.service.
共有ディレクトリのオーナー設定
このあたりの細かいTipが書籍を持つと安心できるところですね。
$ sudo chown "SITE\\Administrator:SITE\Domain Users" /srv/share
ワーニング、エラー対応
・testparmで出てくる下記の意味は、同時オープンファイルの制限がWindowsとLinuxで異なる(Linuxでは1024)ためなので、解消のためには下記のような対応が必要です。
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
$ sudo vim /etc/security/limits.conf
* soft nofile 16384 #追加
* hard nofile 65536 #追加
・大量のファイルを扱うときにsmbが落ちる
観察したところ、どうもロックファイル様のディレクトリ(/var/lock)が容量不足になって居ることがわかったので、私は当該ディレクトリのマウントポイント容量を拡大しています。
$ sudo vim /etc/fstab
tmpfs /run/lock tmpfs nodev,noexec,nosuid,size=32M,mode=1777 0 0 #追加
ドメインからの離脱コマンドは下記
$ sudo net ads leave -U Administrator