CentOS 7で構築したSambaサーバーをActive Directoryへ参加させる

centos7-samba-ad-add-top

Sambaサーバーの基本的なインストールが完了して運用を始めると、WindowsとSambaサーバーで両方のユーザーを管理手間が気になると思います。
既存にActive Directory環境がある場合、ユーザーの管理はActive Directoryで行いたいと考えるのが一般的です。SambaサーバーはWindowsで構築したActive Directoryのドメインメンバーになることができますので、Active Directoryでユーザーの一元管理を行うことが可能です。
今回の記事ではSambaサーバーのユーザーをWindowsのActive Directoryで管理するために、SambaサーバーをWindowsドメインのメンバーサーバーとして登録する手順を紹介します。
追記:2018/10/26
※本記事の手順を実行したユーザー様より実行順序が異なるという指摘を頂きました。検証の結果、記事の一部を修正しております。TakaQbow様、ご指摘有難うございました。
この手順を実行することで、Active DirectoryによるWindowsとLinuxの一元管理環境を作成することが出来ます。Linuxに関してはファイル共有にアクセスするためのユーザーだけでなく、サーバーへアクセスするためのユーザーまで管理が出来ます。非常に便利な構成になりますので、是非、本記事を参考に、ユーザー管理の手間を軽減するドメイン環境でのSambaサーバー運用を行ってみて下さい。

SambaサーバーとWindowsによるActive Directoryの環境は、本ブログの以前の記事

Open Source
centos7-samba4-top
CentOS 7のSamba4でライセンス不要 Windows向けファイルサーバーを構築

今回の記事では、以前のCentOSに関する2つの記事で構築したCentOSのサーバー環境に、オープンソースのファイル共有用ソフトウェアであるSambaをインストールしてWindows向けのファイルサーバーとして設定してみます。 老朽化やリプ ...

及び

Windows
windowsserver2016-ad-add-top
Windows Server 2016 Active Directoryにドメインコントローラーを追加する方法

Windows Serverの強力な機能であるActive Directoryに関する以前の記事は参考になりましたでしょうか。 記事ではWindows Server 2016を利用したActive Directoryの構築までを紹介しました ...

で構築した環境を元に説明を行います。

SambaサーバーをWindowsドメインへ参加させる方法は、主に以下の二通りの構成があります。差異は利用する認証サービスになりますが、以下のような特徴があります。

  • Winbindを利用する方法 ...NTLM認証にも対応した昔からある構成
  • sssdを利用する方法 ... sssdという認証を受け渡しするサービスを利用する構成(追記を参照)

レッドハットが推奨する方法はsssdを利用した認証を統合する構成ですが、NTLM認証に対応していないことを考えると、ファイルサーバーとして利用する場合にはWinbindを利用する構成のほうが良いかもしれません。

追記:2018/8/26
Sambaサーバーをドメインへ参加させるにはSambaのリリースノートを見る限り、Winbindが必要なようです。以下、Samba4.8リリースノートからの抜粋になります。

Domain member setups require winbindd
-------------------------------------

Setups with "security = domain" or "security = ads" require a
running 'winbindd' now. The fallback that smbd directly contacts
domain controllers is gone.

sssdはActive Directory上の情報を”Linux”で利用するような場合に利用します。本記事ではSambaサーバー上にあるファイル共有へのアクセスを前提にしていますので、Winbindを選択します。

1. 環境と構成

本記事のWindowsドメイン構成はドメイン内に2台のドメインコントローラーが配置されている前提になります。共にグローバルカタログとして設定されており、ローカルDNSを管理するためのDNSサーバーが稼働しています。

1-1. ドメインコントローラーとドメインのパラメーター

本記事で利用するドメインコントローラー2台とドメイン環境の設定値をは以下の通りです。
ドメインコントローラー1台目

  • コンピューター名:WIN2016
  • 役割:FSMO/グローバルカタログ/DNS
  • IPアドレス:192.168.241.25/24

ドメインコントローラー2台目

  • コンピューター名:WIN2016-02
  • 役割:グローバルカタログ/DNS
  • IPアドレス:192.168.241.26/24

※この他にテスト用としてドメイン参加しているメンバーPCがあります。

ドメイン環境

  • ドメイン名(DNS):2016dom.local
  • ドメイン名 (NetBIOS):2016dom
  • フォレスト・ドメイン機能レベル:WindowsServer2016
  • ドメインの管理ユーザー:administrator
  • テスト用ユーザーとしてuser01/user02/test100が作成されている

ドメインコントローラーは、お互いにDNSによるFQDNとコンピューター名で通信ができる前提です。このパラメーターで設定されたWindowsドメイン環境で作業を進めていきます。

1-2. Sambaサーバーのパラメーター

本記事で利用するSambaサーバーの設定値は以下の通りです。詳細な構成については、Sambaサーバーを構築する手順を紹介した記事

>「CentOS 7とsambaでWindows用ファイルサーバーを設定する。古いサーバーの有効利用に最適」

でも記載しています。本記事と併せて参考にしていただければ幸いです。

  • コンピューター名:fs
  • 役割:スタンドアロンのファイルサーバー
  • IPアドレス:192.168.241.226/24
  • Sambaをrpmパッケージからインストール(バージョン4.7系)

上記のSambaサーバーをメンバーサーバーとしてActive DirectoryのWindowsドメインに参加させていきます。

2. Sambaサーバーのネットワーク設定(DNS)

SambaサーバーをWindowsドメインにメンバーサーバーとして追加するためには、WindowsドメインのドメインコントローラーがSambaサーバー側から名前解決できる必要があります。その為、事前の準備として、Sambaサーバーに設定されているDNSサーバーのIPアドレスを、本環境のドメインコントローラーのIPアドレスに変更します。本章ではDNSの変更手順について説明します。

2-1. DNSサーバーと検索ドメインの設定

Sambaサーバーに設定されているDNSサーバーをドメインコントローラーのIPアドレスである”192.168.241.25”と”192,168.241.26”に変更します。
また検索ドメインについては、Active Directoryのドメイン名”2016dom.local”を指定します。ネットワーク設定にはnmcliコマンドを利用します。
DNSの変更は、以下のようにnmcliコマンドを実行します。(ens33はネットワーク名になりますので、実際の環境に読み替えて下さい)

# nmcli connection modify ens33 ipv4.dns "192.168.241.25 192.168.241.26" ipv4.dns-search 2016dom.local

エラーが表示されなければ、正常に設定は完了しています。続いて、設定値の確認を行います。nmcliコマンドを以下のように実行します。

$ nmcli connection show ens33 | grep ipv4.dns

以下が結果になります。

ipv4.dns: 192.168.241.25,192.168.241.26
ipv4.dns-search: 2016dom.local
ipv4.dns-options: ""
ipv4.dns-priority: 0

上記のようにipv4.dnsとipv4.dns-search項目の設定値が、設定したパラメーターになっていれば、設定は完了です。

2-2. ネットワーク設定の反映と確認

項目2-1. でDNSに関連するネットワークの設定が完了しましたので、設定内容の反映を行います。systemctlコマンドでネットワークを再起動します。

# systemctl restart network

エラーが出力されなければ、正常に再起動と設定の反映は完了しています。続いて、設定内容の確認を行います。nmcliコマンドで変更された内容は/etc/resolv.confに反映されます。ファイルを確認して設定内容が反映されていることを確認します。

$ cat /etc/resolv.conf
# Generated by NetworkManager
search 2016dom.local
nameserver 192.168.241.25
nameserver 192.168.241.26

上記のように、設定したDNSサーバーのIPアドレスと検索ドメインが表示されれば、Sambaサーバー側のネットワーク設定は完了です。

3. Windows DNSへのSambaサーバー登録

SambaサーバーをWindowsドメインに参加させるためには、Sambaサーバーのホスト名(ここではfs)が、WindowsのDNSサーバーで名前解決できる必要があります。本章では、Windows側のDNSサーバーへSambaサーバーのホスト名を登録する手順を紹介します。

3-1. Sambaサーバーのホスト名確認

まず、設定されているSambaサーバーのホスト名を確認します。

$ cat /etc/hostname
fs

上記から”fs”がSambaサーバーのホスト名であることが確認できましたので、このホスト名をWindows DNSへ登録します。

3-2. DNSサーバーへの登録

Windows側のDNSサーバーへ、Sambaサーバーのホスト名である”fs”のAレコードを登録します。(Aレコードはホスト名に対応するIPアドレスの情報)操作はWindowsのドメインコントローラー(ここではwin2016)で行います。
サーバーマネージャーからDNSを選択して、サーバー名を右クリックして、[DNSマネージャー]を選びます。

samba-ad-add-3-2-01

ドメイン名を選択して右クリック、表示されたメニューから[新しいホスト(AまたはAAAA)をクリックします。

samba-ad-add-3-2-02

新しいホスト登録画面が開きます。以下のパラメーターを設定します。

  • 名前:fs
  • IPアドレス:192.168.241.226
  • 関連付けられたポインター(PTR)レコードを作成するにチェック/li>

設定後に[ホストの追加]をクリックします。

samba-ad-add-3-2-03

ホストレコードfs.2016dom.localは正しく作成ました。と表示されれば、登録は完了です。

samba-ad-add-3-2-04

以下のようにfsが表示されていることを確認します。

samba-ad-add-3-2-05

これでWindows側への登録は完了です。

4. DNSの名前引き確認

Sambaサーバーのホスト名である”fs”のDNS登録完了後に、Sambaサーバー側から登録したFQDNでのホスト名について正引きができることを確認します。DNSの正引き確認はhostコマンドで行います。

4-1. dns-utilsパッケージのインストール

dnsの動作確認に利用するhostコマンドはbind-utilsパッケージに含まれています。このパッケージはCentOSをインフラストラクチャーでインストールした場合には含まれていませんので、yumコマンドで以下のようにインストールを行います。
※既にbind-utilsパッケージがインストールされている場合、本手順は不要です。

# yum -y install bind-utils

以下がyumコマンドの実行結果になります。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ bind-utils.x86_64 32:9.9.4-61.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

インストール中:
bind-utils x86_64 32:9.9.4-61.el7 base 204 k

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

総ダウンロード容量: 204 k
インストール容量: 431 k
Downloading packages:
bind-utils-9.9.4-61.el7.x86_64.rpm | 204 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : 32:bind-utils-9.9.4-61.el7.x86_64 1/1
検証中 : 32:bind-utils-9.9.4-61.el7.x86_64 1/1

インストール:
bind-utils.x86_64 32:9.9.4-61.el7

完了しました!

bind-utilsがインストールされると、hostコマンドが利用できるようになります。

4-2. Windowsドメインコントローラーの名前引き確認(FQDN)

hostコマンドが利用できる状況になりましたので、ドメインコントローラーのFQDN名(ドメイン名+ホスト名)であるwin2016.2016dom.localを正引きしてみます。(正引きはコンピューター名から、対応するIPアドレスを検索します。)
hostコマンドを以下のように実行します。

$ host win2016.2016dom.local
win2016.2016dom.local has address 192.168.241.25

指定したホスト名”win2016.2016dom.local”に対して、IPアドレス”192.168.241.25”が表示されれば確認は完了です。続いて2台目のドメインコントローラーである”win2016-02.2016dom.local”を正引きしてみます。
以下のようにhostコマンドを実行します。

$ host win2016-02.2016dom.local
win2016-02.2016dom.local has address 192.168.241.26

上記のようにIPアドレスが応答として表示されれば、正常に正引きは完了しています。
もし、ホスト名が見つからないという警告が表示された場合には、CentOS側のDNS設定を見直して下さい。ここでは正常に確認ができたという前提で先へ進めていきます。

4-3. Windowsドメインコントローラーの名前引き確認(コンピューター名)

引き続きDNSの確認を行います。項目4-2. ではドメイン名を含めたコンピューター名(FQDN)で名前引きを実行しましたが、今度はコンピューター名だけで名前引きを実行します。CentOS側のipv4.dns-search設定が行われていると、ホスト名だけで名前引きを実行することができます。
以下のようにhostコマンドを実行します。

$ host win2016
win2016.2016dom.local has address 192.168.241.25

上記のようにホスト名だけで、IPアドレスの応答が返ってくれば、検索ドメインは正常に設定できています。続いて、二台目のドメインコントローラーも確認します。

$ host win2016-02
win2016-02.2016dom.local has address 192.168.241.26

上記のようにホスト名に対応したIPアドレスが表示されれば、設定は正常に行われています。

4-4. Sambaサーバーの名前引き確認

Windows DNSへ登録が完了したSambaサーバーのホスト名である”fs"の名前引きができることを確認します。
項目4-2. と同じようにhostコマンドを利用します。Sambaサーバーで、以下のようにコマンドを実行します。

$ host fs
fs.2016dom.local has address 192.168.241.226

上記のようにSambaサーバーのコンピューター名に対応するIPアドレスが表示されれば、Sambaサーバーのコンピューター名登録は完了しています。
これで名前解決に関する設定は完了です。

5. Sambaサーバーの時刻同期

項目4. まででDNS周りの設定が完了しましたので、Sambaサーバーとドメインコントローラーとの時刻同期を設定します。時刻同期はADの認証方式であるKerberos認証が機能する上では、ドメインコントローラーとの時刻のずれが常時5分以内である必要があります。その為、ドメインコントローラーとSambaサーバーとの時刻同期を行います。時刻同期はSambaサーバーにインストールされているchronydサービスを利用します。
※ドメインコントローラーは外部のタイムソースと正常に同期が取れていないと、同期に失敗します。(ローカルのタイムクロックと同期している場合など)その場合は、ドメインコントローラー以外のタイムソース(ルーターや外部のタイムソース)と同期設定を行って下さい。

5-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回連続的に問い合わせを行い、時刻同期が早く行うことができるオプションになります。本記事ではドメインコントローラーである win2016とwin2016-02を同期先のタイムサーバーとして指定します。
以下をコメントアウトした下の部分に追記します。

server win2016.2016dom.local iburst
server win2016-02.2016dom.local iburst

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

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

項目5-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サービスが起動していることが確認できました。これでサービスの再起動は完了です。

5-3. 時刻同期の確認

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

# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
=============================================================
^* WIN2016.2016dom.local 3 6 17 51 +569ns[ +55us] +/- 152ms
^? WIN2016-02.2016dom.local 0 8 0 - +0ns[ +0ns] +/- 0ns

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

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

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

6. Samba追加パッケージのインストール

項目5. までで事前の準備が完了しましたので、ドメイン参加に必要な追加パッケージの導入の手順を紹介します。現状のSamba関連のパッケージは以下の通りです。

$ yum list installed | grep samba
samba.x86_64 4.7.1-6.el7 @base
samba-client-libs.x86_64 4.7.1-6.el7 @base
samba-common.noarch 4.7.1-6.el7 @base
samba-common-libs.x86_64 4.7.1-6.el7 @base
samba-common-tools.x86_64 4.7.1-6.el7 @base
samba-libs.x86_64 4.7.1-6.el7 @base

上記パッケージがインストールされている環境に、ドメインに参加するためのパッケージを追加していきます。現状、インストールされているパッケージの詳細については、記事

>「CentOS 7とsambaでWindows用ファイルサーバーを設定する。古いサーバーの有効利用に最適」

に詳しく説明しています。参考にして下さい。

6-1. Samba追加パッケージの詳細を確認

SambaサーバーをWindowsドメインに追加するのに必要となる追加パッケージは以下になります。

  • krb5-workstation
  • oddjob-mkhomedir
  • samba-winbind
  • samba-winbind-clients
  • samba-winbind-krb5-locator
  • pam_krb5

パッケージのインストール前に内容に間違いないか、念のために詳細を確認します。yumコマンドを以下のように実行します。

$ yum info krb5-workstation oddjob-mkhomedir samba-winbind samba-winbind-clients samba-winbind-krb5-locator pam_krb5
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
利用可能なパッケージ
名前 : krb5-workstation
アーキテクチャー : x86_64
バージョン : 1.15.1
リリース : 19.el7
容量 : 814 k
リポジトリー : updates/7/x86_64
要約 : Kerberos 5 programs for use on workstations
URL : http://web.mit.edu/kerberos/www/
ライセンス : MIT
説明 : Kerberos is a network authentication system. The krb5-workstation
: package contains the basic Kerberos programs (kinit, klist, kdestroy,
: kpasswd). If your network uses Kerberos, this package should be
: installed on every workstation.

名前 : oddjob-mkhomedir
アーキテクチャー : i686
バージョン : 0.31.5
リリース : 4.el7
容量 : 38 k
リポジトリー : base/7/x86_64
要約 : An oddjob helper which creates and populates home directories
URL : http://www.fedorahosted.org/oddjob
ライセンス : BSD
説明 : This package contains the oddjob helper which can be used by the
: pam_oddjob_mkhomedir module to create a home directory for a user
: at login-time.

名前 : oddjob-mkhomedir
アーキテクチャー : x86_64
バージョン : 0.31.5
リリース : 4.el7
容量 : 38 k
リポジトリー : base/7/x86_64
要約 : An oddjob helper which creates and populates home directories
URL : http://www.fedorahosted.org/oddjob
ライセンス : BSD
説明 : This package contains the oddjob helper which can be used by the
: pam_oddjob_mkhomedir module to create a home directory for a user
: at login-time.

名前 : pam_krb5
アーキテクチャー : i686
バージョン : 2.4.8
リリース : 6.el7
容量 : 159 k
リポジトリー : base/7/x86_64
要約 : A Pluggable Authentication Module for Kerberos 5
URL : https://fedorahosted.org/pam_krb5/
ライセンス : BSD or LGPLv2+
説明 : This is pam_krb5, a pluggable authentication module that can be used by
: PAM-aware applications to check passwords and obtain ticket granting tickets
: using Kerberos 5, and to change user passwords.

名前 : pam_krb5
アーキテクチャー : x86_64
バージョン : 2.4.8
リリース : 6.el7
容量 : 158 k
リポジトリー : base/7/x86_64
要約 : A Pluggable Authentication Module for Kerberos 5
URL : https://fedorahosted.org/pam_krb5/
ライセンス : BSD or LGPLv2+
説明 : This is pam_krb5, a pluggable authentication module that can be used by
: PAM-aware applications to check passwords and obtain ticket granting tickets
: using Kerberos 5, and to change user passwords.

名前 : samba-winbind
アーキテクチャー : x86_64
バージョン : 4.7.1
リリース : 6.el7
容量 : 525 k
リポジトリー : base/7/x86_64
要約 : Samba winbind
URL : http://www.samba.org/
ライセンス : GPLv3+ and LGPLv3+
説明 : The samba-winbind package provides the winbind NSS library, and some client
: tools. Winbind enables Linux to be a full member in Windows domains and to use
: Windows user and group accounts on Linux.

名前 : samba-winbind-clients
アーキテクチャー : x86_64
バージョン : 4.7.1
リリース : 6.el7
容量 : 132 k
リポジトリー : base/7/x86_64
要約 : Samba winbind clients
URL : http://www.samba.org/
ライセンス : GPLv3+ and LGPLv3+
説明 : The samba-winbind-clients package provides the wbinfo and ntlm_auth
: tool.

名前 : samba-winbind-krb5-locator
アーキテクチャー : x86_64
バージョン : 4.7.1
リリース : 6.el7
容量 : 85 k
リポジトリー : base/7/x86_64
要約 : Samba winbind krb5 locator
URL : http://www.samba.org/
ライセンス : GPLv3+ and LGPLv3+
説明 : The winbind krb5 locator is a plugin for the system kerberos library to allow
: the local kerberos library to use the same KDC as samba and winbind use

表示された説明から上記のパッケージがSambaでのドメイン参加に必要であることが確認できましたので、このパッケージをインストールします。

6-2. yumコマンドによる追加パッケージのインストール

samba追加パッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目6-1. で必要なパッケージが確認できましたので、以下のコマンドでインストールします。

# yum -y install krb5-workstation oddjob-mkhomedir samba-winbind samba-winbind-clients samba-winbind-krb5-locator pam_krb5

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ krb5-workstation.x86_64 0:1.15.1-19.el7 を インストール
---> パッケージ oddjob-mkhomedir.x86_64 0:0.31.5-4.el7 を インストール
---> パッケージ pam_krb5.x86_64 0:2.4.8-6.el7 を インストール
---> パッケージ samba-winbind.x86_64 0:4.7.1-6.el7 を インストール
---> パッケージ samba-winbind-clients.x86_64 0:4.7.1-6.el7 を インストール
---> パッケージ samba-winbind-krb5-locator.x86_64 0:4.7.1-6.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

インストール中:
krb5-workstation x86_64 1.15.1-19.el7 updates 814 k
oddjob-mkhomedir x86_64 0.31.5-4.el7 base 38 k
pam_krb5 x86_64 2.4.8-6.el7 base 158 k
samba-winbind x86_64 4.7.1-6.el7 base 525 k
samba-winbind-clients x86_64 4.7.1-6.el7 base 132 k
samba-winbind-krb5-locator x86_64 4.7.1-6.el7 base 85 k

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

総ダウンロード容量: 1.7 M
インストール容量: 4.6 M
Downloading packages:
(1/6): oddjob-mkhomedir-0.31.5-4.el7.x86_64.rpm | 38 kB 00:00:00
(2/6): pam_krb5-2.4.8-6.el7.x86_64.rpm | 158 kB 00:00:00
(3/6): samba-winbind-krb5-locator-4.7.1-6.el7.x86_64.rpm | 85 kB 00:00:00
(4/6): krb5-workstation-1.15.1-19.el7.x86_64.rpm | 814 kB 00:00:00
(5/6): samba-winbind-clients-4.7.1-6.el7.x86_64.rpm | 132 kB 00:00:00
(6/6): samba-winbind-4.7.1-6.el7.x86_64.rpm | 525 kB 00:00:01

Transaction test succeeded
Running transaction
インストール中 : samba-winbind-4.7.1-6.el7.x86_64 1/6
インストール中 : samba-winbind-krb5-locator-4.7.1-6.el7.x86_64 2/6
インストール中 : samba-winbind-clients-4.7.1-6.el7.x86_64 3/6
インストール中 : oddjob-mkhomedir-0.31.5-4.el7.x86_64 4/6
インストール中 : krb5-workstation-1.15.1-19.el7.x86_64 5/6
インストール中 : pam_krb5-2.4.8-6.el7.x86_64 6/6

インストール:
krb5-workstation.x86_64 0:1.15.1-19.el7 oddjob-mkhomedir.x86_64 0:0.31.5-4.el7
pam_krb5.x86_64 0:2.4.8-6.el7 samba-winbind.x86_64 0:4.7.1-6.el7
samba-winbind-clients.x86_64 0:4.7.1-6.el7 samba-winbind-krb5-locator.x86_64 0:4.7.1-6.el7

完了しました!

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

7. Kerberos認証用の設定

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

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

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

# cp -p /etc/krb5.conf /etc/krb5.conf.org

7-2. krb5.conf設定ファイルの編集

ファイルのバックアップが完了しましたので”krb5.conf”を編集していきます。変更前のファイルは以下のようになっています。

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
# default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
# EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
# }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

このファイルをActive Directoryの設定に合わせて、以下のように変更します。

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = 2016DOM.LOCAL
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
2016DOM.LOCAL = {
kdc = 2016dom.local
admin_server = win2016.2016dom.local
}

[domain_realm]
.2016dom.local = 2016DOM.LOCAL
2016dom.local = 2016DOM.LOCAL

基本的に設定が必要なディレクティブは
[libdefaults]
[realms]
[domain_realm]
の3点です。各ディレクティブの設定項目を運用しているActive Directoryのドメインに合わせて変更します。
変更が完了したら、ファイルを保存します。これでKerberos認証用設定ファイルの変更は完了です。

8. Sambaサーバーの設定変更

Kerberos認証の設定が完了しましたので、ここからはSambaサーバーをドメインへ参加させるための設定変更を行っていきます。

8-1. Sambaサービスの停止

Sambaサーバーの設定変更前にサービスを停止します。systemctlコマンドを以下のように実行します。

# systemctl stop smb nmb

エラーが表示されなければ、Sambaサービスは停止しています。

8-2. smb.confの変更

sambaの設定は/etc/samba/以下にあるsmb.confで行います。smb.confは設定項目が複数のセクションに分割されています。各セクションの設定内容は以下の通りです。

  • [global] sambaの挙動に関する基本的なパラメーター設定
  • [homes] ユーザのホームディレクトリの共有設定
  • [printers] サーバに接続されたプリンタの設定
  • [共有名] 個別の共有設定

上記セクションのうち、今回はglobalセクションについて、設定を行います。
smb.confの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

# cd /etc/samba
# ls
lmhosts smb.conf smb.conf.org smb.conf.example
# cp -p smb.conf smb.conf.org2

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

# vi smb.conf

8-3. globalセクションの設定変更

設定ファイルに含まれるglobalセクションを変更します。globalセクションはsambaの挙動に関する基本的なパラメーターを指定するセクションになります。

[global]
workgroup = WORKGROUP
server string = SAMBA SERVER Version %v
netbios name = fs
security = user
passdb backend = tdbsam
dos charset = CP932
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw

このセクションを、以下のように変更します。

[global]
workgroup = 2016DOM <= ドメインのNETBIOS名に合わせる
realm = 2016DOM.LOCAL <=ドメイン名のFQDN、大文字
server string = SAMBA SERVER Version %v
netbios name = fs
security = ads
idmap config * : range = 16777216-33554431
idmap config 2016DOM:backend = rid
idmap config 2016DOM:range = 10000-15000
obey pam restrictions = yes <=ホームディレクトリの自動作成に必要
template homedir = /home/%D/%U
template shell = /bin/bash
kerberos method = secrets only
winbind use default domain = true
winbind offline logon = false
dos charset = CP932
unix charset = UTF-8
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw

変更が完了できたら、保存を行います。

8-4. 設定ファイルの確認

smb.confに設定できる内容は多岐にわたるため、設定ファイル自体に間違いがないかを確認するコマンドtestparmが用意されています。testparmコマンドで設定ファイルをチェックします。以下、実行例になります

# testparm
Load smb config files from smb.conf
Processing section "[homes]"
Processing section "[Share]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

# Global parameters
[global]
disable spoolss = Yes
dos charset = CP932
load printers = No
obey pam restrictions = Yes
realm = 2016DOM.LOCAL
security = ADS
server string = SAMBA SERVER Version %v
template shell = /bin/bash
winbind use default domain = Yes
wins support = Yes
workgroup = 2016DOM
idmap config 2016dom:range = 10000-15000
idmap config 2016dom:backend = rid
idmap config * : range = 16777216-33554431
idmap config * : backend = tdb

[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S

[Share]
comment = Share Folder for All Users
path = /home/share/
read only = No

出力された結果に警告が表示されなければ、設定ファイルの編集は問題ありません。

8-5. ホームフォルダ用ディレクトリの作成

本設定ではユーザーの初回ログオン時に、ユーザーのホームフォルダが自動作成されるように設定しています。フォルダが自動作成されるパスは、smb.confに設定したパスで

/home/ドメイン名/ユーザー名

となります。このドメイン名フォルダは手動で作成する必要がありますので、事前に作成しておきます。本環境ではドメイン名は2016DOMになりますので、この名前のフォルダを作成します。

# mkdir /home/2016DOM
# chmod 1777 /home/2016DOM/

これでホームフォルダ用のディレクトリは作成完了です。

9. Windowsドメインへの参加

ここまでの設定で、SambaサーバーがWindowsドメインへ参加するための準備が完了しましたので、実際にWindowsドメインへの参加を行っていきます。本章ではその手順について説明していきます。

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

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

# kinit administrator <=ADにコンピュータを追加する権限を持ったユーザを指定
Password for administrator@2016DOM.LOCAL: <=ユーザーのパスワードを入力

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

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

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

# klist
Ticket cache: KEYRING:persistent:0:krb_ccache_QiruOZ6
Default principal: administrator@2016DOM.LOCAL

Valid starting Expires Service principal
2018-08-05T11:18:23 2018-08-05T21:18:23 krbtgt/2016DOM.LOCAL@2016DOM.LOCAL
renew until 2018-08-12T11:18:15

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

9-2. Sambaサーバーのドメイン参加

Kerberos認証用のチケットが取得できましたので、続いてSambaサーバーのドメイン参加を行います。ドメイン参加には、netコマンドを利用します。以下のようにnetコマンドを実行します。

# net ads join -U administrator <=ADにコンピュータを追加する権限を持ったユーザを指定
Enter administrator's password: <=ユーザーのパスワードを入力

実行すると管理者のパスワードを聞かれます。パスワードを入力してください。パスワードが登録されているものと合致した場合、以下のように表示されます。

Using short domain name -- 2016DOM
Joined 'FS' to dns domain '2016dom.local'

これでSambaサーバーのドメイン参加は完了です。

9-3. ドメイン参加の確認

Sambaサーバードメイン参加の確認を行います。ドメイン参加の確認は参加と同じくnetコマンドで行います。以下のように実行します。

# net ads info
LDAP server: 192.168.241.25
LDAP server name: WIN2016.2016dom.local
Realm: 2016DOM.LOCAL
Bind Path: dc=2016DOM,dc=LOCAL
LDAP port: 389
Server time: 金, 03 8月 2018 17:53:48 JST
KDC server: 192.168.241.25
Server time offset: 0
Last machine account password change: 金, 03 8月 2018 17:53:38 JST

正常に参加できている場合、ドメインの情報が表示されます。また、netコマンドを以下のように実行することで、Active Directory上のオブジェクトに関する情報を取得することが出来ます。

# net ads status
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
objectClass: computer
cn: FS
distinguishedName: CN=FS,CN=Computers,DC=2016dom,DC=local
instanceType: 4
whenCreated: 20180803085337.0Z
whenChanged: 20180803085339.0Z
uSNCreated: 54263
uSNChanged: 54269
-------------- Security Descriptor (revision: 1, type: 0x8c14)
owner SID: S-1-5-21-2403979437-1704856860-2414653605-512
group SID: S-1-5-21-2403979437-1704856860-2414653605-512
------- (system) ACL (revision: 4, size: 120, number of ACEs: 2)
------- ACE (type: 0x07, flags: 0x5a, size: 0x38, mask: 0x20, object flags: 0x3)

【略】

sAMAccountName: FS$
sAMAccountType: 805306369
dNSHostName: fs.2016dom.local
servicePrincipalName: HOST/fs.2016dom.local
servicePrincipalName: HOST/FS
objectCategory: CN=Computer,CN=Schema,CN=Configuration,DC=2016dom,DC=local
isCriticalSystemObject: FALSE
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 131777600190888895
msDS-SupportedEncryptionTypes: 31

またWindows側のツールである[Active Directoryユーザーとコンピューター」にも以下のように参加したコンピューターの名前が表示されます。

samba-ad-add-9-3

これでWindowsドメインへ参加できていることが確認できました。

※参考:Windowsドメインからの削除
Windowsドメインからコンピューターアカウントを削除したい場合は、net ads leaveコマンドを実行します。以下のように実行することでアカウントが削除できます。

# net ads leave -U administrator <=ADにコンピュータを追加する権限を持ったユーザを指定
Enter administrator's password: <=ユーザのパスワード
Deleted account for 'FS' in realm '2016DOM.LOCAL'

テストでコンピューターアカウントを削除するような場合に使います。

10. Sambaサーバーの認証用設定を変更

Sambaサーバーのドメイン参加まで完了しましたので、Sambaサーバーが利用する認証の設定変更(pamファイルやnsswitch.confの変更)を行います。システムへのログインに利用する情報として、winbindを利用するように関連するファイルを変更します。

10-1. Sambaサーバーの認証用設定を変更

認証の設定変更についてはauthconfigというコマンドが用意されていますので、以下のように実行します。

# authconfig --enablekrb5 --enablewinbind --enablewinbindauth --enablemkhomedir --update

エラーが表示されなければ、設定の変更は完了です。
コマンドを実行すると、nsswitch.confは以下のように変更されます。

passwd: files winbind
shadow: files winbind
group: files winbind
#initgroups: files

winbindが認証方式として追加されていることが確認できます。

10-2. authconfigのテスト

authconfigはtestオプションを付けることで、設定内容のダンプができます。念のために実行して、設定内容と相違がないことを確認します。
以下のように実行します。

# authconfig --test
caching is disabled
nss_files is always enabled
nss_compat is disabled
nss_db is disabled
nss_hesiod is disabled
hesiod LHS = ""
hesiod RHS = ""
nss_ldap is disabled
LDAP+TLS is disabled
LDAP server = ""
LDAP base DN = ""
nss_nis is disabled
NIS server = ""
NIS domain = ""
nss_nisplus is disabled
nss_winbind is enabled
SMB workgroup = "2016DOM"
SMB servers = ""
SMB security = "ads"
SMB realm = "2016DOM.LOCAL"
Winbind template shell = "/bin/bash"
SMB idmap range = "16777216-33554431"
nss_sss is disabled by default
nss_wins is disabled
nss_mdns4_minimal is disabled
myhostname is enabled
DNS preference over NSS or WINS is disabled
pam_unix is always enabled
shadow passwords are enabled
password hashing algorithm is sha512
pam_krb5 is enabled
krb5 realm = "2016DOM.LOCAL"
krb5 realm via dns is disabled
krb5 kdc = "2016dom.local"
krb5 kdc via dns is disabled
krb5 admin server = "win2016.2016dom.local"
pam_ldap is disabled
LDAP+TLS is disabled
LDAP server = ""
LDAP base DN = ""
LDAP schema = "rfc2307"
pam_pkcs11 is disabled
SSSD smartcard support is disabled
use only smartcard for login is disabled
smartcard module = ""
smartcard removal action = ""
pam_fprintd is disabled
pam_ecryptfs is disabled
pam_winbind is enabled
SMB workgroup = "2016DOM"
SMB servers = ""
SMB security = "ads"
SMB realm = "2016DOM.LOCAL"
pam_sss is disabled by default
credential caching in SSSD is enabled
SSSD use instead of legacy services if possible is enabled
IPAv2 is disabled
IPAv2 domain was not joined
IPAv2 server = ""
IPAv2 realm = ""
IPAv2 domain = ""
pam_pwquality is enabled (try_first_pass local_users_only retry=3 authtok_type=)
pam_passwdqc is disabled ()
pam_access is disabled ()
pam_faillock is disabled (deny=4 unlock_time=1200)
pam_mkhomedir or pam_oddjob_mkhomedir is enabled (skel=/etc/skel umask=022)
Always authorize local users is enabled ()
Authenticate system accounts against network services is disabled

上記から正常に設定されていることが確認できました。

10-3. 設定ファイルの反映

変更を反映するために、Sambaに関連したサービス(smbd/nmbd/winbind)の起動を行います。
以下のように実行します。

# systemctl start smb nmb winbind

エラーが出力されなければ、再起動は完了しています。
起動後にsmbdのstatusを確認します。

$ systemctl status smb nmb winbind
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since 月 2018-08-20 15:24:29 JST; 44s ago
Main PID: 2030 (smbd)
Status: "smbd: ready to serve connections..."
CGroup: /system.slice/smb.service
tq2030 /usr/sbin/smbd --foreground --no-process-group
tq2035 /usr/sbin/smbd --foreground --no-process-group
mq2036 /usr/sbin/smbd --foreground --no-process-group

● nmb.service - Samba NMB Daemon
Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled)
Active: active (running) since 月 2018-08-20 15:24:29 JST; 44s ago
Main PID: 2031 (nmbd)
Status: "nmbd: ready to serve connections..."
CGroup: /system.slice/nmb.service
tq2031 /usr/sbin/nmbd --foreground --no-process-group
mq2033 /usr/sbin/nmbd --foreground --no-process-group

● winbind.service - Samba Winbind Daemon
Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2018-08-20 15:23:03 JST; 2min 10s ago
Main PID: 2008 (winbindd)
Status: "winbindd: ready to serve connections..."
CGroup: /system.slice/winbind.service
tq2008 /usr/sbin/winbindd --foreground --no-process-group
tq2010 /usr/sbin/winbindd --foreground --no-process-group
tq2037 /usr/sbin/winbindd --foreground --no-process-group
tq2038 /usr/sbin/winbindd --foreground --no-process-group
mq2039 /usr/sbin/winbindd --foreground --no-process-group

上記からSambaに関連するサービスが全て起動していることが確認できました。
ここまででsambaのドメイン追加に関する基本的な設定と反映は完了しました。

11. winbindの自動起動設定

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

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

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

# systemctl is-enabled winbind
enabled

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

12. rlimit_maxの警告対応(参考)

※本章はrlimitの警告が気になる場合のみ参照下さい。
sambaの設定ファイルをチェックするtestparmを実行すると、以下の警告

rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)

が表示されます。これはファイルを開くことができる制限値に関する警告ですが、1ユーザーが1024ファイルを同時に開かない場合には問題になりません。
通常の運用でそのようなことは発生しませんので無視しても良いのですが、気になるという方は以下の設定を行って下さい。
/etc/security/limits.confの変更

# vi /etc/security/limits.conf

ファイルの最下行に以下を追加します。

* soft nofile 16384
* hard nofile 65536

ファイルの変更後に、サーバーを再起動します。サーバーの再起動後にtestparmを実行して、警告が表示されないことを確認して下さい。

13. Sambaサーバーの認証用設定の確認

ここまでの設定で、Active Directoryのユーザーの情報をSambaサーバー側から参照できるようになっていると思います。idコマンドを利用して、Active Directory上の情報が取得できることを確認してみます。

# id administrator
uid=10500(administrator) gid=10513(domain users) groups=10513(domain users),10500(administrator),10572(denied rodc password replication group),10518(schema admins),10519(enterprise admins),10520(group policy creator owners),10512(domain admins),16777217(BUILTIN\users),16777216(BUILTIN\administrators)

上記のように情報が取得できました。続いて、user01とuser02についても確認してみます。
※もし情報が取得できない場合は

# systemctl restart winbind

を実行してwinbindを再起動して下さい。初回のwinbind起動時には情報が取得できない場合があります。

# id user01
uid=12601(user01) gid=10513(domain users) groups=10513(domain users),12601(user01),12603(psotest_group),16777217(BUILTIN\users)
# id user02
uid=12602(user02) gid=10513(domain users) groups=10513(domain users),12602(user02),12603(psotest_group),16777217(BUILTIN\users)

上記のように情報が取得できることが確認できました。これでSambaサーバー側の設定と確認は完了です。

14. Sambaサーバーの接続確認

基本的な設定と確認が完了しましたので、ここからは実際にAD上のユーザーでSambaサーバー上のファイル共有にアクセスできることを確認します。

14-1. テスト用ユーザー情報の確認

利用するユーザーはActive Directory上に作成したユーザー”test100”を前提としています。またアクセスするPCはActive Directoryに参加済みのWindows10マシンです。
先ずはidコマンドでSambaサーバー側からtest100ユーザーの情報が参照できることを確認します。

# id test100
uid=13122(test100) gid=10513(domain users) groups=10513(domain users),13122(test100),16777217(BUILTIN\users)

上記のように情報が表示されれば確認は完了です。

14-2. ファイル共有への接続テスト

続いてドメインに参加済みのPCへログインします。ここではtest100ユーザーを利用します。

samba-ad-add-14-2-1

ログオンできました。

samba-ad-add-14-2-2

\\fsでSambaサーバー上のファイル共有を開きます。
認証が不要で、サーバー上の共有フォルダが確認できます。

samba-ad-add-14-2-3

共有フォルダのShareにアクセスします。
問題なくテストファイルを配置することができました。

samba-ad-add-14-2-4

続いて、ホームディレクトリのtest100にアクセスします。このフォルダは初回のログオン時に自動的に作成されます。

samba-ad-add-14-2-5

こちらにも問題なくアクセスができました。これでSambaサーバーがメンバーサーバーになっていることが確認できました。

15. Active Directory上のユーザーでLinuxへ接続

LinuxサーバーへActive Directory上のユーザーを利用して、sshでログインが可能です。PAMを利用しているプログラムであれば、Active Directory上のユーザーでSamba以外のプログラムでもアクセスが可能です。
テストとしてActive Directory上のユーザー、test100でssh接続を行います。

# ssh -l test100 localhost
test100@localhost's password:
Last login: Mon Aug 20 16:13:19 2018
[test100@fs ~]$

このようにActive Directory上のユーザーで、ssh接続を行うことが確認できました。

16. まとめ

ここまででWindowsのActive DirectoryとSambaを利用した統合認証環境を構築することが出来ました。
業務で利用しているActive Directoryの環境へSambaサーバーを参加させることができるのはメリットが大きく、Sambaの可能性が広がります。SambaサーバーでWindowsドメイン構築も可能ですが、全てをSambaで構築すると、Linuxのスキルがそれなりに必要になるので認証系はActive Directoryを利用したいという環境も多いと思います。
今回の記事を参考に、是非、Active DirectoryとSamba(Linux)の統合認証環境構築を試してみて下さい。

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

レムシステム

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

-Active Directory, CentOS, Samba