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