CentOSとSamba4.10系でWindowsと同等のActive Directoryを作成

samba410-ad-setup-top

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

バージョン4.10の最新リリースは2019年4月2日現在で4.10.0になります。4.10は4.9から幾つかの変更が見られます。特に大きな変更としては利用されるPythonのバージョンがCentOSデフォルトの2系から3系になっています。これによってインストールや、その後の設定に問題が出るというお問い合わせを頂きましたので早速、検証してみました。

4.10では4.9と比較して幾つかの機能追加とバグの修正ががありました。現在の安定版が4.10であることから、これからSambaをインストールする場合は4.10系をお勧めします。

Samba4.10系のリリースノートは以下のページになります。4.10で追加された機能やバグフィックスの詳細についてはリリースノートを参照して下さい。

参考 4.10以前のSamba導入とActive Directory構築手順については以下の記事で紹介しています。

centos-samba-ad48-top
あわせて読みたいCentOS 7とSamba 4.8でActive Directoryを設定する

今までの記事でSambaに関する幾つかの機能を紹介してきましたが、一番、強力な機能はなんだと思いますか。Sambaで一番、強力な機能はWindowsのActive Directoryと同等の機能を提供できるSambaドメイン機能だと思います ...

samba-ad-49-top
あわせて読みたいCentOS 7とSamba4.9でActive Directory環境を作成する

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

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

本記事でSambaドメインを構築する環境は以下の記事で構築したCentOS 7の環境を利用する前提となります。

centos76-install-top3
あわせて読みたいCentOS 7.6をインストール Linuxのインストールは難しくありません

こんにちは、ITエンジニアの小村(@system_kom)です。 Windowsをインストールした経験のある人は多いと思いますが、Linuxをインストール経験がある人は少ないのではないでしょうか。 Linuxのインストールはサーバー構築の基 ...

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

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

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

CentOSのバージョン Cent OS 7.6 Build1810
SambaサーバーのIPアドレス 192.168.241.215/255.255.255.0
Sambaサーバーのホスト名 dc01
パブリックドメイン名 rem-system.com(取得しなくても問題ありません)
Active DirectoryのDNS名 ad.rem-system.com
Active DirectoryのNetBIOS名 REM-SYSTEM
Sambaのバージョン 4.10.0(2019年4月時点での最新バージョン)

パブリックドメインはインターネット側から参照できるドメイン名になります。パブリックドメイン名は取得が必要になりますが、無くてもActive Directoryの構築には問題ありません。

1-2. Active DirecotryのDNS名とドメイン名

Active Directoryで設定するDNS名についてはSamba公式サイトのwikiにベストプラクティスが記載されています。

このwikiによると、パブリック側のドメイン名にサブドメインを付与する形がベストプラクティスだと紹介されていますので、それに倣って、本ブログで利用しているドメイン「rem-system.com」にサブドメイン「ad」を付与した「ad.rem-system.com」で指定を行います。
パブリックドメインを取得していない環境では外部で名前引きできないドメイン名を指定する形で読み替えて下さい。

Active DirectoryのDNS名について

以前はActive DirectoryのDNS名として.localを利用していましたが.localはマルチキャストDNS (mDNS)で利用されておりWindows10のビルド1803以降やMac端末がドメインに追加されていると不具合が発生する場合があるようです。
Windows10ではmDNSを利用しないように設定を変更することで対応ができます。マイクロソフトでは.localを非推奨とはしていませんが本記事では.localを利用しないドメイン名にしています。

参考 マイクロソフトからリリースされているActvie DirectoryにおけるDNSの名前付けベストプラクティスは以下のウェブページに詳細が記載されていますので、興味がある方は読んでみて下さい。

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

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

2-1. ホスト名の設定

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

 command
# nmcli general hostname dc01

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

 command
$ hostname
dc01

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

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

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

 command
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.241.215 dc01.ad.rem-system.com dc01 この行を追加する。

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

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

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

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

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

 command
# vi /etc/chrony.conf

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

 code
# 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を同期先のタイムサーバーとして指定します。
以下をコメントアウトした下の部分に追記します。

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

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

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

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

 command
# systemctl restart chronyd

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

 command
$ 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"オプションを指定することで、設定したタイムサーバーとの同期状態を確認することができます。以下のように実行します。

 command
# 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

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

タイムサーバーと同期できない原因

  • chronyd.conf ファイルの設定に誤りがある
  • chronyd サービスの再起動が出来ていない (systemctl restart chroyndを行っていない)
  • タイムサーバーへの接続性がない(例えばサーバーがインターネットへ接続できていない)
  • DNSが適切に設定されておらず、タイムサーバーの名前引きに問題がある

上記を参考に調査を行って下さい。ここでは正常に設定が完了したいという前提で、先へ進めていきます。

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

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

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

Active Directoryを利用できるSambaサーバーのインストールに必要なパッケージはSambaの公式wikiサイトに記載があります。

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

 code
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 \
lmdb-devel jansson-devel gpgme-devel python-gpgme libarchive-devel

wikiの情報を元にして、このパッケージを全て導入します。

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

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

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

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

 command
# yum -y install epel-release
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
---> パッケージ 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 list"コマンドで確認できます。以下のように実行することで、epelレポジトリがインストールされていることを確認します。

 command
$ yum list installed | grep epel

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

epel-release.noarch 7-9 @extras

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

 command
$ yum repolist

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

 log
読み込んだプラグイン: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 install"コマンドでインストールを行います。パッケージ数が多いので、コピー&ペーストでインストールするほうが簡単だと思います。環境によっては重複しているパッケージもあるかもしれませんので、その点はご了承下さい。

 command
# 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 \
lmdb-devel gpgme-devel libarchive-devel jansson-devel

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

 log
読み込んだプラグイン: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
【略】
トランザクションの要約
インストール 24 パッケージ (+110 個の依存関係のパッケージ)
総ダウンロード容量: 21 M
インストール容量: 77 M
Downloading packages:
(1/134): attr-2.4.46-13.el7.x86_64.rpm | 66 kB 00:00:00
インストール:
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
依存性関連をインストールしました:
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」ディレクトリを作成し、ダウンロードします。以下の手順で行います。

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

ディレクトリの作成と移動後に"wget"コマンドでソースコードをダウンロードします。
最新版のsambaを利用する場合は「samba-lateset.tar.gz」をダウンロードします。2019年4月現在のSamba最新バージョンは4.10.0であることから、本記事では4.10.0を利用する前提で進めていきます。
以下のようにwgetコマンドを実行します。

 command
# wget https://download.samba.org/pub/samba/samba-latest.tar.gz
--2019-04-03 12:33:08-- 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
2019-04-03 12:33:13 (5.17 MB/s) - `samba-latest.tar.gz' へ保存完了 [18270804/18270804]

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

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

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

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

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

 command
# tar zxvf samba-latest.tar.gz

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

 log
samba-4.10.0/.gitattributes
samba-4.10.0/.github/contributing.md
samba-4.10.0/.github/pull_request_template.md
samba-4.10.0/.gitlab-ci-private.yml
samba-4.10.0/.gitlab-ci.yml
samba-4.10.0/.testr.conf
samba-4.10.0/.ycm_extra_conf.py
samba-4.10.0/BUILD_SYSTEMS.txt
samba-4.10.0/COPYING
samba-4.10.0/Makefile
samba-4.10.0/PFIF.txt
samba-4.10.0/README.Coding
samba-4.10.0/README.cifs-utils
samba-4.10.0/README.contributing
samba-4.10.0/README.md
samba-4.10.0/VERSION
.

アーカイブの展開が完了すると、samba-4.10.0というディレクトリになります。ディレクトリツリーは以下のようになります。

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

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

5-3. configureの実行

項目5-2. で展開したsamba-4.10.0ディレクトリに移動してソースコードをビルドするために必要な"configure"コマンドを実行します。configureはインストールを行うOSやCPUなどの環境調査を行い、ソースコードをコンパイルするのに必要な「Makefile」を作成するためのコマンドです。
Samba4.10系ではconfigureに「Python3」を利用するようになっています。CentOSではSambaで利用するPython3のパッケージ情報がまだ公開されていないため、リリースノートに記載されている通り、「Python2」を利用して"configure"を実行します。(SuseやUbuntuではPython3に関する情報がリリースされています。)
まずディレクトリをsamba-4.10.0へ移動します。

 command
# ls
samba-4.10.0 samba-latest.tar.gz
# cd samba-4.10.0/

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

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

configureで指定するオプションは"./configure --help"で確認できます。ここでは"Python2系"を利用するために環境変数として"PYTHON=python2"を指定してconfigureを実行します。

 command
# PYTHON=python2 ./configure

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

 log
Setting top to : /usr/local/src/samba410/samba-4.10.0
Setting out to : /usr/local/src/samba410/samba-4.10.0/bin
Checking for 'gcc' (C compiler) : /bin/gcc
Checking for program 'git' : /bin/git
Checking for c flags '-MMD' : yes
Checking for program 'gdb' : /bin/gdb
Checking for header sys/utsname.h : yes
Checking uname sysname type : Linux
Checking uname machine type : x86_64
Checking uname release type : 3.10.0-957.el7.x86_64
Checking uname version type : #1 SMP Thu Nov 8 23:39:32 UTC 2018
Checking for header stdio.h : yes
Checking simple C program : ok
【略】
Checking if compiler accepts -fstack-protector-strong : no
Checking if compiler accepts -fstack-protector : no
Checking if compiler accepts -fstack-clash-protection : yes
'configure' finished successfully (1m0.301s)

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

5-4. makeの実行

"configure"が完了したら、ソースコードをコンパイルするためのコマンド"make"を実行します。configureと同様に「PYTHON=python2」を付与して、以下のように実行します。

 command
# PYTHON=python2 make

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

 log
WAF_MAKE=1 python ./buildtools/bin/waf build
Waf: Entering directory `/usr/local/src/samba/samba-4.10.0/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
【略】
[4115/4116] Compiling pidl/lib/Parse/Pidl/NDR.pm
[4116/4116] Compiling pidl/lib/Parse/Pidl/Util.pm
Waf: Leaving directory `/usr/local/src/samba410/samba-4.10.0/bin/default'
'build' finished successfully (10m21.471s)

完了までにやや時間がかかりますが「'build' finished successfully」と表示されればmakeは完了です。

5-5. make installの実行

コンパイルまで完了しましたので、続いてSambaのインストールを行います。
インストールはmakeコマンドに"install"オプションを付与して実行します。configure、makeと同じく「PYTHON=python2」を付与して、以下のように実行します。

 command
# PYTHON=python2 make install

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

 log
PYTHONHASHSEED=1 WAF_MAKE=1 python2 ./buildtools/bin/waf install
Waf: Entering directory `/usr/local/src/samba410/samba-4.10.0/bin/default'
* create /usr/local/samba/etc
* create /usr/local/samba/var
* create /usr/local/samba/var/lib
* create /usr/local/samba/private
* create /usr/local/samba/bind-dns
* create /usr/local/samba/var/locks
* create /usr/local/samba/var/cache
* create /usr/local/samba/var/lock
* create /usr/local/samba/var/run
Selected embedded Heimdal build
Checking project rules ...
【略】
+ install /usr/local/samba/share/man/man3/Parse::Pidl::NDR.3pm (from bin/default/pidl/Parse::Pidl::NDR.3pm)
+ install /usr/local/samba/share/man/man3/Parse::Pidl::Util.3pm (from bin/default/pidl/Parse::Pidl::Util.3pm)
Waf: Leaving directory `/usr/local/src/samba410/samba-4.10.0/bin/default'
'install' finished successfully (3m19.840s)

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

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

(本設定は必須ではありません。必要に応じて設定して下さい)ソースからインストールしたSambaはシェルのPATHが設定されていない「/usr/local/samba」以下にインストールされます。
この場合、Sambaの実行に「/usr/local/samba」を付与する必要があり、利便性に欠けてしまいます。その為、利用しているシェル(本記事の環境ではbash)にsambaのPATHを設定します。

rootユーザーのみSambaを実行する前提で、rootユーザーのホームディレクトリにある「.bash_profile」ファイルにパスを追記します。以下のように実行します。

 command
# vi /root/.bash_profile

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

 code
# 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コマンドを利用します。以下のように実行します。

 command
# source ~/.bash_profile

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

 command
# samba -V
Version 4.10.0

6. ドメインのデプロイ

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

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

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

 log
Realm [AD.REM-SYSTEM.COM]: ドメイン名 (enterキー)
Domain [AD]: NETBIOSのドメイン名 (REM-SYSTEMを指定)
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: 上記と同じものを入力

ここまでの設定が完了すると、ドメインのセットアップが開始されます。以下のように進捗が表示されます。

 log
INFO 2019-04-03 14:36:10,610 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2079: Looking up IPv4 addresses
INFO 2019-04-03 14:36:10,616 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2096: Looking up IPv6 addresses
INFO 2019-04-03 14:36:11,222 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2269: Setting up share.ldb
INFO 2019-04-03 14:36:11,242 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2273: Setting up secrets.ldb
INFO 2019-04-03 14:36:11,255 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2279: Setting up the registry
INFO 2019-04-03 14:36:11,301 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2282: Setting up the privileges database
INFO 2019-04-03 14:36:11,327 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #2285: Setting up idmap db
INFO 2019-04-03 14:36:11,357 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #1297: Pre-loading the Samba 4 and AD schema
【略】
INFO 2019-04-03 14:36:18,465 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #495: Server Role: active directory domain controller
INFO 2019-04-03 14:36:18,465 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #496: Hostname: dc01
INFO 2019-04-03 14:36:18,465 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #497: NetBIOS Domain: REM-SYSTEM
INFO 2019-04-03 14:36:18,466 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #498: DNS Domain: ad.rem-system.com
INFO 2019-04-03 14:36:18,466 pid:36200 /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py #499: DOMAIN SID: S-1-5-21-2562019355-729923862-2657406809

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

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

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

 command
# samba

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

 command
# ps -aux | grep samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/smbd -D --option=server role
root /usr/local/samba/sbin/samba
root /usr/local/samba/sbin/winbindd -D --option=server
root /usr/local/samba/sbin/smbd -D --option=server role
root /usr/local/samba/sbin/smbd -D --option=server role
root /usr/local/samba/sbin/smbd -D --option=server role

※結果の一部を削除しています。
上記からSambaが正常に起動していることが確認できました。これでSambaの起動は完了です。

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

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

 command
# smbclient -L localhost -U%

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

 log
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.10.0)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------

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

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

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

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

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

 log
Enter REM-SYSTEM\Administrator's password: Administratorのパスワードを入力
. D 0 Wed Apr 3 14:36:11 2019
.. D 0 Wed Apr 3 14:36:15 2019
17811456 blocks of size 1024. 15149320 blocks available

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

7-3. DNSの設定確認

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

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

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

 command
# cat /etc/resolv.conf
# Generated by NetworkManager
search ad.rem-system.com
nameserver 192.168.241.254

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

 command
# nmcli connection modify ens33 ipv4.dns 127.0.0.1 ipv4.dns-search ad.rem-system.com

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

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

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

 command
# nmcli connection show ens33 | grep dns
ipv4.dns: 127.0.0.1
ipv4.dns-search: ad.rem-system.com
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のパラメーターがコマンドで指定したものになっていれば確認は完了です。
この設定を反映するために、ネットワークを再起動します。

 command
# systemctl restart network

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

 command
# cat /etc/resolv.conf
# Generated by NetworkManager
search ad.rem-system.com
nameserver 127.0.0.1

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

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

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

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

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

 log
2 zone(s) found
pszZoneName : ad.rem-system.com
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.ad.rem-system.com
pszZoneName : _msdcs.ad.rem-system.com
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.ad.rem-system.com

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

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

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

 command
# host dc01.ad.rem-system.com
dc01.ad.rem-system.com has address 192.168.241.215

ホスト名「dc01.ad.rem-system.com」から、対応するIPアドレス「192.168.241.215」が表示されることが確認できました。
次にSRVレコードである「_ldap._tcp.ad.rem-system.com」を確認します。

 command
# host -t SRV _ldap._tcp.ad.rem-system.com
_ldap._tcp.ad.rem-system.com has SRV record 0 100 389 dc01.ad.rem-system.com.

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

 command
# host -t SRV _kerberos._tcp.ad.rem-system.com
_kerberos._tcp.ad.rem-system.com has SRV record 0 100 88 dc01.ad.rem-system.com.

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

 command
# 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"を実行します。

 command
# samba-tool user list
Administrator
Guest
krbtgt

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

8-2. fsmoの確認

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

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

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

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

 command
# samba-tool drs showrepl
Default-First-Site-Name\DC01
DSA Options: 0x00000001
DSA object GUID: 4dbd76ba-60b1-491d-8913-fa8c27dc3a86
DSA invocationId: 7e75c8a0-4dfc-4583-b877-951c124d6744
==== INBOUND NEIGHBORS ====
==== OUTBOUND NEIGHBORS ====
==== KCC CONNECTION OBJECTS ====

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

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

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

 command
# samba-tool domain level show
Domain and forest function level for domain 'DC=ad,DC=rem-system,DC=com'
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」に行います。ファイルの変更前に、元ファイルをバックアップしておきます。以下の手順でバックアップを行います。

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

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

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

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

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

 code
[libdefaults]
default_realm = AD.REM-SYSTEM.COM
dns_lookup_realm = false
dns_lookup_kdc = true

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

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

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

 command
# kinit administrator@AD.REM-SYSTEM.COM Active Directoryにコンピュータアカウントを追加する権限を持ったユーザを指定
Password for administrator@AD.REM-SYSTEM.COM: パスワードを入力
Warning: Your password will expire in 41 days on 2019年05月15日 14時36分15秒

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

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

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

 command
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@AD.REM-SYSTEM.COM
Valid starting Expires Service principal
2019-04-03T14:45:18 2019-04-04T00:45:18 krbtgt/AD.REM-SYSTEM.COM@AD.REM-SYSTEM.COM

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

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

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

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

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

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

スクリプトの内容は以下のようにします。

 code
[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"コマンドを実行します。

 command
# systemctl daemon-reload

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

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

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

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

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

 command
# systemctl is-enabled samba
enabled

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

11. firewallの設定

ドメインコントローラーでは複数の通信ポートを利用するため、Firewallへの追加を行う必要があります。本章では追加の設定について説明していきます。Firewallの具体的な許可ポートについてはSambaの公式wikiにあるページに記載されています。

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

 command
# 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 --list-all"コマンドで確認します。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports: 53/tcp 53/udp 88/tcp 88/udp 135/tcp 137-138/udp 139/tcp 389/tcp 389/udp 445/tcp 464/tcp 464/udp 636/tcp 1024-5000/tcp 3268-3269/tcp 49152-65535/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

上記のports項目が設定したパラメーターと合致していることを確認します。
firewallの許可設定が確認できたら、設定内容を有効にするためにルールのリロードを行います。

 command
# 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.215」なので、クライアントPCのDNS設定を以下のように変更します。

samba410-ad-12-1-1

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

 command
> nslookup dc01.ad.rem-system.com

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

samba410-ad-12-1-2

正常に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ドメインのドメイン名である「ad.rem-system.com」を入力します。

samba410-ad-12-2-5

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

samba-ad-12-2-6

「ad.rem-system.comドメインへようこそ。」と表示されれば、ドメインの参加は正常に行われています。

samba410-ad-12-2-7

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

samba-ad-12-2-8

再起動後にはドメインの管理者(Administrator)でPCへログインができるようになっています。一旦、ドメインのAdministratorユーザーでPCへログインします。ログオンには以下の情報を入力します。

ログオンするユーザー名 ドメイン名\administrator
パスワード samba-tool domain provisionコマンドで指定したパスワード

入力時の画面は以下のようになります。
samba410-ad-12-2-8-02

ドメインにログオンできるとWindowsのデスクトップ画面が表示されます。

「コントロールパネル」>「システム」から以下のように、コンピュータ名にドメイン名が付与して表示されていることが確認できます。

samba410-ad-12-2-9-02

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

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

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

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

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

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

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ドメイン名が正常に表示できます。

samba410-ad-13-2-4

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

samba410-ad-13-2-5

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

samba410-ad-13-2-6

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

14. RSATでのユーザー追加

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

14-1. ユーザー作成

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

samba410-ad-14-1-1

新しいオブジェクトの作成画面が表示されます。ユーザー名とパスワードを入力して、ユーザーを作成します。(ここではuser01)
以下のように設定しました。

user01
ユーザーログオン名 user01

samba410-ad-14-1-2

ユーザーのパスワードを指定します。任意のものを入力します。ここでは「パスワードを無期限にする」にチェックを入れています。

samba410-ad-14-1-3

作成するユーザーのサマリが表示されます。確認して問題がなければ「完了」をクリックします。

samba410-ad-14-1-4

完了後にユーザー「user01」が作成されていることを確認します。

samba410-ad-14-1-5

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

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

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

 command
# samba-tool user list
Administrator
user01
Guest
krbtgt

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

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

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

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

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

samba410-ad-15-1-1

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

2018-08-30_18h29_17

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

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

samba410-ad-15-2

画面のようにドメインユーザーでログオンしていることが確認できました。
ドメイン環境のデフォルト共有である「sysvol」と「netlogon」フォルダが表示されることを確認します。「ファイル名を指定して実行」から

 code
\\dc01

と入力して以下のようにデフォルト共有が表示されることを確認します。

samba410-ad-15-3

これでドメインログオンの確認は完了です。

16. まとめ

Sambaの4.10系がリリースされてCentOSではインストール時に問題が発生するということで確認を行いました。現状ではPython2系を利用してインストールする形が良さそうです。記事中でも記載しましたがSUSEやUbuntuなどDebianベースのディストリビューションはPython3が利用できるようです。もしCentOSでPython3を利用した構築ができた場合は別の記事で紹介します。
インストール時のPythonのバージョン指定だけ注意頂ければ、以前のバージョンと同じようにインストールと利用を行うことができます。

SambaはWindows Serverライセンスが不要になるだけでなく、クライアントアクセスライセンス費の軽減(ネットワーク内にWindows Serverで動作するファイルサーバーがある場合にはCALが必要になります。)など、コスト的なメリットもあります。またSambaドメインを運用すると、Windowsネットワークの勉強になります。
是非、SambaによるActive Directoryを構築して、その機能性の高さを実感してみて下さい。

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

レムシステム

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

-Active Directory, CentOS, Samba