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

samba

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

コメントを残す

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