System Security Services Daemon(SSSD)によるRed Hat Enterprise Linuxのドメイン参加

「Active Directoryへのドメイン参加」というと、Windows ServerやWindows 11などのクライアントが真っ先に思いつきますが、実はRed Hat Enterprise Linux(以下、RHEL)もドメイン参加が可能です。

ドメイン参加をしたRHELサーバーは、内部DNSによる名前解決や、ドメインユーザーでのログインなどが可能となります。

本記事では、RHELサーバーでドメイン参加する手順を説明します。

SSSDとSamba Winbind

RHELサーバーをドメイン参加させる方法には、大きく以下の2種類があります。

  • System Security Services Daemon(以下、SSSD)
    • ユーザーアカウントやグループ情報を管理するLinuxサービス
    • Kerberos認証やLDAP認証を使用してActive Directoryと統合する
    • Samba Winbindと比較して新しい仕組みであり、ドメインユーザー管理を効率的に行うことが可能
  • Samba Winbind
    • Windowsドメインからユーザーアカウントやグループの情報をLinuxにマッピングするサービス
    • 従来からある仕組みであり、LDAP認証や Kerberos認証のほかNTLM認証をサポート

SSSDはより新しい仕組みであり、機能追加や改善が行われる頻度が高いため、通常はSSSDを選択することをおすすめします。

ただし、既にSamba Winbindを使用している既存環境がある場合やNTLM認証が必要なシナリオでは、Samba Winbindの選択を検討する必要があります。

本記事ではSSSDを使ってドメイン参加をします。

本記事の前提条件

本記事における前提条件を以下に記載します。

  • RHEL9とAlmaLinux9で動作検証を実施済み
  • Active Directory環境はWindows Server 2022で構築済み
  • ドメインユーザーのID管理方法には大きくIDマッピングとPOSIX属性があるが、本記事ではIDマッピングを使用
    • それぞれの機能の詳細は文末の参考URLを参照
  • Active Directoryに関する各種設定値は下表の値を使用
項目
ドメイン名 example.com
ドメインコントローラー IPアドレス 10.0.0.4
ドメインコントローラーFQDN名 test-muit-AD01.example.com
ドメイン管理者アカウント名 demoadmin
ドメインユーザー名 LinuxUser01
RHELサーバーホスト名 testvm

ドメイン参加

事前準備

通信要件

下表に記載した通信がドメイン参加に必要です。ドメインコントローラー、およびネットワーク機器側で通信許可設定を行います。

通信方向 宛先ポート 用途
RHEL→ドメインコントローラー 53/tcp, 53/udp DNS
RHEL→ドメインコントローラー 389/tcp, 389/udp LDAP
RHEL→ドメインコントローラー 636/tcp LDAPS
RHEL→ドメインコントローラー 88/tcp, 88/udp Kerberos
RHEL→ドメインコントローラー 464/tcp, 464/udp Kerberos change/set password
RHEL→ドメインコントローラー 3268/tcp LDAP Global Catalog
RHEL→ドメインコントローラー 3269/tcp LDAP Global Catalog SSL
RHEL→ドメインコントローラー 123/udp NTP
RHEL→ドメインコントローラー 135/tcp Remote Procedure Call(RPC)
RHEL→ドメインコントローラー 137/udp NetBIOS-ns
RHEL→ドメインコントローラー 138/udp NetBIOS-dgm
RHEL→ドメインコントローラー 139/tcp NetBIOS-ssn
RHEL→ドメインコントローラー 445/tcp Server Message Block(SMB)
RHEL→ドメインコントローラー 9389/tcp AD DS Web Services
ドメインコントローラーの情報

ドメイン参加に必要な以下情報を事前に確認します。

  • ドメインコントローラーのIPアドレス(本記事では「10.0.0.4」)
  • ドメイン管理者アカウント名(本記事では「demoadmin」)
  • ドメイン管理者アカウントのパスワード
  • ドメイン名(本記事では「example.com」)
OS設定

以下の作業はドメイン参加するRHELサーバーで実施します。操作はすべてroot権限で実施します。

1. 以下のコマンドを実行し、DNSの参照先でドメインコントローラーを指定する。「eth0」はRHELサーバーのNICの名前で置き換える。

# nmcli con mod eth0 ipv4.dns 10.0.0.4
<実行結果>
出力無し
# systemctl reload NetworkManager
<実行結果>
出力無し

※Azure VMの場合、DNSの設定はAzure PortalからAzure VMのNIC、もしくはAzure VMが所属するVNetに対して実施します。以下はDNS設定の画面例です。

カスタムDNS設定

2. 以下のコマンドを実行し、DNSの参照先がドメインコントローラーを指定していることを確認する。

# cat /etc/resolve.conf
<実行結果>
# Generated by NetworkManager
search reddog.microsoft.com
nameserver 10.0.0.4     ←★ドメインコントローラーを指定していることを確認

3. 以下のコマンドを実行し、NTPの参照先でドメインコントローラーを指定する。

# vi /etc/chrony.conf
<修正箇所>
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
###pool xxxxxx iburst     ←★既存設定をコメントアウト
pool test-muit-AD01.example.com iburst     ←★ドメインコントローラーを指定
(以下略)
# systemctl restart chronyd
<実行結果>
出力無し

4. 以下のコマンドを実行し、RHELサーバーのホスト名をFQDN名で指定する。

# hostnamectl set-hostname testvm.example.com
<実行結果>
出力無し
# hostnamectl
<実行結果>
 Static hostname: testvm.example.com    ←★RHELサーバーのFQDN名が表示される
(以下略)

5. 以下のコマンドを実行し、ドメイン参加に必要なrpmパッケージをインストールする。

# dnf install samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
<実行結果>
(インストールされるパッケージ情報が表示される)
これでよろしいですか? [y/N]: y   ←★インストールされるパッケージを確認後に[y]を入力して処理を続行
(中略)
Complete!
RHELサーバーとドメインコントローラー間の疎通確認

以下の作業はドメイン参加するRHELサーバーで実施します。操作はすべてroot権限で実施します。

疎通確認に問題がある場合、後続のドメイン参加が正常に実施できないため、ドメインコントローラー、RHELサーバー、ネットワーク機器など、環境内でサービスや通信の状態を再度確認してください。

1. 以下のコマンドを実行し、ドメインコントローラーに対して時刻同期していることを確認する。

※ 同期先名の頭に「*」がついていれば同期できています。

# chronyc sources
<実行結果>
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* test-muit-ad01.internal.>     4   6    17     5    -42us[  -45us] +/-   12ms     ←★ドメインコントローラー名の頭に*が表示される

2. 以下のコマンドを実行し、Active DirectoryのLDAPレコード、およびKerberosレコードに対してクエリーが実行できることを確認する。

※「NOERROR」が出力され、「ANSWER」の値が1以上であればクエリー結果は問題ありません。

# dig -t SRV _ldap._tcp.example.com
<実行結果>
; <<>> DiG 9.16.23-RH <<>> -t SRV _ldap._tcp.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57452     ←★「NOERROR」と出力される
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2     ←★「ANSWER」の値が1以上である
(以下略)
# dig -t SRV _kerberos._tcp.example.com
<実行結果>
; <<>> DiG 9.16.23-RH <<>> -t SRV _kerberos._tcp.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26043     ←★「NOERROR」と出力される
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2     ←★「ANSWER」の値が1以上である
(以下略)
# dig -t SRV _kerberos._udp.example.com
<実行結果>
; <<>> DiG 9.16.23-RH <<>> -t SRV _kerberos._udp.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5822     ←★「NOERROR」と出力される
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2    ←★「ANSWER」の値が1以上である
(以下略)

3. 以下のコマンドを実行し、ドメイン情報が参照できることを確認する。

# realm discover example.com
<実行結果>
example.com    ←★ドメイン名と関連情報が出力される
  type: kerberos
  realm-name: EXAMPLE.COM
  domain-name: example.com
  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

ドメイン参加実施

ドメイン参加手順を以下に記載します。

以下の作業はドメイン参加するRHELサーバーで実施します。操作はすべてroot権限で実施します。

1. 以下のコマンドを実行し、ドメイン管理者アカウントのパスワードを入力し、ドメイン参加を実施する。

※ 最後に「Successfully enrolled machine in realm」と表示されればドメイン参加は成功です。

# realm join example.com -U demoadmin -v
<実行結果>
 * Resolving: _ldap._tcp.example.com
 * Performing LDAP DSE lookup on: 10.0.0.4
 * Successfully discovered: example.com
Password for demoadmin@EXAMPLE.COM:    ←★ドメイン管理者アカウントのパスワードを入力し「Enter」キーを押下する
(中略)
 * Successfully enrolled machine in realm

※「Failed to join the domain」や「Couldn't join realm」と表示される場合はドメイン参加が失敗しているため、出力結果から原因を調査します。

<指定したアカウントにドメイン参加の権限が足りない場合の出力例>
Please check
    https://red.ht/support_rhel_ad
to get help for common issues.
 ! Insufficient permissions to join the domain
realm: Couldn't join realm: Insufficient permissions to join the domain
Please check
    https://red.ht/support_rhel_ad
to get help for common issues.

2. 以下のコマンドを実行し、現在参加しているドメインの情報が表示されることを確認する。

# realm list
<実行結果>
example.com    ←★ドメイン名と関連情報が出力される
  type: kerberos
  realm-name: EXAMPLE.COM
  domain-name: example.com
  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@example.com
  login-policy: allow-realm-logins

ドメイン参加後確認

Active Directory ユーザーとコンピューターの確認

「Active Directory ユーザーとコンピューター」画面にて、RHELサーバーがコンピューターオブジェクトに登録されていることを確認します。

Active Directory ユーザーとコンピューター画面
ドメインユーザーログイン確認

ドメインユーザーでRHELサーバーにログインできることを確認します。

ログインユーザー名は「<ドメインユーザー名>@<ドメイン名>」を指定します。本書では「LinuxUser01@example.com」を指定します。

Tera Termログイン画面

コンソールログイン画面

(オプション)ドメイン参加後のチューニング

SSSDのファイルを編集することで、ドメイン参加の状態をチューニングすることが可能です。以下にチューニング対象の設定項目と設定方法の例をいくつか説明します。

※ 作業はドメイン参加後のRHELサーバーで実施します。操作はすべてroot権限で実施します。

ドメインユーザーパスワード変更権限

SSSDが既定状態の場合、ドメインユーザーはRHELサーバーにログイン後、自身のパスワードを変更することが可能です。

ドメインユーザーのパスワード変更を禁止する場合、以下のコマンドを実行し、SSSDの設定を変更します。

# vi /etc/sssd/sssd.conf
<変更箇所>
[sssd]
domains = example.com
config_file_version = 2
services = nss, pam

[domain/example.com]
~(中略)~
access_provider = ad
chpass_provider = none   ←★この行を新規に追加する
# Systemctl restart sssd
<出力結果>
出力無し
GPOによる制御

SSSDが既定状態の場合、RHELサーバーにはGroup Policy Objects(以下、GPO)が適用されます。

※RHELサーバーに適用されるGPOの詳細は、後述の参考リンクを参照してください。

GPOによる制御を無効化する場合、以下のコマンドを実行しSSSDの設定を変更します。

# vi /etc/sssd/sssd.conf
<変更箇所>
[sssd]
domains = example.com
config_file_version = 2
services = nss, pam

[domain/example.com]
~(中略)~
access_provider = ad
chpass_provider = none
ad_gpo_access_control = disabled     ←★この行を新規に追加する
# Systemctl restart sssd
<出力結果>
出力無し

ドメイン離脱

ドメイン離脱実施

参加しているドメインから離脱する手順を説明します。

以下の作業はドメイン離脱するRHELサーバーで実施します。操作はすべてroot権限で実施します。

1. 以下のコマンドを実行し、ドメイン参加を実施する。

最後に「Successfully unenrolled machine from realm」と表示されることを確認する。

# realm leave example.com -U demoadmin -v
<実行結果>
Password for demoadmin@EXAMPLE.COM:    ←★ドメイン管理者アカウントのパスワードを入力し「Enter」キーを押下する
(中略)
 * Successfully unenrolled machine from realm

2. 以下のコマンドを実行し、ドメイン情報が表示されないことを確認する。

# realm list
<実行結果>
出力無し

Active Directory ユーザーとコンピューターの確認

「Active Directory ユーザーとコンピューター」画面にて、RHELサーバーがコンピューターオブジェクトから削除されていることを確認します。

Active Directory ユーザーとコンピューター確認

※RHELサーバー側でドメイン離脱が完了している場合でも、Active Directoryのコンピューターオブジェクトに情報が残っている場合があります。その場合、コンピューターオブジェクトから削除する必要があります。

コンピューターオブジェクト削除

参考URL

本記事に関する参考URLを以下に記載します。

SSSDとSamba Winbindの比較

ドメイン参加とユーザー管理の仕組み

ドメイン参加通信要件

おわりに

RHELサーバーでドメイン参加するための手順を説明しました。

RHELサーバーによるドメイン参加をこれから始める方にも、すでにドメイン参加されている方にも、本記事が少しでもお役にたてれば幸いです。

執筆担当者プロフィール
山﨑 優美

山﨑 優美(日本ビジネスシステムズ株式会社)

ハイブリッドクラウド本部に所属。Windows Server・Linux、どちらのOSでもさわれるインフラエンジニアです。3児のママも兼務しています。

担当記事一覧