SAMBAでドメインメンバー(NAS)を構築した記録(Ver.4.13.4)

samba

今回はドメインメンバーとしての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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です