CentOS 7とSamba 4.8でActive Directoryを設定する

centos-samba-ad48-top

今までの記事でSambaに関する幾つかの機能を紹介してきましたが、一番、強力な機能はなんだと思いますか。Sambaで一番、強力な機能はWindowsのActive Directoryと同等の機能を提供できるSambaドメイン機能だと思います。
Active DirectoryはWindows Serverに実装されるディレクトリサービスで、ユーザーやコンピューターの一元管理を行うための機能です。
Windowsのクライアントやユーザーは台数が増えると管理が大変ですが、このActive Directoryによって一元管理を行うことができ、管理の手間を軽減できます。この管理機能をSambaでは利用できます。(最新のWindows Serverと比較すると、一部の機能に制限があります。)

複数のWindowsクライアントやユーザーを一元管理することがSambaでは、高価なWindows Serverライセンスが無くとも可能です。
今回の記事では、Sambaを利用したこのActive Directoryの構築手順について紹介していきます。
CentOS7のベースレポジトリに含まれるSamba4ではドメインコントローラーになることができませんので、今回はSambaのソースコードからコンパイルとインストールを行います。
追記:2018年10月26日 本記事ではSambaの4.8系を対象としています。
Samba 4.9と4.10でのセットアップについては別の記事

Open Source
samba-ad-49-top
CentOS 7とSamba4.9でActive Directory環境を作成する

前回の記事でSambaでのActive Directory構築手順を紹介しました。そのSambaですが、2018年10月現在、Sambaの最新バージョンが4.8系から4.9系にバージョンアップされています。 以前の記事で紹介した4.8系とは ...

Open Source
samba410-ad-setup-top
CentOSとSamba4.10系でWindowsと同等のActive Directoryを作成

前回の記事でSamba4.9系でのActive Directory構築手順を紹介しました。そのSambaですが、2019年4月現在、Sambaの最新バージョンが4.9系から4.10系にバージョンアップされています。Samba4.10では以前 ...

で紹介しています。これから構築を始める方には4.10の利用をオススメします。

1. Sambaドメインを構築する環境について

本記事でSambaドメインを構築する環境(サーバー)は別のブログ記事

>「CentOS 7 インストール Linuxを始めるにはインストールからがお勧め」

で構築したCentOS7を利用する前提となります。もしまだCentOSの環境が無い場合は、是非、この記事を参照してインストールを行ってみてください。
尚、Sambaは主な役割がファイル共有になりますので、基本的にローカルネットワークで利用することを前提としています。従ってインターネット上にあるVPSのようなものに構築することはお勧めしません。本環境でもローカルに構築した環境を利用しています。

1-1. Sambaサーバーの設定情報について

ドメインコントローラーになるSambaサーバーの基本情報は以下の通りです。

  • CentOSのバージョン 7.5
  • IPアドレス 192.168.241.221
  • ホスト名 dc01
  • ドメイン名 testdom.local

2. ホスト名とhostsファイルの設定

本章ではドメインコントローラーとなるLinuxサーバーのホスト名の設定手順を説明していきます。まずはシステム(OS)に対して、任意のホスト名を設定します。ここで設定するホスト名はドメインコントローラー名になりますので、運用を考えたホスト名を設定することをお勧めします。

2-1. ホスト名の設定

ホスト名の設定には nmcliコマンドを以下のように実行します。ここではホスト名として”dc01”を設定します。(実際には、運用する環境に合わせたホスト名を指定してください。)

# nmcli general hostname dc01

エラーが出力されなければ、コマンドは正常に完了しています。設定パラメータの確認はhostnameコマンドを利用します。オプション無しで、コマンドを実行すると、設定値が表示されます。

$ hostname
dc01

設定値としてnmcliコマンドで設定したホスト名(ここではdc01)が表示されれば、hostnameの設定確認は完了です。

2-2. hostsファイルの設定

続いてhostsファイルの変更を行います。hostsファイルは”/etc/hosts”になります。このファイルに設定するホスト名とFQDNを記載します。本記事の環境ではホスト名がdc01、ドメイン名がtestdom.localになりますので、以下のようにhostsファイルに追加します。

# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.241.221 dc01.testdom.local dc01 この行を追加する。

追加後、ファイルの保存を行います。これでhostsファイルの設定は完了です。

3. Linuxサーバーの時刻同期

項目2. まででホスト名周りの設定が完了しましたので、次にLinuxサーバーの時刻同期を設定します。時刻同期はActive Directoryの認証方式であるKerberos認証が機能する上では必須になります。ここでは外部のタイムサーバーに同期を設定します。(もしローカルにタイムサーバがある場合は、そちらを指定下さい)時刻同期はLinuxサーバーにインストールされているchronydサービスを利用します。

3-1. chronydサービスの設定

時刻同期用のサービスであるchronydの設定は、/etc/chrony.confファイルで行います。viエディタで設定ファイルを開きます。

# vi /etc/chrony.conf

chrony.conf設定ファイルは、デフォルトで時刻同期先のタイムサーバーがいくつか記載してありますので、こちらをコメントアウトしていきます。

# These servers were defined in the installation:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

設定ファイルのコメントアウト後、参照したい時刻同期用サーバーを同じ形で記載していきます。
因みに最後に記載した、iburstオプションは起動直後に同期先のサーバーに4回連続的に問い合わせを行い、時刻同期が早く行うことができるオプションになります。本記事では外部のNTPサーバーである ntp.jst.mfeed.ad.jpを同期先のタイムサーバーとして指定します。
以下をコメントアウトした下の部分に追記します。

server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst

追記と編集が終わったら、chrony.confファイルを保存します。

3-2. chronydサービスの再起動

項目3-1. で行った設定を有効にするためにchronydサービスを再起動します。

# systemctl restart chronyd

エラーが表示されなければ、正常に再起動は完了しています。サービスのステータスと確認します。

$ systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since 金 2018-08-03 17:30:10 JST; 5s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 2268 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 2264 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 2266 (chronyd)
CGroup: /system.slice/chronyd.service
mq2266 /usr/sbin/chronyd

上記から正常にchronydサービスが起動していることが確認できました。これでサービスの再起動は完了です。

3-3. 時刻同期の確認

設定した内容が正常に反映されていること、また時刻同期先のタイムサーバーと同期が出来ていることを確認します。確認用のコマンドは chronyc です。このコマンドに sources オプションを指定することで、設定したタイムサーバーとの同期状態を確認することができます。以下のように実行します。

# chronyc sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
=============================================================
^+ ntp1.jst.mfeed.ad.jp 2 6 17 1 -3995us[-7241us] +/- 93ms
^* ntp2.jst.mfeed.ad.jp 2 6 17 0 +1599us[-1648us] +/- 105ms

タイムサーバーと正常に同期できている場合、同期先のタイムサーバー名に*(アスタリスク)が付きます。*が付かない場合は

  • 設定ファイルに誤りがある
  • サービスの再起動が出来ていない
  • インターネットへ接続できていない
  • ホストの名前引きに問題がある

などが原因として考えられます。上記の原因を元に調査を行って下さい。ここでは正常に設定が完了したいという前提で、先へ進めていきます。

4. Sambaインストール用パッケージの導入

本章ではSambaをソースからビルドするために必要なパッケージの導入を説明します。導入に必要となるパッケージはかなり多いため、各パッケージの説明については割愛しています。

4-1. Windowsドメイン参加用パッケージの詳細を確認

Active Directoryを利用できるSambaサーバーのインストールに必要なパッケージはSambaの公式wikiサイトに記載があります。
参考 :Samba公式サイト
Distribution-specific Packages Required to Build Samba Red Hat Enterprise Linux 7 / CentOS 7 / Scientific Linux 7

このウェブサイトによると、SambaをCentOS7にインストールするために必要なパッケージは以下になります。

attr bind-utils docbook-style-xsl gcc gdb krb5-workstation
libsemanage-python libxslt perl perl-ExtUtils-MakeMaker
perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python
python-crypto gnutls-devel libattr-devel keyutils-libs-devel
libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel
pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel

このパッケージを導入します。

4-2. パッケージ導入前の設定

Sambaサーバーをインストールするために必要なパッケージの一部は、epel(エンタープライズ Linux 用の拡張パッケージ)レポジトリに含まれています。epelレポジトリを利用するためにepel-releaseパッケージをインストールします。

4-2-1. epelレポジトリのインストール

epelレポジトリは通常のパッケージと同じくyumコマンドでインストールできます。以下のように実行することでインストールが開始されます。

# yum install epel-release

以下、実行後の応答になります。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-9 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

インストール中:
epel-release noarch 7-9 extras 14 k

トランザクションの要約
インストール 1 パッケージ

総ダウンロード容量: 14 k
インストール容量: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-9.noarch.rpm | 14 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-9.noarch [
インストール:
epel-release.noarch 0:7-9

完了しました!

エラーの出力がなく”完了しました!”と表示されれば、epelレポジトリは正常にインストールされています。

4-2-2. epelレポジトリの確認

epelレポジトリがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、epelレポジトリがインストールされていることを確認します。

$ yum list installed | grep epel

出力結果として、epelレポジトリパッケージが表示されることを確認します。

epel-release.noarch 7-9 @extras

上記の応答結果から、epelレポジトリパッケージがインストールされていることが確認できました。
epelがレポジトリリストに追加されていることを確認します。以下のように実行することで、現在、利用が可能なレポジトリリストを確認できます。

$ yum repolist

応答結果にepelが表示されればepelレポジトリを利用する準備は完了しています。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.yz.yamagata-u.ac.jp
* epel: ftp.yz.yamagata-u.ac.jp
* extras: ftp.yz.yamagata-u.ac.jp
* updates: ftp.yz.yamagata-u.ac.jp
リポジトリー ID リポジトリー名 状態
!base/7/x86_64 CentOS-7 - Base 9,591
!epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,507
!extras/7/x86_64 CentOS-7 - Extras 448
!updates/7/x86_64 CentOS-7 - Updates 2,416
repolist: 24,962

これでepelレポジトリのインストールは完了です。

4-3. Windowsドメイン参加用パッケージのインストール

項目4-1. でSambaのビルドに必要なパッケージは確認できましたので、以下のようにyumコマンドでインストールを行います。パッケージ数が多いので、コピー&ペーストでインストールするほうが簡単だと思います。環境によっては重複しているパッケージもあるかもしれませんので、その点はご了承下さい。

# yum -y install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \
libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \
perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \
python-crypto gnutls-devel libattr-devel keyutils-libs-devel \
libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel

yumコマンドを実行すると、パッケージのインストールが開始されます。尚、インストール時の出力結果については、かなり長くなるため、一部を割愛しています。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ attr.x86_64 0:2.4.46-13.el7 を インストール
---> パッケージ docbook-style-xsl.noarch 0:1.78.1-3.el7 を インストール

【略】

---> パッケージ perl-Net-LibIDN.x86_64 0:0.12-15.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ perl-Net-Daemon.noarch 0:0.48-5.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

インストール中:
attr x86_64 2.4.46-13.el7 base 66 k
docbook-style-xsl noarch 1.78.1-3.el7 base 2.0 M
gnutls-devel x86_64 3.3.26-9.el7 base 1.4 M
keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k
krb5-workstation x86_64 1.15.1-19.el7 updates 814 k
libacl-devel x86_64 2.2.51-14.el7 base 72 k
libaio-devel x86_64 0.3.109-13.el7 base 13 k
libattr-devel x86_64 2.4.46-13.el7 base 35 k
libblkid-devel x86_64 2.23.2-52.el7_5.1 updates 78 k
libsemanage-python x86_64 2.5-11.el7 base 112 k
libxml2-devel x86_64 2.9.1-6.el7_2.3 base 1.0 M
libxslt x86_64 1.1.28-5.el7 base 242 k
openldap-devel x86_64 2.4.44-15.el7_5 updates 803 k
pam-devel x86_64 1.1.8-22.el7 base 184 k
perl-ExtUtils-MakeMaker noarch 6.68-3.el7 base 275 k
perl-Parse-Yapp noarch 1.05-50.el7 base 48 k
perl-Test-Base noarch 0.62-1.el7 epel 51 k
policycoreutils-python x86_64 2.5-22.el7 base 454 k
popt-devel x86_64 1.13-16.el7 base 22 k
python-devel x86_64 2.7.5-69.el7_5 updates 397 k
python2-crypto x86_64 2.6.1-15.el7 extras 477 k
readline-devel x86_64 6.2-10.el7 base 138 k
systemd-devel x86_64 219-57.el7_5.1 updates 195 k
zlib-devel x86_64 1.2.7-17.el7 base 50 k
依存性関連でのインストールをします:
audit-libs-python x86_64 2.8.1-3.el7_5.1 updates 75 k
checkpolicy x86_64 2.5-6.el7 base 294 k
cyrus-sasl x86_64 2.1.26-23.el7 base 88 k
cyrus-sasl-devel x86_64 2.1.26-23.el7 base 310 k
docbook-dtds noarch 1.0-60.el7 base 226 k

【略】

xml-common noarch 0.6.3-39.el7 base 26 k
xz-devel x86_64 5.2.2-1.el7 base 46 k

トランザクションの要約
インストール 24 パッケージ (+110 個の依存関係のパッケージ)

総ダウンロード容量: 21 M
インストール容量: 77 M
Downloading packages:
(1/134): attr-2.4.46-13.el7.x86_64.rpm | 66 kB 00:00:00

【略】

(132/134): xml-common-0.6.3-39.el7.noarch.rpm | 26 kB 00:00:00
(134/134): xz-devel-5.2.2-1.el7.x86_64.rpm | 46 kB 00:00:00
合計 3.0 MB/s | 21 MB 00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : 3:perl-version-0.99.07-3.el7. [ ] 1/134
インストール中 : keyutils-libs-devel-1.5.8-3.el7.x86_64 134/134

【略】

インストール:
attr.x86_64 0:2.4.46-13.el7 docbook-style-xsl.noarch 0:1.78.1-3.el7
gnutls-devel.x86_64 0:3.3.26-9.el7 keyutils-libs-devel.x86_64 0:1.5.8-3.el7
krb5-workstation.x86_64 0:1.15.1-19.el7 libacl-devel.x86_64 0:2.2.51-14.el7
libaio-devel.x86_64 0:0.3.109-13.el7 libattr-devel.x86_64 0:2.4.46-13.el7
libblkid-devel.x86_64 0:2.23.2-52.el7_5.1 libsemanage-python.x86_64 0:2.5-11.el7
libxml2-devel.x86_64 0:2.9.1-6.el7_2.3 libxslt.x86_64 0:1.1.28-5.el7
openldap-devel.x86_64 0:2.4.44-15.el7_5 pam-devel.x86_64 0:1.1.8-22.el7
perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7 perl-Parse-Yapp.noarch 0:1.05-50.el7
perl-Test-Base.noarch 0:0.62-1.el7 policycoreutils-python.x86_64 0:2.5-22.el7
popt-devel.x86_64 0:1.13-16.el7 python-devel.x86_64 0:2.7.5-69.el7_5
python2-crypto.x86_64 0:2.6.1-15.el7 readline-devel.x86_64 0:6.2-10.el7
systemd-devel.x86_64 0:219-57.el7_5.1 zlib-devel.x86_64 0:1.2.7-17.el7

依存性関連をインストールしました:
audit-libs-python.x86_64 0:2.8.1-3.el7_5.1
checkpolicy.x86_64 0:2.5-6.el7
cyrus-sasl.x86_64 0:2.1.26-23.el7
cyrus-sasl-devel.x86_64 0:2.1.26-23.el7
docbook-dtds.noarch 0:1.0-60.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBD-SQLite.x86_64 0:1.39-3.el7

【略】

pyparsing.noarch 0:1.5.6-9.el7
python-IPy.noarch 0:0.75-6.el7
setools-libs.x86_64 0:3.3.8-2.el7
sgml-common.noarch 0:0.6.3-39.el7
systemtap-sdt-devel.x86_64 0:3.2-8.el7_5
unbound-libs.x86_64 0:1.6.6-1.el7
xml-common.noarch 0:0.6.3-39.el7
xz-devel.x86_64 0:5.2.2-1.el7

完了しました!

エラーの出力がなく”完了しました!”と表示されれば、パッケージは正常にインストールされています。

5. Sambaのインストール

本章ではSambaをソースコードからビルドしてインストールするための手順を紹介します。必要なパッケージが全てインストールされていれば、特に問題はなく完了します。

5-1. Sambaのソースコードを取得

Sambaをビルドするためにソースコードの取得を行います。ソースコードは”/usr/local/src”ディレクトリ以下に、”samba”ディレクトリを作成し、そこにダウンロードするものとします。以下の手順で行います。

# mkdir /usr/local/src/samba
# cd /usr/local/src/samba

ディレクトリの作成と移動後にwgetコマンドでソースコードをダウンロードします。以下のように実行します。

# wget https://download.samba.org/pub/samba/samba-latest.tar.gz

※samba-latest.tar.gzをダウンロードすると、2018年10月現在ではSambaの4. 9系がダウンロードされます。本記事の対象となる4. 8系はSambaのダウンロードサイトである

Samba公式ダウンロードサイト

からダウンロードして下さい。
以下がwgetコマンドの実行結果です。

--2018-08-30 12:02:03-- https://download.samba.org/pub/samba/samba-latest.tar.gz
download.samba.org (download.samba.org) をDNSに問いあわせています... 144.76.82.156, 2a01:4f8:192:486::443:2
download.samba.org (download.samba.org)|144.76.82.156|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 17715401 (17M) [application/gzip]
`samba-latest.tar.gz' に保存中

100%[========================================================>] 17,715,401 4.75MB/s 時間 3.6s

2018-08-30 12:02:08 (4.75 MB/s) - `samba-latest.tar.gz' へ保存完了 [17715401/17715401]

保存完了と表示されればダウンロードは完了しています。この時点でのディレクトリツリーは以下のようになります。

src
`-- samba
|
`-- samba-latest.tar.gz

これでSambaのソースコード取得は完了です。

5-2. Sambaのソースコードを展開

Sambaのソースコードはtarコマンドでtar.gz形式に圧縮アーカイブされています。(tarballと呼ばれます)これをtarコマンドで展開します。本記事ではソースコードの展開はzxvfオプションを付与して行っています。やり易いオプションを指定してください。以下のように実行します。

# tar zxvf samba-latest.tar.gz

tarコマンドを実行すると、ソースコードのアーカイブが展開されます。vオプションを指定していますので、展開の状況が以下のように表示されます。

samba-4.8.5/.gitlab-ci-private.yml
samba-4.8.5/.testr.conf
samba-4.8.5/.travis.yml
samba-4.8.5/.ycm_extra_conf.py
samba-4.8.5/BUILD_SYSTEMS.txt
samba-4.8.5/COPYING
samba-4.8.5/Makefile
samba-4.8.5/PFIF.txt
samba-4.8.5/README
samba-4.8.5/README.Coding
samba-4.8.5/README.cifs-utils
samba-4.8.5/README.contributing
samba-4.8.5/VERSION
samba-4.8.5/WHATSNEW.txt
samba-4.8.5/auth/auth_log.c
samba-4.8.5/auth/auth_sam_reply.c
samba-4.8.5/auth/auth_sam_reply.h

【略】

展開が完了すると、samba-4.8.5というディレクトリになります。ディレクトリツリーは以下です。

src
`-- samba
|-- samba-4.8.5
`-- samba-latest.tar.gz

これでソースコードの展開は完了です。

5-3. configureの実行

項目5-2. で展開したsamba-4.8.5ディレクトリに移動してソースコードをビルドするために必要なconfigureコマンドを実行します。configureはインストールを行うOSやCPUなどの環境調査を行い、ソースコードをコンパイルするのに必要なMakefileファイルを作成するためのコマンドです。
まずディレクトリをsamba-4.8.5へ移動します。

# ls
samba-4.8.5 samba-latest.tar.gz
# cd samba-4.8.5/

samba-4.8.5ディレクトリの中は以下のようになっています。

# ls
BUILD_SYSTEMS.txt docs script
COPYING docs-xml selftest
Makefile dynconfig simple-dc-steps.sh
PFIF.txt examples source3
README file_server source4
README.Coding include testdata
README.cifs-utils install_with_python.sh testprogs
README.contributing lib tests
VERSION libcli testsuite
WHATSNEW.txt libds third_party
auth libgpo wintest
buildtools librpc wscript
callcatcher-exceptions.grep nsswitch wscript_build
configure packaging wscript_build_embedded_heimdal
configure.developer pidl wscript_build_system_heimdal
coverity prog_guide4.txt wscript_build_system_mitkrb5
ctdb python wscript_configure_system_mitkrb5
dfs_server release-scripts

configureで指定するオプションは”./configure --help”で確認できます。ここではオプションは特に指定せず、デフォルトのままにして(オプションを付与しない)configureを実行します。

# ./configure

実行するとconfigureが始まります。

Checking for program gcc or cc : /usr/bin/gcc
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for program git : /usr/bin/git
Check for -MD : yes
Checking for program gdb : /usr/bin/gdb
Checking for header sys/utsname.h : yes
Checking uname sysname type : Linux
Checking uname machine type : x86_64

【略】

Checking configure summary : ok
Checking compiler for PIE support : yes
Checking compiler for full RELRO support : yes
Checking if toolchain accepts -fstack-protector : yes
'configure' finished successfully (53.540s)

完了までにやや時間がかかります。”'configure' finished successfully”と表示されればconfigureは終了です。

5-4. makeの実行

configureが完了したら、ソースコードをコンパイルするためのコマンド”make”を実行します。以下のように実行します。

# make

実行後、ログが画面に表示されます。

WAF_MAKE=1 python ./buildtools/bin/waf build
Waf: Entering directory `/usr/local/src/samba/samba-4.8.5/bin'
symlink: tevent.py -> python/tevent.py
symlink: _tdb_text.py -> python/_tdb_text.py
symlink: _ldb_text.py -> python/_ldb_text.py
symlink: samba/__init__.py -> python/samba/__init__.py
symlink: samba/colour.py -> python/samba/colour.py
symlink: samba/common.py -> python/samba/common.py
symlink: samba/compat.py -> python/samba/compat.py
symlink: samba/dbchecker.py -> python/samba/dbchecker.py

【略】

[3976/3977] Generating man/nmblookup4.1
Note: Writing nmblookup4.1
[3977/3977] Generating man/samba_gpoupdate.8
Note: Writing samba_gpoupdate.8
Waf: Leaving directory `/usr/local/src/samba/samba-4.8.5/bin'
'build' finished successfully (9m35.266s)

'build' finished successfullyと表示されればコンパイルは完了です。

5-5. make installの実行

コンパイルまで完了しましたので、続いてSambaのインストールを行います。インストールはmakeコマンドに”install”オプションを付与して実行します。以下のように実行します。

# make install

実行すると以下のように進捗が表示されます。

WAF_MAKE=1 python ./buildtools/bin/waf install
Waf: Entering directory `/usr/local/src/samba/samba-4.8.5/bin'
Selected embedded Heimdal build
Checking project rules ...
Project rules pass
[ 139/4311] Linking default/lib/replace/libreplace-samba4.inst.so
* installing bin/default/lib/replace/libreplace-samba4.inst.so as /usr/local/samba/lib/private/libreplace-samba4.so
[ 140/4311] Generating VERSION
* installing bin/default/lib/param/samba-hostconfig.pc as /usr/local/samba/lib/pkgconfig/samba-hostconfig.pc
* installing bin/default/source4/librpc/dcerpc_samr.pc as /usr/local/samba/lib/pkgconfig/dcerpc_samr.pc
* installing bin/default/source4/librpc/dcerpc.pc as /usr/local/samba/lib/pkgconfig/dcerpc.pc
* installing bin/default/source4/dsdb/samdb.pc as /usr/local/samba/lib/pkgconfig/samdb.pc
* installing bin/default/librpc/ndr_standard.pc as /usr/local/samba/lib/pkgconfig/ndr_standard.pc
* installing bin/default/librpc/ndr_nbt.pc as /usr/local/samba/lib/pkgconfig/ndr_nbt.pc
* installing bin/default/librpc/ndr.pc as /usr/local/samba/lib/pkgconfig/ndr.pc

【略】

* installing bin/default/pidl/Parse::Pidl::Util.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Util.3pm
* installing bin/default/pidl/Parse::Pidl::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::NDR.3pm
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm
Waf: Leaving directory `/usr/local/src/samba/samba-4.8.5/bin'
'install' finished successfully (2m51.122s)

'install' finished successfullyと表示されればsambaのインストールは完了です。

5-6. インストール後の設定

(本設定は必須ではありません。必要に応じて設定して下さい)ソースからインストールしたSambaはシェルのPATHが設定されていない”/usr/local/samba”以下にインストールされます。
この場合、Sambaの実行に”/usr/local/samba”を付与する必要があり、利便性に欠けてしまいます。その為、利用しているシェル(本記事の環境ではbash)に
sambaのPATHを設定します。
rootユーザーのみSambaを実行する前提で、rootユーザーのホームディレクトリにある”.bash_profile”ファイルにパスを追記します。以下のように実行します。

# vi /root/.bash_profile

.bash_profileファイルが展開されます。最下行にパス”export PATH="/usr/local/samba/bin:/usr/local/samba/sbin:${PATH}"”を追記します。

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export PATH="/usr/local/samba/bin:/usr/local/samba/sbin:${PATH}" <=この行を追加

追加後、ファイルを保存します。ファイルの設定を反映するにはsourceコマンドを利用します。以下のように実行します。

source ~/.bash_profile

これでSambaのPATH追加は完了です。テストとしてバージョン確認を実行します。sambaコマンドに”-V”オプションを付与して実行します。以下のようにSambaバージョンが表示されれば、設定は完了です。

# samba -V
Version 4.8.5

6. ドメインのデプロイ

Sambaのインストールが完了したところで、Sambaドメインのデプロイを行います。デプロイには専用のコマンドが用意されていますのでこれを利用します。”samba-tool domain provison”コマンドにオプションを付与して実行します。
本記事では、その他のオプションとして”--use-rfc2307”(UNIX属性の有効化)と対話式を有効にする”--interactive”を付与しています。オプションは環境によって適宜変更を行って下さい。(一般的な環境では本記事のオプションで良いかと思います。)
以下のように実行します。

# samba-tool domain provision --use-rfc2307 --interactive

実行後、以下のように対話式でドメインのセットアップが開始されます。必要なパラメーターはほぼ、予め指定されています。指定されているパラメーターで良い場合はエンターキーを押して先へ進めます。

Realm [TESTDOM.LOCAL]: <=ドメイン名
Domain [TESTDOM]: <=NETBIOSのドメイン名
Server Role (dc, member, standalone) [dc]: <=サーバーの役割(ドメインコントローラーの場合にはdc)
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: <=dnsとしてどれを利用するかを選択。SAMBA_INTERNALはSambaに含まれるdnsサーバー
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.241.254]:<=dnsのフォワーダー先を指定。
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
Unable to determine the DomainSID, can not enforce uniqueness constraint on local domainSIDs

Adding DomainDN: DC=testdom,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers and extended rights
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=testdom,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /usr/local/samba/private/krb5.conf
Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
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: dc01
NetBIOS Domain: TESTDOM
DNS Domain: testdom.local
DOMAIN SID: S-1-5-21-4034970910-3372605962-264176640

上記のようにドメインのセットアップ情報が表示されればドメインのデプロイは完了です。

7. Sambaの起動とドメインコントローラーの動作確認

Sambaの起動はオプション無しで”samba”コマンドを入力することで起動できます。ソースコードからインストールした場合は起動スクリプトがありませんので、ここではコマンドで直接、Sambaを起動してみます。以下のように入力します。

# samba

正常に起動できればエラーが表示されずにプロンプトに戻ります。起動しているプロセスを表示させるpsコマンドで動作を確認します。
以下のように実行します。

# ps -aux | grep samba
root 36520 1.3 3.6 585148 36248 ? Ss 09:54 0:00 samba
root 36521 0.0 2.3 585148 23104 ? S 09:54 0:00 samba
root 36522 2.2 2.8 589828 28452 ? S 09:54 0:00 samba
root 36523 0.0 2.2 585152 22688 ? S 09:54 0:00 samba
root 36524 0.0 2.5 589300 25736 ? S 09:54 0:00 samba
root 36525 0.0 2.3 585148 22992 ? S 09:54 0:00 samba
root 36526 8.8 2.5 585148 25832 ? S 09:54 0:02 samba
root 36527 1.1 4.0 644068 40704 ? Ss 09:54 0:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 36528 0.0 2.3 585148 23260 ? S 09:54 0:00 samba
root 36529 0.0 2.5 585148 25300 ? S 09:54 0:00 samba
root 36530 0.2 2.4 585148 24424 ? S 09:54 0:00 samba
root 36531 0.0 2.3 585148 23072 ? S 09:54 0:00 samba
root 36532 0.0 2.3 585148 23092 ? S 09:54 0:00 samba
root 36533 0.0 2.2 585152 22688 ? S 09:54 0:00 samba
root 36534 0.5 3.1 585148 31496 ? S 09:54 0:00 samba
root 36535 0.1 2.4 585148 24132 ? S 09:54 0:00 samba
root 36536 1.0 3.8 626112 38248 ? Ss 09:54 0:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root 36537 0.0 2.5 585568 25348 ? S 09:54 0:00 samba
root 36546 0.0 2.2 639000 22724 ? S 09:54 0:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 36547 0.0 2.2 639000 22540 ? S 09:54 0:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 36548 0.0 2.6 632480 26640 ? S 09:54 0:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root 36549 0.0 2.4 627060 24704 ? S 09:54 0:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root 36550 0.0 2.6 632480 25948 ? S 09:54 0:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root 36551 0.0 2.3 644592 23544 ? S 09:54 0:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 36565 0.0 0.0 112720 980 pts/0 S+ 09:54 0:00 grep --color=auto samba

上記からSambaが正常に起動していることが確認できました。これでSambaの起動は完了です。

7-1. ドメインのシステム ボリューム ツリー共有の確認

ここから起動したSambaのドメイン設定について確認を行います。まずはドメインコントローラーで共有されるnetlogonやsysvolといったシステム ボリューム ツリー共有を確認します。
smbclientコマンドを以下のように実行します。

# smbclient -L localhost -U%

実行すると、以下のようにシステム ボリューム ツリー共有が表示されます。

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

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

Workgroup Master
--------- -------

ドメインコントローラーの共有はデフォルトでnetlogon、sysvol、IPC$の三つがあります。全て表示されれば、確認は完了です。

7-2. ドメインコントローラーへの接続確認

続いて、ドメインコントローラーへの接続確認を行います。ドメインコントローラーへの接続にはsmbclientコマンドを以下のように実行します。

# smbclient //localhost/netlogon -UAdministrator -c 'ls'

実行すると管理者のパスワード入力を求められます。パスワードを入力します。

Enter TESTDOM\Administrator's password:
. D 0 Wed Aug 29 19:06:09 2018
.. D 0 Wed Aug 29 19:06:12 2018

18307072 blocks of size 1024. 14824460 blocks available

入力後、上記のように表示されれば、正常に接続ができています。これでドメインコントローラーへの接続確認は完了です。

7-3. DNSの設定確認

SambaのDNSにエントリが正常に作成されているかを確認します。確認する前に、自身で名前解決ができるようにネットワークのDNS設定を変更します。

7-3-1. DNSの設定確認と変更

現状のDNS設定を確認します。DNSの設定はresolv.confで確認できます。catコマンドで設定を表示します。

# cat /etc/resolv.conf
# Generated by NetworkManager
search testdom.local
nameserver 192.168.241.254

上記のように現在はネットワーク内のDNSサーバー(192.168.241.254)が指定されています。この状態だと、sambaのDNSに登録されたホストの名前引きができませんのでこれを変更します。
変更にはnmcliコマンドを利用します。以下のように実行します。(ens33はコネクション名になりますので、利用している環境に合わせて下さい)

# nmcli connection modify ens33 ipv4.dns 127.0.0.1 ipv4.dns-search testdom.local

エラーが表示されなければ、設定変更は正常に完了しています。

7-3-2. 変更した設定の確認と反映

nmcliコマンドでdnsの設定を確認します。以下のように実行します。

# nmcli connection show ens33 | grep dns
ipv4.dns: 127.0.0.1
ipv4.dns-search: testdom.local
ipv4.dns-options: ""
ipv4.dns-priority: 0
ipv4.ignore-auto-dns: いいえ
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: ""
ipv6.dns-priority: 0
ipv6.ignore-auto-dns: いいえ

上記のようにdnsとsearchのパラメーターがコマンドで指定したものになっていれば確認は完了です。
この設定を反映するために、ネットワークを再起動します。

# systemctl restart network

エラーが表示されなければ、ネットワークは正常に再起動しています。
確認の意味で、resolv.confを見てみます。

# cat /etc/resolv.conf
# Generated by NetworkManager
search testdom.local
nameserver 127.0.0.1

上記のようにsearchとnameserverが変更されていれば、設定の確認は完了です。

7-3-3. DNSゾーンリストの確認

ネットワークの変更が完了しましたので、dnsのエントリを確認していきます。まずはデフォルトで作成されるDNSのゾーン情報を確認します。ゾーンはドメイン名(ここではtestdom.local)と_msdcs.ドメイン名(ここでは_msdcs.testdom.local)の二つが作成されます。前者は通常のDNSエントリ、後者はActive Directory特有の情報が含まれるゾーンです。
確認には”samba-tool dns zonelist”コマンドを使用します。以下のように実行します。

# samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [TESTDOM\Administrator]: <=パスワードを入力します。

コマンドを実行すると、以下のようにゾーンリストが表示されます。

2 zone(s) found

pszZoneName : testdom.local
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.testdom.local

pszZoneName : _msdcs.testdom.local
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.testdom.local

上記のように二つのDNSゾーンが表示されていれば、確認は完了です。

7-3-4. DNSエントリの確認

DNSエントリの確認を行います。ここではドメインコントローラーのホスト名と、SRVレコードという特殊なレコードの確認を行います。
先ずはドメインコントローラーの正引き(ホスト名からIPアドレスを検索する)を行います。sambaサーバーからhostコマンドを利用して以下のように実行します。

# host dc01.testdom.local
dc01.testdom.local has address 192.168.241.221

ホスト名”dc01.testdom.local”から、対応するIPアドレスである”192.168.241.221”が表示されることが確認できました。
次にSRVレコードである”_ldap._tcp.testdom.local”を確認します。

# host -t SRV _ldap._tcp.testdom.local
_ldap._tcp.testdom.local has SRV record 0 100 389 dc01.testdom.local.

こちらについてもSRVレコードが正常に解決できています。
同じくSRVレコードである”_kerberos._tcp.testdom.local”を解決します。以下のようにhostコマンドを実行します。

# host -t SRV _kerberos._tcp.testdom.local
_kerberos._tcp.testdom.local has SRV record 0 100 88 dc01.testdom.local.

SRVレコードが解決できました。
最後にインターネット側のDNSが正引きできるかを確認します。これはDNSのフォワーダーが正常に動作しているかを確認する意味があります。
hostコマンドで、適当なドメイン名を確認します。ここでは”www.yahoo.co.jp”を使用しました。

# host www.yahoo.co.jp
www.yahoo.co.jp is an alias for edge.g.yimg.jp.
edge.g.yimg.jp has address 183.79.248.252
Host edge.g.yimg.jp not found: 3(NXDOMAIN)

上記のように名前引きができることが確認できました。
ここまででDNSサーバーの確認は完了です。

8. Active Directoryの動作確認

項目7. まででDNS周りの確認が完了しました。ここからはActive Directoryの動作確認を行います。ユーザー情報の確認fsmo(Flexible Single Master Operation特別な役割を持つドメインコントローラー)の確認を行います。

8-1. ユーザー情報の確認

先ずはActive Directoryに登録されているユーザー情報の確認を行います。Active Directoryのユーザー一覧を取得するコマンド”samba-tool user list”を実行します。
以下のように実行します。

# samba-tool user list
Administrator
Guest
krbtgt

上記のように登録されているユーザー(デフォルトでは3ユーザー)が表示されれば、ユーザー情報は正常に取得できています。

8-2. fsmoの確認

続いてfsmoの確認を行います。fsmoは基本的に最初に構築したフォレスト内にあるドメインコントローラーになります。コマンド”samba-tool fsmo show”で
現状のfsmoを確認できます。以下のように実行します。

# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdom,DC=local

8-3. レプリケーションの確認

Active Directoryではデータ保持の意味から、ドメインコントローラーが互いにデータをコピーしています。(マルチマスタレプリケーションと呼ばれます)
レプリケーションが正常に動作していないとドメインコントローラーによって、データの整合性に問題が出てきます。
今回はドメイン内にドメインコントローラーが一台しかありませんので、レプリケーションの状況は確認できませんが、参考として確認を行う方法について紹介します。
レプリケーションの確認は”samba-tool drs showrepl”コマンドで行います。
以下のように実行します。

# samba-tool drs showrepl
Default-First-Site-Name\DC01
DSA Options: 0x00000001
DSA object GUID: 248745bc-8ef2-46ab-ab33-798e17518edf
DSA invocationId: e8e44a95-d1ff-40c2-a747-f74dbf6f64e3

==== INBOUND NEIGHBORS ====

==== OUTBOUND NEIGHBORS ====

==== KCC CONNECTION OBJECTS ====

上記のように表示がされます。2台以上のドメインコントローラーがドメイン内に存在する場合には、レプリケーションの状況がコマンドで確認できることを記憶しておくと良いかと思います。

8-4. ドメインレベルの確認

Sambaで構築できるWindowsドメインのドメインレベルはWindows Server 2008 R2相当になります。デフォルトではWindows Server 2008 R2が選択されていますが、念のために”samba-tool domain level show”コマンドで確認しておきます。以下のように実行します。

# samba-tool domain level show
Domain and forest function level for domain 'DC=testdom,DC=local'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

上記からドメインレベルがWindows 2008 R2であることが確認できました。
以上でデプロイされたドメインの確認は完了です。

9. Kerberos認証の設定

KerberosはActive Directoryのユーザ認証の際に使用されるプロトコルです。kerberos認証は、ネットワーク認証方式の1つでサーバとクライアント間の身元確認するために利用されます。SambaサーバーがWindowsドメインに参加するためにはKerberos認証の設定が必要になります。本章では、その設定手順について紹介していきます。

9-1. krb5.conf設定ファイルのバックアップ

Kerberos認証に関する設定は”/etc/krb5.conf”に行います。ファイルの変更前に、ファイルをバックアップします。以下の手順でバックアップを行います。

# mv /etc/krb5.conf krb5.conf.org

9-2. sambaドメイン用krb5.conf設定ファイルのコピー

krb5.confファイルのバックアップが完了しましたので、samba用の”krb5.conf”をコピーします。samba用のkrb5.confは/usr/local/samba/private以下に保存されています。以下のようにコピーを実行します。

# cp -p /usr/local/samba/private/krb5.conf /etc/krb5.conf

samba用のkrb5.confの内容は以下の通りです。

[libdefaults]
default_realm = TESTDOM.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true

これでsamba用krb5.confファイルのコピー完了です。

9-3. Kerberos認証用チケットの取得

先ずはkerberos認証で利用するのチケット(TGT)を取得、キャッシュを行います。取得にはkinitコマンドを利用します。以下のように実行します。

# kinit administrator@TESTDOM.LOCAL <=ADにコンピュータを追加する権限を持ったユーザを指定
Password for administrator@TESTDOM.LOCAL: <=ユーザーのパスワードを入力
Warning: Your password will expire in 41 days on 2018年10月10日 19時06分12秒

※realm名(TESTDOM.LOCAL)は大文字で指定してください。
パスワードはActive Directoryのドメイン管理者(ここではadministrator)のものを入力します。エラーが出力されなければ、チケットの取得とキャッシュは完了です。念のため、取得・キャッシュされたKerberosの認証情報を確認します。確認にはklistコマンドを利用します。オプションを指定せずに実行することで、現状のリストが表示されます。
kinit実行前だと、以下のようにチケットがないと表示されます。

# klist
klist: Credentials cache keyring 'persistent:0:0' not found

kinit実行後は以下のようになります。

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TESTDOM.LOCAL

Valid starting Expires Service principal
2018-08-30T10:13:45 2018-08-30T20:13:45 krbtgt/TESTDOM.LOCAL@TESTDOM.LOCAL
renew until 2018-08-31T10:13:41

上記のようにドメイン管理者のチケット情報が表示されれば、確認は完了です。
※参考:TGTチケットの削除を行いたい場合には、kdestroyコマンドをオプション無しで実行します。

10. Sambaサービス用起動スクリプトの作成と自動起動の設定

本章ではSambaサービスをコントロールするためのスクリプトを作成します。併せてsambaサービスが自動的に起動するように設定を行います。

10-1. Sambaサービス用スクリプトの作成

SambaサービスのスクリプトはCentOS7の場合は”/etc/systemd/system/”以下に作成します。samba.serviceという名前でスクリプトを以下の手順で作成します。

# vi /etc/systemd/system/samba.service

ファイルの内容は以下のようにします。

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba

[Install]
WantedBy=multi-user.target

作成後、ファイルを保存します。作成したファイルを有効化するためにsystemctl daemon-reloadコマンドを実行します。
以下のように実行します。

# systemctl daemon-reload

これでsambaサービス用スクリプトの作成は完了です。

10-2. Sambaサービスの自動起動設定

サーバーの再起動や停止の復旧時に、Sambaが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

# systemctl enable samba
Created symlink from /etc/systemd/system/multi-user.target.wants/samba.service to /etc/systemd/system/samba.service.

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。以下のように実行します。

# systemctl is-enabled samba
enabled

実行結果として “enabled”と表示されれば自動起動の設定は完了です。

11. firewallの設定

Sambaをドメインコントローラーとして構成した場合、firewallの許可がかなり多く必要になります。
具体的な許可ポートについてはSambaの公式wikiにあるページ

「Samba AD DC Port Usage」

に記載されています。各ポートの詳細は割愛しますが、基本的にはこのページに記載されているポートを許可することで問題ありません。
以下ようにfirewallの許可を行います。(実際には一行です)

# firewall-cmd --add-port=53/tcp --permanent;firewall-cmd --add-port=53/udp --permanent; \
firewall-cmd --add-port=88/tcp --permanent;firewall-cmd --add-port=88/udp --permanent; \
firewall-cmd --add-port=135/tcp --permanent;firewall-cmd --add-port=137-138/udp --permanent; \
firewall-cmd --add-port=139/tcp --permanent;firewall-cmd --add-port=389/tcp --permanent; \
firewall-cmd --add-port=389/udp --permanent;firewall-cmd --add-port=445/tcp --permanent; \
firewall-cmd --add-port=464/tcp --permanent;firewall-cmd --add-port=464/udp --permanent; \
firewall-cmd --add-port=636/tcp --permanent;firewall-cmd --add-port=1024-5000/tcp --permanent;\
firewall-cmd --add-port=3268-3269/tcp --permanent;firewall-cmd --add-port=49152-65535/tcp --permanent

firewallの許可設定が完了できたら、設定を有効にするためにリロードを行います。

# firewall-cmd --reload

これでfirewallの許可設定は完了です。
ここまででSambaはドメインコントローラーとして動作するようになっています。お疲れ様でした。

12. PCのドメイン参加

Sambaドメイン環境ができましたので実際にクライアントPCをドメインに参加させてみます。ドメイン参加に利用するPCはWindows10バージョン1803(Fall Creators Update適用済み)になります。

samba-add-12

11-1. クライアントPCのDNS設定変更

ドメイン参加させるクライアントPCのDNSサーバーをSambaドメインコントローラーのIPアドレスに変更します。本環境ではIPアドレスはDHCPで取得していますので、DNSサーバーのみIPアドレスを指定します。
SambaドメインコントローラーのIPアドレスは192.168.241.221なので、クライアントPCのDNS設定を以下のように変更します。

samba-ad-12-1-1

変更後に[OK]をクリックして、設定を保存します。
DNSの設定後に、コマンドプロンプトを開いて、nslookupコマンドでドメインコントローラーの名前引きを行います。

> nslookup dc01.testdom.local

を実行して、IPアドレスとして192.168.241.221が返ってくることを確認します。
実際にコマンドプロンプトでnslookupを行ったときには、以下の画面のようになります。

正常にIPアドレスが表示されればDNSの設定は完了です。

11-2. ドメインの参加

DNS設定が確認できたら、ドメインの参加を行います。[Windowsメニュー]-[Windowsシステムツール]-[コントロールパネル]の順に展開します。

samba-ad-12-2-1

[コントロールパネル]-[システム]の順に展開します。

samba-ad-12-2-2

[システムの詳細設定]をクリックします。

samba-ad-12-2-3

[システムのプロパティ]-[コンピュータ名]タブを展開します。”コンピュータ名を変更したりドメインに参加したりするには[変更]..”の隣にある[変更]をクリックします。

samba-ad-12-2-4

[コンピュータ名/ドメイン名の変更]ウィンドウが開きます。所属するグループの[ドメイン]にチェックをいれ、ドメイン名としてsambaドメインのドメイン名である”testdom.local”を入力します。

samba-ad-12-2-5

[OK]をクリックして、先へ進めます。
管理者のユーザー名とパスワードを求めるウィンドウが表示されます。
管理者名とパスワードを入力します。

samba-ad-12-2-6

[testdom.local]ドメインへようこそ。と表示されれば、ドメインの参加は正常に行われています。

samba-ad-12-2-7

再起動するかを確認されますので、再起動を実行します。

samba-ad-12-2-8

再起動後には、コンピュータ名にドメイン名が付与して表示されるようになります。

samba-ad-12-2-9

これでクライアントPCのドメイン参加は完了です。

13. リモートサーバーツール(RSAT)のインストール

SambaのActive Directoryを管理するために、クライアントPCにリモートサーバー管理ツール(RSAT)をインストールします。本記事では項目12. でドメイン参加したWindows10のクライアントPCにRSATをインストールします。

13-1. RSATのダウンロード

RSATはMicrosoftの以下のURLからダウンロードできます。

https://www.microsoft.com/ja-JP/download/details.aspx?id=45520

表示されたページから[日本語]を選択してダウンロードをクリックします。

samba-ad-13-1-1

ダウンロードするプログラムを選択する画面が表示されます。
インストールする環境がWindows10のビルド1803、64ビット版のため、[WindowsTH-RSAT_WS_1803-x64.msu]にチェックを入れます。

samba-ad-13-1-2

[次へ]をクリックするとダウンロードが始まります。任意のフォルダに保存します。

13-2. RSATのインストール

ダウンロードしたmsuファイルをダブルクリックすると、RSATのインストールが始まります。
「次のWindowsソフトウェア更新プログラムをインストールしますか?」には[はい]をクリックします。

samba-ad-13-2-1

ソフトウェアのライセンス条項に関する画面が表示されます。[同意します]で先へ進めます。

samba-ad-13-2-2

インストールが完了すると、[Windows管理ツール]以下に、Active Directoryに関するツール群がインストールされます。

samba-ad-13-2-3

これでRSATのインストールは完了です。

13-3. RSATでのActive Directory確認

RSATのセットアップが完了しましたので、SambaのActive Directoryを確認してみます。
先ずはドメインを確認します。[Active Directoryユーザーとコンピューター]を起動します。sambaドメイン名が正常に表示できます。

samba-ad-13-2-4

続いてドメインコントローラーのエントリを確認します。。Domain ControllersフォルダにSambaドメインコントローラー DC01が表示されています。

samba-ad-13-2-5

Computersフォルダにドメイン参加したクライアントPCのWIN10-TESTが表示されています。

samba-ad-13-2-6

上記のようにSambaドメインのリソースがRSATによって確認できました。

14. RSATでのユーザー追加

Sambaドメインに対してへRSATを利用してユーザー追加を行ってみます。

14-1. ユーザー作成

[Active Directoryユーザーとコンピューター]を起動して、ドメイン名から[Users]フォルダを選択、右クリック[新規作成]-[ユーザー]を選択します。

samba-ad-14-1-1

新しいオブジェクトの作成画面が表示されます。
ユーザー名とパスワードを入力して、ユーザーを作成します。(ここではuser01)
完了後にユーザー(user01)が作成されていることを確認します。

samba-ad-14-1-2

これでユーザーの作成は完了です。

14-2. Samba側でのユーザー確認

Samba側からも念のために作成したuser01を確認してみます。Sambaのユーザーを表示させるコマンド”samba-tool user list”を実行します。

# samba-tool user list
Administrator
user01
Guest
krbtgt

上記のようにuser01が表示されています。これでRSATを利用したユーザー追加と確認は完了です。

15. 作成したユーザーでのドメインログオン確認

RSATで作成したユーザーで、ドメインログオンができることを確認してみます。尚、利用しているPCはドメインに参加したWindows10クライアントのwin10-testになります。

15-1. ドメインログオン画面の表示

win10-testでユーザーを選択する画面を表示させます。ユーザー欄に作成したユーザー(user01)、パスワードを入力します。サインイン先として、Sambaドメインである”testdom.local”が表示されていることを確認します。

samba-ad-15-1-1

ようこそと表示されれば、ドメインログオンは正常に進んでいます。

2018-08-30_18h29_17

15-2. ドメインログオンの完了

ドメインログオンが完了すると、Windowsのデスクトップ画面が表示されます。
”whoami”コマンドでログオンしているユーザー名を確認します。

samba-ad-15-2

画面のようにドメインユーザーでログオンしていることが確認できました。
これでドメインログオンの確認は完了です。

16. まとめ

Sambaでのドメインコントローラー作成と、ドメインログオンのテストまでの手順を紹介しました。Sambaを利用するためにはLinuxに関して、やや知識が必要となりますが、Linuxの堅牢なシステムでActive Directoryが運用できることを考えると、それだけでもメリットがあるかと思います。

特にsamba4になってから、Windows Server 2008 R2相当のActive Directoryを運用できますので、かなり使い込んでいる環境でなければ、十分に満足行く機能があります。クライアントアクセスライセンスの軽減など、コスト的なメリットもありますし、Sambaドメインを運用すると、Windowsネットワークの勉強になります。是非、SambaによるActive Directoryを構築して、その機能性の高さを実感してみて下さい。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-Active Directory, CentOS, Samba