Ubuntu 18.04 Server に、Samba 4.7 を導入して、Active Directory (AD) の ドメインコントローラー (DC) を構築した際のメモです。

あまり細かい説明は抜き (汗) で、手順通りに作業すれば環境が構築できるようにしています。

 

 

 

構築した環境

ゴール

  • Active Directory (AD) の、ドメインコントローラ (DC) を構築
  • ホスト名: s4dc1
  • IPアドレス: 192.168.10.40/24
  • ゲートウェイ: 192.168.10.1
  • ドメイン名: SAMDOM.MYDOMAIN.ORG
  • DNSバックエンド: BIND9_DLZ

ネットワーク設定

IPv6 を無効にする

Ubuntu 18.04 で ipv6 を無効にする を参照して、IPv6 を無効にします。

IP アドレスの設定

OSインストール時に、DHCP でネットワークに接続している場合は、静的なIPアドレスに変更します。

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens2:
      addresses: [ 192.168.10.40/24 ]
      gateway4: 192.168.10.1
      nameservers:
          # search: [ mydomain.org ]
          addresses:
              - "8.8.8.8"

設定をテストします。

$ sudo netplan try

設定を適用します。

$ sudo netplan apply

ホスト名の設定

/etc/hosts を編集して、エントリを修正します。

DHCP で設定した場合、ここに 127.0.1.1 というエントリがあるかもしれませんが、その場合は、そのエントリをコメントアウトか、もしくは削除してください。

127.0.0.1   localhost
192.168.10.40   s4dc1.samdom.mydomain.org   s4dc1

/etc/hostname ホスト名を設定します。

s4dc1

ここでいったん再起動して、ネットワークの設定を適用します。

$ sudo reboot

BIND のインストール

Bind9 をパッケージからインストールします。

$ sudo apt install bind9

Bind9 のバージョンを確認します。これは後ほど必要になるので、控えておきます。

$ named -v
BIND 9.11.3-1ubuntu1.7-Ubuntu (Extended Support Version) <id:a375815>

稼動しているかどうか確認。

$ sudo systemctl status bind9
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-05-15 11:33:37 JST; 1min 34s ago
     Docs: man:named(8)
  Process: 1964 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 1968 (named)
    Tasks: 5 (limit: 4682)
   CGroup: /system.slice/bind9.service
           mq1968 /usr/sbin/named -f -u bind

May 15 11:33:39 s4dc1 named[1968]: no valid RRSIG resolving './NS/IN': 192.5.5.241#53
May 15 11:33:39 s4dc1 named[1968]: validating ./NS: no valid signature found
May 15 11:33:39 s4dc1 named[1968]: no valid RRSIG resolving './NS/IN': 202.12.27.33#53
May 15 11:33:39 s4dc1 named[1968]: validating ./NS: no valid signature found
May 15 11:33:39 s4dc1 named[1968]: no valid RRSIG resolving './NS/IN': 192.58.128.30#53
May 15 11:33:39 s4dc1 named[1968]: validating ./NS: no valid signature found
May 15 11:33:39 s4dc1 named[1968]: no valid RRSIG resolving './NS/IN': 192.203.230.10#53
May 15 11:33:40 s4dc1 named[1968]: validating ./NS: no valid signature found
May 15 11:33:40 s4dc1 named[1968]: no valid RRSIG resolving './NS/IN': 199.9.14.201#53
May 15 11:33:40 s4dc1 named[1968]: resolver priming query complete

名前解決の確認

localhost の前方参照ゾーンの確認

$ host -t A localhost 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

localhost has address 127.0.0.1

localhost の後方参照ゾーンの確認

$ host -t PTR 127.0.0.1 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

1.0.0.127.in-addr.arpa domain name pointer localhost.

Bind 起動オプションの変更

/etc/default/bind9 を編集して、Bind9 のIPv6 対応を無効にします。

#
# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-u bind -4"

Samba のインストール

インストール

$ sudo apt install samba smbclient attr winbind krb5-config krb5-user ldb-tools

ケルベロスのレルム、およびキーサーバー等の名称を確認されるので次のようにします。

  • レルム: SAMDOM.MYDOMAIN.LOCAL
  • あなたのレルムのケルベロスサーバー (kdc) : s4dc1.samdom.mydomain.org
  • あなたのレルムのケルベロス管理サーバー (admin_server) : s4dc1.samdom.mydomain.org

Samba のプロビジョニング

プロビジョニングする前に、デフォルトのsmb.confを退避させます。

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.org

対話形式 (--interactive) で、Samba をプロビジョニングします。プロビジョニング中に何点か質問が出てきますが、基本はそのままで大丈夫ですが、DNS Backend の質問には、 BIND9_DLZ を指定します。

また、Administrator のパスワードを確認されますので、パスワードを設定します。

$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [SAMDOM.MYDOMAIN.ORG]:
 Domain [SAMDOM]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=samdom,DC=mydomain,DC=org
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=samdom,DC=mydomain,DC=org
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role:           active directory domain controller
Hostname:              s4dc1
NetBIOS Domain:        SAMDOM
DNS Domain:            samdom.mydomain.org
DOMAIN SID:            S-1-5-21-3291922800-1222639128-1558736373

krb5.conf のコピー

プロビジョニングが終わると、/var/lib/samba/private/krb5.conf ができているので、これを /etc/krb5.conf と置き換えます。

$ sudo mv /etc/krb5.conf /etc/krb5.conf.org
$ sudo cp /var/lib/samba/private/krb5.conf /etc

BIND9 を設定

BIND9_DLZ モジュールの設定

Samba のプロビジョニングが終了すると、/var/lib/samba/private/named.conf ができています。このファイルを開いて、先程控えておいたBind9 のバージョンを確認して、どのライブラリを使用するのか確認します。

dlz "AD DNS Zone" {
    # For BIND 9.8.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_10.so";

    # For BIND 9.11.x
     database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so";
};

すでに、BIND 9.11.x の部分の設定のコメントが外されているので、そのまま使用します。
また、このファイルを、Bind の設定ファイル、/etc/bind/named.conf.local 内で internal ゾーンにインクルードさせます。
同様に、/etc/bind/named.conf.default-zones もインクルードさせます。

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
view "internal" {

    include "/etc/bind/named.conf.default-zones";
    include "/var/lib/samba/private/named.conf";

    match-clients {
        localnet;
    };
};

次に、/etc/bind/named.conf の内容を変更します。すでに、named.conf.local でインクルードされている named.conf.default-zones のエントリをコメントアウトします。

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
# コメントアウト
# include "/etc/bind/named.conf.default-zones";

さらに、/etc/bind/named.conf.options を編集して、アクセスコントロールリスト (acl) の設定やその他を追加します。

acl localnet {
    192.168.10.0/24;
    127.0.0.1;
};

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

    listen-on port 53 {
        localnet;
    };

    allow-query {
        localnet;
    };

    allow-transfer {
        localnet;
    };

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.

    forwarders {
        125.170.93.226;
        210.145.254.162;
    };

    // forwarders {
    //  0.0.0.0;
    // };

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys.  See https://www.isc.org/bind-keys
    //========================================================================
    dnssec-validation no;

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { none; };
};

Kerberos を使用した動的な DNS 更新のための設定

動的に DNS を更新するために、/etc/bind/named.conf.options に次のような設定を追加します。

options {
        :
    tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
        :
};

AppArmor の設定

AppArmor の設定を追加して、Bind が Samba 関連のファイルへのアクセスを許可するようにします。こちらは、SambaWiki の Interaction with AppArmor or SELinux の内容のままでは Bind がエラーを吐きます。

一応、起動に成功したのは下記のパターンです。/etc/apparmor.d/local/usr.sbin.named を編集します。

# Samba DLZ and Active Directory Zones
/var/lib/samba/** rm,
/var/lib/samba/private/dns.keytab rk,
/var/lib/samba/private/named.conf r,
/var/lib/samba/private/dns/** rwk,
/etc/samba/smb.conf r,
/var/tmp/** rwmk,
/dev/urandom rw,
/usr/lib/x86_64-linux-gnu/samba/bind9/** rm,
/usr/lib/x86_64-linux-gnu/samba/gensec/** rm,
/usr/lib/x86_64-linux-gnu/ldb/modules/ldb/** rm,
/usr/lib/x86_64-linux-gnu/samba/ldb/** rm,

設定を保存したら、AppArmor を再起動します。

$ sudo systemctl restart apparmor

Bind の設定ファイルのチェック

設定ファイルに間違いがないか確認します。

$ sudo named-checkconf

DNSリゾルバを無効にする

/etc/resolve.conf が自動的に更新されないように、無効にして、/etc/resolv.conf を削除します。

$ sudo systemctl disable systemd-resolved
$ sudo systemctl stop systemd-resolved
$ sudo rm /etc/resolv.conf

次に、手動で resolve.conf を編集します。

domain samdom.mydomain.org
nameserver 192.168.10.40

Samba の起動設定

動的な DNS の更新をテストする前に、Samba を起動します。が、初期設定ではsamba-ad-dc.service を起動させることができませんので、次の手順で起動させます。

まず、Samba と競合するサービスを停止させます。これらのサービスは個別に起動する必要がありません。samba-ad-dc.service がそれぞれ適切に起動するようになります。

$ sudo systemctl stop smbd nmbd winbind

また、これらの競合サービスが自動起動しないようにします。

$ sudo systemctl disable smbd nmbd winbind

samba-ad-dc が起動できるように、マスクを解除します。

$ sudo systemctl unmask samba-ad-dc.service
Removed /etc/systemd/system/samba-ad-dc.service.

その上で Sambaを有効にして起動します。

$ sudo systemctl enable samba-ad-dc
$ sudo systemctl start samba-ad-dc

起動がしているかどうか確認するには、 smbclient を使用します。

$ smbclient -L localhost -N
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.7.6-Ubuntu)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            MEISIN-SERVER

その後、Bind を再起動します。

$ sudo systemctl restart bind9

念の為、起動に失敗していないかログを確認します。

$ tail -f /var/log/syslog
May 15 19:46:42 s4dc1 systemd[1]: Started BIND Domain Name Server.
    :
May 15 19:46:43 s4dc1 named[3804]: zone 127.in-addr.arpa/IN/internal: loaded serial 1
May 15 19:46:43 s4dc1 named[3804]: zone 255.in-addr.arpa/IN/internal: loaded serial 1
May 15 19:46:43 s4dc1 named[3804]: zone localhost/IN/internal: loaded serial 2
May 15 19:46:43 s4dc1 named[3804]: all zones loaded
May 15 19:46:43 s4dc1 named[3804]: running

このように、all zones loaded となって、running となっていれば起動は成功しています。

May 15 19:44:49 s4dc1 named[3716]: exiting (due to fatal error)

となっている場合は、起動に失敗しています。ログを見て、修正してください。

もしログの直後に、

May 15 19:44:49 s4dc1 kernel: [ 2818.055039] audit: type=1400 audit(1557917089.221:11): apparmor="DENIED" operation="open" profile="/usr/sbin/named" name="/var/lib/samba/private/named.conf" pid=3716 comm="isc-worker0001" requested_mask="r" denied_mask="r" fsuid=107 ouid=0

このように出力されている場合は、AppArmor の設定ミスになります(あるいは、AppArmor の再起動のし忘れ等)。

動的DNS更新のテスト

無事、Bindが起動したなら、動的DNS更新をテストします。

$ sudo samba_dnsupdate --verbose --all-names
IPs: ['192.168.10.41']
force update: A s4dc1.samdom.mydomain.org 192.168.10.41
    :
29 DNS updates and 0 DNS deletes needed
Successfully obtained Kerberos ticket to DNS/s4dc1.samdom.mydomain.org as S4DC1$
update(nsupdate): A s4dc1.samdom.mydomain.org 192.168.10.41
Calling nsupdate for A s4dc1.samdom.mydomain.org 192.168.10.41 (add)
Successfully obtained Kerberos ticket to DNS/s4dc1.samdom.mydomain.org as S4DC1$
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
s4dc1.samdom.mydomain.org. 900  IN      A       192.168.10.41
    :

逆引きゾーンの作成

これは必須の作業ではなく、必要に応じて実施してください。

sudo samba-tool dns zonecreate 192.168.10.40 10.168.192.in-addr.arpa -Uadministrator
Password for [SAMDOM\administrator]:
Zone 11.168.192.in-addr.arpa created successfully

最終確認

ここまでが一通り終わったら、最終チェックをします。

Samba AD DC の確認

ファイルサーバーの確認をします。ドメインコントローラの共有フォルダの一覧が見えます。

$ smbclient -L localhost -U%

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.7.6-Ubuntu)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            MEISIN-SERVER

次に、Administrator でログオンを試みます。下の例は、Administrator としてログオンして、ls コマンドを発行させる例です。

$ smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter SAMDOM\Administrator's password:
  .                                   D        0  Fri May 17 08:24:41 2019
  ..                                  D        0  Fri May 17 08:24:43 2019

                37175892 blocks of size 1024. 33409400 blocks available

DNS の確認

LDAPサーバーが名前解決できるか確認。

$ host -t SRV _ldap._tcp.samdom.mydomain.org.
_ldap._tcp.samdom.mydomain.org has SRV record 0 100 389 s4dc1.samdom.mydomain.org.

Kerberosサーバーが名前解決できるか確認。

$ host -t SRV _kerberos._udp.samdom.mydomain.org.
_kerberos._udp.samdom.mydomain.org has SRV record 0 100 88 s4dc1.samdom.mydomain.org.

Sambaサーバーが名前解決できるか確認。

$ host -t A s4dc1.samdom.mydomain.org.
s4dc1.samdom.mydomain.org has address 192.168.10.40

Kerberos の確認

Kerberos でチケットを発行。

$ kinit administrator
Password for administrator@SAMDOM.MYDOMAIN.ORG:

発行したチケットの確認。

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@SAMDOM.MYDOMAIN.ORG

Valid starting       Expires              Service principal
05/17/2019 09:47:44  05/17/2019 19:47:44  krbtgt/SAMDOM.MYDOMAIN.ORG@SAMDOM.MYDOMAIN.ORG
        renew until 05/18/2019 09:47:32

ここまで来たらあと一息です。

NTP の設定

Active Directory の環境は、ドメインコントローラーとドメインのメンバPC の時刻が一致している必要があります1。メンバPCから時刻同期ができるように、NTPサーバーのインストールを行います。

NTP のインストール。

$ sudo apt install ntp ntpdate

/var/lib/samba/ntp_signd のパーミッションを変更

$ sudo chown root:ntp /var/lib/samba/ntp_signd/
$ sudo chmod 750 /var/lib/samba/ntp_signd/

/etc/ntp.conf を編集

driftfile /var/lib/ntp/ntp.drift
logfile   /var/log/ntp
ntpsigndsocket /var/lib/samba/ntp_signd

server 127.127.1.0
fudge  127.127.1.0 stratum 10
pool ntp.nict.jp iburst prefer

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery mssntp

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1

# Needed for adding pool entries
restrict source notrap nomodify nopeer noquery

NTP を一旦停止させて、時刻を強制的に同期させる。

$ sudo systemctl stop ntp
$ sudo ntpdate -B ntp.nict.jp
17 May 11:35:55 ntpdate[2588]: adjust time server 133.243.238.244 offset 0.002638 sec

NTP サービスを起動

$ sudo systemctl start ntp

同期の確認

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.          10 l   63   64  377    0.000    0.000   0.000
 ntp.nict.jp     .POOL.          16 p    -   64    0    0.000    0.000   0.000

まとめ

以上で、Samba4.7 の基本的な設定と構築は終わりです。

後は、実際にWindows クライアントから接続していろいろテストしてみるつもりです。

以前に、Samba 4.1 を構築した頃とそんなに多く違うこともなかったですね。変わったのは、Ubuntu のネットワーク周りの設定ですね。

本編とは関係ありませんが、VirtualBox で検証を始める前に、Ubuntu Server 上で KVM を使って構築していたのですが、作業の途中から全くネットワーク接続がなくなってしまう怪現象にみまわれて、いっときは検証を断念しそうになりました。でも、その後 VirtualBox で改めて作業するとすんなりとできてしまったので、ちょっと頭が混乱しています。

あのネットワーク接続の消失は何だったんだろうか・・


  1. 最大5分のズレまでは許容されますが、それを超えるとログオンできなくなります。 


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。