SSSDでCentOS 7をActive Directoryに参加させてWindowsと一緒に管理を行う

centos-add-ad-sssd-top

Linuxサーバーのユーザー管理をActive Directoryで行いたい。LinuxとWindowsの混在環境なら、一度は考えると思います。
実は混在環境を管理するための設定は、それ程、難しくありません。Sambaなどのファイル共有を利用しない環境なら、LinuxのサーバーをActive Directoryのメンバーに追加する方法があります。本記事では、その手順について紹介していきます。
参考 SambaサーバーをWindowsのメンバーとして追加する手順は別の記事

Open Source
centos7-samba-ad-add-top
CentOS 7で構築したSambaサーバーをActive Directoryへ参加させる

Sambaサーバーの基本的なインストールが完了して運用を始めると、WindowsとSambaサーバーで両方のユーザーを管理手間が気になると思います。 既存にActive Directory環境がある場合、ユーザーの管理はActive Dir ...

で紹介していますので、こちらを参照下さい。
是非、本記事を参考に、ユーザー管理の手間を軽減するWindowsドメイン環境でのLinuxサーバー運用を行ってみて下さい。

本記事で利用するLinuxの環境ですが、以前のブログ記事

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

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

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

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

Winbindを利用する方法は、Sambaサーバー向けの構成となります。本記事ではSambaを利用しないLinuxサーバーをメンバーに追加する前提であり、また、レッドハットが推奨する方法はsssdを利用した認証を統合する構成ですので、本記事でもsssdを利用して、Windowsドメインへの参加を行います。

1. 環境と構成

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

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

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

でも紹介していますので参考にして下さい。

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/test200が作成されている

ドメインコントローラーは2台とも正常に稼働しており、お互いにコンピューター名で通信ができる前提です。このパラメーターで設定された環境で作業を進めていきます。

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

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

>「CentOS7の基本設定 Linuxのインストール後に設定する9つのポイント」

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

  • コンピューター名:cent7
  • 役割:スタンドアロンのサーバー
  • IPアドレス:192.168.241.229/24

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

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

Linuxサーバーをメンバーサーバーとして追加するためには、WindowsドメインのドメインコントローラーがLinuxサーバー側から名前解決できる必要があります。その為、事前の準備として、Linuxサーバーに設定されている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へのLinuxサーバー登録

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

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

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

$ cat /etc/hostname
cent7

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

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

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

samba-ad-add-3-2-01

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

samba-ad-add-3-2-02

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

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

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

centos-ad-add-3-2-2

”ホストレコードcent7.2016dom.local”は正しく作成ました。と表示されれば、登録は完了です。
以下のようにcent7が表示されていることを確認します。

centos-ad-add-3-2-03

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

4. DNSの名前引き確認

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

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

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

# yum -y install bind-utils

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

読み込んだプラグイン: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 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=====================================================
Package アーキテクチャー バージョン リポジトリー 容量
=====================================================
インストール中:
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. Linuxサーバーの名前引き確認

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

$ host cent7
cent7.2016dom.local has address 192.168.241.229

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

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

項目4. まででDNS周りの設定が完了しましたので、Linuxサーバーとドメインコントローラーとの時刻同期を設定します。時刻同期はADの認証方式であるKerberos認証が機能する上では、ドメインコントローラーとの時刻のずれが常時5分以内である必要があります。その為、ドメインコントローラーとSambaサーバーとの時刻同期を行います。時刻同期はSambaサーバーにインストールされているchronydサービスを利用します。
※本記事ではドメインコントローラーを同期先NTPサーバーとしていますが、もし同期ができない場合は、通常に利用しているNTPサーバーを指定していただいて問題ありません。(Windows Server 2016のドメインコントローラーとは、本記事の設定で時刻同期が可能なことを確認しています。)

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. Windowsドメイン参加用パッケージのインストール

項目5. まででWindowsドメインに参加するための設定が完了しましたので、本章ではドメイン参加に必要なパッケージの導入手順について説明していきます。

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

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

  • sssd
  • realmd
  • oddjob-mkhomedir
  • adcli
  • krb5-workstation
  • pam_krb5
  • samba-common-tools

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

$ yum info sssd realmd oddjob-mkhomedir adcli krb5-workstation pam_krb5 samba-common-tools
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
利用可能なパッケージ
名前 : adcli
アーキテクチャー : x86_64
バージョン : 0.8.1
リリース : 4.el7
容量 : 104 k
リポジトリー : base/7/x86_64
要約 : Active Directory enrollment
URL : http://cgit.freedesktop.org/realmd/adcli
ライセンス : LGPLv2+
説明 : adcli is a library and tool for joining an Active Directory domain using
: standard LDAP and Kerberos calls.

名前 : 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.

名前 : realmd
アーキテクチャー : x86_64
バージョン : 0.16.1
リリース : 9.el7
容量 : 208 k
リポジトリー : base/7/x86_64
要約 : Kerberos realm enrollment service
URL : http://cgit.freedesktop.org/realmd/realmd/
ライセンス : LGPLv2+
説明 : realmd is a DBus system service which manages discovery and enrollment in realms
: and domains like Active Directory or IPA. The control center uses realmd as the
: back end to 'join' a domain simply and automatically configure things correctly.

名前 : samba-common-tools
アーキテクチャー : x86_64
バージョン : 4.7.1
リリース : 9.el7_5
容量 : 1.1 M
リポジトリー : base/7/x86_64
要約 : Tools for Samba servers and clients
URL : http://www.samba.org/
ライセンス : GPLv3+ and LGPLv3+
説明 : The samba-common-tools package contains tools for Samba servers and
: SMB/CIFS clients.

名前 : sssd
アーキテクチャー : x86_64
バージョン : 1.16.0
リリース : 19.el7_5.5
容量 : 129 k
リポジトリー : updates/7/x86_64
要約 : System Security Services Daemon
URL : https://pagure.io/SSSD/sssd/
ライセンス : GPLv3+
説明 : Provides a set of daemons to manage access to remote directories and
: authentication mechanisms. It provides an NSS and PAM interface toward
: the system and a pluggable backend system to connect to multiple different
: account sources. It is also the basis to provide client auditing and policy
: services for projects like FreeIPA.
:
: The sssd subpackage is a meta-package that contains the deamon as well as all
: the existing back ends.

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

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

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

# yum install sssd realmd oddjob-mkhomedir adcli krb5-workstation pam_krb5 samba-common-tools

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

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ adcli.x86_64 0:0.8.1-4.el7 を インストール
--> 依存性の処理をしています: cyrus-sasl-gssapi のパッケージ: adcli-0.8.1-4.el7.x86_64
---> パッケージ krb5-workstation.x86_64 0:1.15.1-19.el7 を インストール
--> 依存性の処理をしています: libkadm5(x86-64) = 1.15.1-19.el7 のパッケージ: krb5-workstation-1.15.1-19.el7.x86_64

【略】

---> パッケージ samba-common.noarch 0:4.7.1-9.el7_5 を インストール
---> パッケージ samba-common-libs.x86_64 0:4.7.1-9.el7_5 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

========================================================
Package アーキテクチャー バージョン      リポジトリー 容量
========================================================
インストール中:
adcli x86_64 0.8.1-4.el7 base 104 k
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
realmd x86_64 0.16.1-9.el7 base 208 k
sssd x86_64 1.16.0-19.el7_5.5 updates 129 k

【略】

sssd-ipa x86_64 1.16.0-19.el7_5.5 updates 344 k
sssd-krb5 x86_64 1.16.0-19.el7_5.5 updates 171 k
sssd-krb5-common x86_64 1.16.0-19.el7_5.5 updates 203 k
sssd-ldap x86_64 1.16.0-19.el7_5.5 updates 240 k
sssd-proxy x86_64 1.16.0-19.el7_5.5 updates 164 k

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

総ダウンロード容量: 12 M
インストール容量: 33 M
Is this ok [y/d/N]: y
Downloading packages:
(1/45): c-ares-1.10.0-3.el7.x86_64.rpm | 78 kB 00:00:00
(2/45): adcli-0.8.1-4.el7.x86_64.rpm | 104 kB 00:00:00
(3/45): cyrus-sasl-gssapi-2.1.26-23.el7.x86_64.rpm | 41 kB 00:00:00
(4/45): http-parser-2.7.1-5.el7_4.x86_64.rpm | 28 kB 00:00:00
(5/45): cups-libs-1.6.3-35.el7.x86_64.rpm | 357 kB 00:00:00
(6/45): libbasicobjects-0.1.1-29.el7.x86_64.rpm | 25 kB 00:00:00
(7/45): libcollection-0.7.0-29.el7.x86_64.rpm | 41 kB 00:00:00
(8/45): libdhash-0.5.0-29.el7.x86_64.rpm | 28 kB 00:00:00
(9/45): libini_config-1.3.1-29.el7.x86_64.rpm | 63 kB 00:00:00

【略】

(40/45): sssd-common-1.16.0-19.el7_5.5.x86_64.rpm | 1.4 MB 00:00:00
(41/45): sssd-krb5-1.16.0-19.el7_5.5.x86_64.rpm | 171 kB 00:00:00
(42/45): sssd-ipa-1.16.0-19.el7_5.5.x86_64.rpm | 344 kB 00:00:00
(43/45): sssd-krb5-common-1.16.0-19.el7_5.5.x86_64.rpm | 203 kB 00:00:00
(44/45): sssd-ldap-1.16.0-19.el7_5.5.x86_64.rpm | 240 kB 00:00:00
(45/45): sssd-proxy-1.16.0-19.el7_5.5.x86_64.rpm | 164 kB 00:00:00
----------------------------------------------------------------------------------------------
合計 4.7 MB/s | 12 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : libtalloc-2.1.10-1.el7.x86_64 1/45
インストール中 : libtevent-0.9.33-2.el7.x86_64 2/45
インストール中 : libtdb-1.3.15-1.el7.x86_64 3/45
インストール中 : libldb-1.2.2-1.el7.x86_64 4/45
インストール中 : libdhash-0.5.0-29.el7.x86_64 5/45
インストール中 : libref_array-0.1.5-29.el7.x86_64 6/45
インストール中 : libbasicobjects-0.1.1-29.el7.x86_64 7/45
インストール中 : libcollection-0.7.0-29.el7.x86_64 8/45
インストール中 : libsss_certmap-1.16.0-19.el7_5.5.x86_64 9/45
インストール中 : libsss_idmap-1.16.0-19.el7_5.5.x86_64 10/45
インストール中 : samba-common-4.7.1-9.el7_5.noarch 11/45

【略】

インストール中 : sssd-krb5-1.16.0-19.el7_5.5.x86_64 39/45
インストール中 : sssd-proxy-1.16.0-19.el7_5.5.x86_64 40/45
インストール中 : sssd-1.16.0-19.el7_5.5.x86_64 41/45
インストール中 : krb5-workstation-1.15.1-19.el7.x86_64 42/45
インストール中 : realmd-0.16.1-9.el7.x86_64 43/45
インストール中 : adcli-0.8.1-4.el7.x86_64 44/45
インストール中 : pam_krb5-2.4.8-6.el7.x86_64 45/45

【略】

インストール:
adcli.x86_64 0:0.8.1-4.el7 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 realmd.x86_64 0:0.16.1-9.el7 sssd.x86_64 0:1.16.0-19.el7_5.5

依存性関連をインストールしました:
c-ares.x86_64 0:1.10.0-3.el7 cups-libs.x86_64 1:1.6.3-35.el7
cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7 http-parser.x86_64 0:2.7.1-5.el7_4
libbasicobjects.x86_64 0:0.1.1-29.el7 libcollection.x86_64 0:0.7.0-29.el7
libdhash.x86_64 0:0.5.0-29.el7 libini_config.x86_64 0:1.3.1-29.el7
libipa_hbac.x86_64 0:1.16.0-19.el7_5.5 libkadm5.x86_64 0:1.15.1-19.el7

【略】

sssd-krb5-common.x86_64 0:1.16.0-19.el7_5.5 sssd-ldap.x86_64 0:1.16.0-19.el7_5.5
sssd-proxy.x86_64 0:1.16.0-19.el7_5.5

完了しました!

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

7. Windowsドメインへの参加設定

項目6. までで、Windowsドメインへの参加準備は完了しましたので、実際にドメインへ参加します。参加には項目6. でインストールしたrealmdパッケージに含まれているrealmユーティリティを利用します。realmはsssdとKerberos認証の設定、及びマシンアカウントの追加を自動的に行うことができるユーティリティになります。
realmdを利用せずに、各設定手順を別々に行うことも出来ますが、操作が煩雑になりますので、ここではrealmユーティリティを利用する前提で進めていきます。

7-1. Windowsドメインの検索とパッケージの確認

まずrealm discoverコマンドで参加するWindowsドメインと、ドメインの登録に必要なパッケージを確認します。realm discoverコマンドにドメイン名を指定して実行します。以下のようにドメインの情報が表示されることを確認して下さい。

# realm discover 2016dom.local
2016dom.local
type: kerberos
realm-name: 2016DOM.LOCAL
domain-name: 2016dom.local
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools

”required-package”項目がWindowsドメインの参加に必要なパッケージになります。項目6. で指定したものと同じパッケージですので、全てのパッケージがインストールされているという前提で、先へ進めていきます。

7-2. Windowsドメインの検索とパッケージの確認

realm discoverコマンドによるドメインの確認ができたら、実際にWindowsドメインに参加します。ドメインの参加にはrealm joinコマンドを利用します。realm joinコマンドにドメイン名と-Uオプションとして、ドメインの管理ユーザー(ここではadministrator)を指定します。以下のように実行します。

# realm join 2016dom.local -U administrator
administrator に対するパスワード: <= administratorユーザーのパスワード

realm joinコマンドを実行すると、ドメイン管理者のパスワードを要求されます。パスワードを入力すると、ドメインの参加が実行されます。ドメインの参加に成功した場合は、エラーなどが表示されず、プロンプトに戻ります。
エラーが表示されなければ、ドメイン参加は完了しています。

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

項目7-2. でWindowsドメインに参加ができましたので、確認をします。realm listコマンドで、設定したドメインのリストが表示できます。以下のように実行します。

# realm list
2016dom.local
type: kerberos
realm-name: 2016DOM.LOCAL
domain-name: 2016dom.local
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
login-formats: %U
login-policy: allow-realm-logins

上記のようにWindowsドメインの情報が表示されれば、relam listでの確認は完了です。
続いてWindowsの管理ユーティリティ「Active Directoryユーザーとコンピュータ」から、ComputersにLinuxサーバーが登録されていることを確認します。

centos-ad-add-7-3

上の画面のようにLinuxサーバー”cent7”が登録されていることが確認できます。
これでドメイン参加の確認は完了です。

8. realmdを使用した場合に変更されるファイル

realmdを利用して、ドメイン参加を行った場合、以下の2ファイルについて変更が発生します。ここでは元のファイルの内容が、どのように変更されるかを紹介します。

8-1. krb5.confファイルの変更点

krb5.confファイルはkerberos認証を利用するための設定ファイルです。realm joinコマンドでドメイン参加した場合にはこのファイルがWindowsドメインの環境に応じて変更されます。デフォルトのファイルは以下の通りです。

# 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

このファイルが以下のように変更されます。

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

includedir /var/lib/sss/pubconf/krb5.include.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}

default_realm = 2016DOM.LOCAL
[realms]
# EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
# }

2016DOM.LOCAL = {
}

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
2016dom.local = 2016DOM.LOCAL
.2016dom.local = 2016DOM.LOCAL

参加するドメインである2016dom.localに合わせて、krb5.confファイルが変更されていることが確認できます。
realmユーティリティを利用しない場合には、手動で設定変更を行います。

8-2. sssd.confファイルの変更点

その他に認証の受け渡しを行うサービス、sssdの設定ファイルであるsssd.confが作成されます。
このファイルはrelam joinコマンドを実行する前には存在しません。作成されるパスは”/etc/sssd/”以下になります。ファイルの内容は以下の通りです。

[sssd]
domains = 2016dom.local
config_file_version = 2
services = nss, pam

[domain/2016dom.local]
ad_domain = 2016dom.local
krb5_realm = 2016DOM.LOCAL
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad

上記のようにWindowsドメイン環境にあったファイルが作成されます。このファイルについては、運用する環境によって変更が必要になりますので、次章では設定変更のポイントを説明していきます。

9. sssdの設定変更

自動的に作成された、sssd用の設定ファイルであるsssd.confについて、設定変更を行ったほうが良い項目が幾つかありますので、本章では設定変更について説明します。設定は以下の前提に沿った内容になります。

  • ユーザー名はドメイン名を付与しない user01@2016dom.localではなくuser01のみで認証できる
  • ホームディレクトリは/home/ドメイン名/ユーザー名ではなく、/home/ユーザー名のパスに作成される

上記を元に設定を行います。

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

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

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

9-2. sssd.conf設定ファイルの編集

ファイルのバックアップが完了しましたので”sssd.conf”を編集していきます。編集にはviコマンドを利用します。

# vi /etc/sssd/sssd.conf

変更前のsssd.confファイルは以下のようになっています。

[sssd]
domains = 2016dom.local
config_file_version = 2
services = nss, pam

[domain/2016dom.local]
ad_domain = 2016dom.local
krb5_realm = 2016DOM.LOCAL
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad

このファイルの内、以下の項目を変更します。

  • use_fully_qualified_names = True (ユーザー名としてドメイン名が必要となる設定)
  • fallback_homedir = /home/%u@%d(自動的にホームディレクトリが作成されるパスの設定)

変更後のファイルは以下のようになります。

[sssd]
domains = 2016dom.local
config_file_version = 2
services = nss, pam

[domain/2016dom.local]
ad_domain = 2016dom.local
krb5_realm = 2016DOM.LOCAL
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
#use_fully_qualified_names = True <=コメントアウト
#fallback_homedir = /home/%u@%d <=コメントアウト
fallback_homedir = /home/%u <=/home/%uを指定
access_provider = ad

これでsssd.confファイルの変更は完了です。変更を保存します。

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

本章ではLinuxサーバーが利用する認証の設定変更(pamファイルやnsswitch.confの変更)を行います。システムへのログインに利用する情報として、sssdを利用するように関連するファイルを変更します。

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

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

# authconfig --enablesssd --enablesssdauth --enablemkhomedir --update

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

passwd: files sss
shadow: files sss
group: files sss

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

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 disabled
SMB workgroup = "SAMBA"
SMB servers = ""
SMB security = "user"
SMB realm = ""
Winbind template shell = "/bin/false"
SMB idmap range = "16777216-33554431"
nss_sss is enabled 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 disabled
krb5 realm = "2016DOM.LOCAL"
krb5 realm via dns is disabled
krb5 kdc = ""
krb5 kdc via dns is disabled
krb5 admin server = ""
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 disabled
SMB workgroup = "SAMBA"
SMB servers = ""
SMB security = "user"
SMB realm = ""
pam_sss is enabled 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 (umask=0077)
Always authorize local users is enabled ()
Authenticate system accounts against network services is disabled

11. sssdの起動

ここまででLinuxサーバー側の基本的な認証の設定が終わりましたので、sssdを起動します。
以下のように実行します。

# systemctl start sssd

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

$ systemctl status sssd
● sssd.service - System Security Services Daemon
Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2018-08-27 12:22:48 JST; 4min 51s ago
Main PID: 1691 (sssd)
CGroup: /system.slice/sssd.service
tq1691 /usr/sbin/sssd -i --logger=files
tq1692 /usr/libexec/sssd/sssd_be --domain 2016dom.local --uid 0 --gid 0 --logger=files
tq1693 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
mq1694 /usr/libexec/sssd/sssd_pam --uid 0 --gid 0 --logger=files

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

12. sssdの自動起動設定

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

[root@fs samba]# systemctl enable sssd
Created symlink from /etc/systemd/system/multi-user.target.wants/sssd.service to /usr/lib/systemd/system/sssd.service.

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

# systemctl is-enabled sssd
enabled

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

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

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

# id administrator
uid=52600500(administrator) gid=52600513(domain users) groups=52600513(domain users),52600520(group policy creator owners),52600519(enterprise admins),52600512(domain admins),52600518(schema admins),52600572(denied rodc password replication group)

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

# id user01
uid=52602601(user01) gid=52600513(domain users) groups=52600513(domain users),52602603(psotest_group)
# id user02
uid=52602602(user02) gid=52600513(domain users) groups=52600513(domain users),52602603(psotest_group)

上記のように情報が取得できることが確認できました。これで認証の確認は完了です。

13-1. 情報が取得できない場合

項目13. のユーザー確認を実行すると、以下のように”no such user”となる場合があります。その場合には、情報の取得ができない場合は本章を確認してみて下さい。

# id user01
id: user01: no such user

確認として、ユーザー名@ドメイン名で情報が取得できるかを確認します。例えばuser01の場合、以下のように実行します。

# id user01@2016dom.local
uid=52602601(user01@2016dom.local) gid=52600513(domain users@2016dom.local) groups=52600513(domain users@2016dom.local),52602603(psotest_group@2016dom.local)

ユーザー名@ドメイン名で上記のように情報が取得できる場合は、sssdの設定が正常に読み込まれていない可能性があります。一旦、sssdを再起動することで解消する場合があります。sssdの再起動は以下のように行います。

# systemctl restart sssd

再度、情報が取得できるかを確認します。これで取得ができない場合には、設定ファイルの見直しを行って下さい。

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

LinuxサーバーへActive Directory上のユーザーを利用して、sshなどのプログラムでログインが可能です。認証にPAMを利用しているプログラムであれば、Active Directory上のユーザーでssh以外のプログラムでもアクセスが可能です。
テストとしてActive Directory上にあらかじめ作成したユーザー、test200でssh接続を行います。

# ssh -l test200 localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:54WWHs+lLlsbzfgnD/9ALm5Eg9xz2awWnMlo9rvZjK8.
ECDSA key fingerprint is MD5:67:d4:4f:0d:34:43:d2:f9:65:93:6b:ed:61:5e:be:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
test200@localhost's password:
Creating home directory for test200.
[test200@cent7 ~]$ ls

このようにActive Directory上のユーザーで、Linuxサーバーに対してssh接続を行うことが確認できました。またユーザーtest200のホームディレクトリも自動的に作成されました。これで接続の確認は完了です。

15. まとめ

ここまででWindowsのActive DirectoryとLinuxを利用した統合認証環境を構築することが出来ました。
ファイル共有を利用しない場合には、sssdパッケージ(と一部のSambaパッケージ)のみでLinuxとWindowsの統合認証環境を構築することができます。
Windows環境とLinux環境で異なるユーザー管理を行うのは、不便ですが、本記事で紹介している手順を実行することで、不便さが解消されます。
WindowsとLinuxの管理が煩雑になっている場合には、是非、LiunxとWindowsの混合環境に、利用してみて下さい。

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

レムシステム

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

-Active Directory, CentOS