CentOS7をWindowsドメインに追加する。Active Directoryで管理の手間を軽減。

2018/10/05 CentOS, Linux, サーバー構築

centos-ad-add-top
Linuxサーバーのユーザー管理をActive Directoryで行いたい。LinuxとWindowsの混在環境なら、一度は考えると思います。
実は混在環境を管理するための設定は、それ程、難しくありません。Sambaなどのファイル共有を利用しない環境なら、LinuxのサーバーをActive Directoryのメンバーに追加する方法があります。本記事では、その手順について紹介していきます。
因みにSambaサーバーをWindowsのメンバーとして追加する手順は別の記事
>「CentOS 7とsambaでWindows用ファイルサーバーを設定する。古いサーバーの有効利用に最適」
で紹介していますので、こちらを参照下さい。
是非、本記事を参考に、ユーザー管理の手間を軽減するWindowsドメイン環境でのLinuxサーバー運用を行ってみて下さい。

スポンサーリンク

本記事で利用するLinuxの環境ですが、以前のブログ記事
>「CentOS 7とsambaでWindows用ファイルサーバーを設定する。古いサーバーの有効利用に最適」
で構築したCentOSのLinuxサーバーを利用します。
Active Directoryの環境については、Active Directoryの構築手順を紹介した記事
「Windows Server 2016でActive Directoryにドメインコントローラーを追加する。故障や障害に強い構成を作成」
で構築したWindowsドメイン環境を前提にしています。

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

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

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

目次

1.環境と構成

本ブログ記事のWindowsドメイン構成は2台のドメインコントローラーが配置されている前提になります。共にグローバルカタログとして設定されており、ローカルDNSを管理するためのDNSサーバーが稼働しています。
構成に関する詳細は、記事
>「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コマンドを以下のように実行します。

以下が結果になります。

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

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

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

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

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

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

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

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

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

上記から”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がインストールされている場合、本手順は不要です。

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

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

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

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

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

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

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

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

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

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

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

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

上記のように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エディタで設定ファイルを開きます。

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

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

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

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

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

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

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

5-3.時刻同期の確認

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

上記のように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ドメインの環境に応じて変更されます。デフォルトのファイルは以下の通りです。

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

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

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

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

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

9.sssdの設定変更

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10-2.authconfigのテスト

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

11.sssdの起動

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

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

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

12.sssdの自動起動設定

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15.まとめ

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

関連する記事


Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク