Ubuntu 18.04 Server に、Samba 4.7 を導入して、Active Directory (AD) の ドメインコントローラー (DC) を構築した際のメモです。
あまり細かい説明は抜き (汗) で、手順通りに作業すれば環境が構築できるようにしています。
構築した環境
- VirtualBox 6.0 上の仮想マシン
- Ubuntu Server 18.04.2 Netboot インストーラ を使用
- Samba 4.7 をパッケージからインストール
ゴール
- 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 で改めて作業するとすんなりとできてしまったので、ちょっと頭が混乱しています。
あのネットワーク接続の消失は何だったんだろうか・・
-
最大5分のズレまでは許容されますが、それを超えるとログオンできなくなります。 ↩
0件のコメント