「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設定の画面例です。

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サーバーがコンピューターオブジェクトに登録されていることを確認します。

ドメインユーザーログイン確認
ドメインユーザーでRHELサーバーにログインできることを確認します。
ログインユーザー名は「<ドメインユーザー名>@<ドメイン名>」を指定します。本書では「LinuxUser01@example.com」を指定します。


(オプション)ドメイン参加後のチューニング
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サーバーがコンピューターオブジェクトから削除されていることを確認します。

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

参考URL
本記事に関する参考URLを以下に記載します。
SSSDとSamba Winbindの比較
- Overview of Direct Integration Options
- SSSD vs Winbind
- 第1章 SSSD を使用した RHEL システムから AD への直接接続 | RHEL システムと Windows Active Directory を直接統合 | Red Hat Enterprise Linux | 9 | Red Hat Documentation
ドメイン参加とユーザー管理の仕組み
- Basic Prechecks Steps: RHEL Join With Active Directory using 'adcli', 'realm' and 'net' commands - Red Hat Customer Portal
- アイデンティティ管理(3)統合における着眼点 - 赤帽エンジニアブログ
- アイデンティティ管理(4)直接統合オプションの概要 - 赤帽エンジニアブログ
ドメイン参加通信要件
おわりに
RHELサーバーでドメイン参加するための手順を説明しました。
RHELサーバーによるドメイン参加をこれから始める方にも、すでにドメイン参加されている方にも、本記事が少しでもお役にたてれば幸いです。
山﨑 優美(日本ビジネスシステムズ株式会社)
ハイブリッドクラウド本部に所属。Windows Server・Linux、どちらのOSでもさわれるインフラエンジニアです。3児のママも兼務しています。
担当記事一覧