そんな状況は、WindowsとLinuxが混在する企業環境では珍しくありません。
この記事では、
realmdとsssdを使ってLinuxサーバーをActive Directoryに参加させる手順を、RHEL 9.4 / Rocky Linux 9.4の実機で確認した結果をもとに解説します。realm discoverによるADドメインの検出から、realm joinでのドメイン参加、sssd.confの調整、ドメインユーザーのSSHログイン確認、sudoersへの権限付与、よくあるトラブルの切り分けまで、一連の流れを網羅します。
この記事のポイント
・realmd + sssdの組み合わせでLinuxをWindowsドメインに参加できる
・realm joinの前にDNS疎通と時刻同期(5分以内のずれ)の確認が必須
・sssd.confとoddjob-mkhomedirでホームディレクトリを自動作成する
・トラブルは/var/log/sssd/sssd_ドメイン名.logで原因を切り分ける
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜLinuxをActive Directoryに参加させるのか
企業環境では、Windows ServerベースのActive Directory(AD)で社員アカウントを一元管理しているケースが多いです。その環境にLinuxサーバーを追加するとき、ローカルアカウントを別途管理するのは運用コストが高くなります。realmdとsssdを使えば、LinuxサーバーをADドメインに参加させ、ADのユーザー/パスワードでSSHログインできるようになります。具体的には次のことが実現できます。・ADのユーザーアカウントでSSHログインできる
・ADのパスワードポリシーがLinuxにも適用される
・ユーザーの追加・削除をADで一元管理できる
・sudoersでADグループに権限を付与できる
前提条件と事前確認
realm joinの前に次の3点を確認してください。この確認を怠るとドメイン参加で確実にエラーが発生します。1. ADドメインコントローラへのDNS名前解決
realmdはDNSでドメインコントローラを検出します。Linuxサーバーの/etc/resolv.confのnameserverに、ADのDNSサーバー(通常はドメインコントローラ)のIPアドレスを設定しておく必要があります。# /etc/resolv.confの確認 [root@rhel9srv01 ~]# cat /etc/resolv.conf # Generated by NetworkManager search ad.example.com nameserver 192.168.1.10 # ADのDNSに対してSRVレコードが引けるか確認 [root@rhel9srv01 ~]# host -t SRV _ldap._tcp.ad.example.com _ldap._tcp.ad.example.com has SRV record 0 100 389 dc01.ad.example.com.
hostコマンドでSRVレコードが返ってくれば、DNS疎通は問題ありません。返ってこない場合はLinuxのDNS設定を見直してください。Linux DNS 設定の基本も参考にしてください。2. 時刻同期の確認(Kerberosの要件)
Kerberos認証は、クライアントとKDC(Key Distribution Center = ドメインコントローラ)の時刻が5分以内でないと認証が失敗します。chronyc trackingで時刻同期状態を確認してください。[root@rhel9srv01 ~]# chronyc tracking Reference ID : C0A8010A (192.168.1.10) Stratum : 3 System time : 0.000043521 seconds fast of NTP time Last offset : +0.000041237 seconds RMS offset : 0.000032891 seconds Frequency : 2.487 ppm fast Residual freq : +0.002 ppm Skew : 0.034 ppm Root delay : 0.000328 seconds Root dispersion : 0.000107 seconds Update interval : 64.5 seconds Leap status : Normal
3. ホスト名の確認
Linuxサーバーのホスト名はFQDNでADのコンピュータアカウントとして登録されます。あらかじめ設定しておきましょう。[root@rhel9srv01 ~]# hostnamectl Static hostname: rhel9srv01.ad.example.com Icon name: computer-server Chassis: server Machine ID: a1b2c3d4e5f67890a1b2c3d4e5f67890 Boot ID: f1e2d3c4b5a6f1e2d3c4b5a6f1e2d3c4 Operating System: Red Hat Enterprise Linux 9.4 (Plow) CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos Kernel: Linux 5.14.0-427.16.1.el9_4.x86_64 Architecture: x86-64
必要パッケージのインストール
まずrealmdをインストールしてからrealm discoverを実行すると、追加で必要なパッケージ一覧が表示されます。# realmdをインストール [root@rhel9srv01 ~]# dnf install -y realmd # realm discoverでADドメインを検出し、必要パッケージを確認 [root@rhel9srv01 ~]# realm discover ad.example.com ad.example.com type: kerberos realm-name: AD.EXAMPLE.COM domain-name: ad.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
required-packageに列挙されたパッケージを一括インストールします。[root@rhel9srv01 ~]# dnf install -y oddjob oddjob-mkhomedir sssd adcli samba-common-tools
realm joinでADドメインに参加する
1. ドメイン参加コマンドの実行
realm joinコマンドでドメイン参加を実行します。--userにはADの管理者アカウント、またはコンピュータ追加権限を持つアカウントを指定します。[root@rhel9srv01 ~]# realm join --user=Administrator ad.example.com Password for Administrator: (ADのAdministratorパスワードを入力) [root@rhel9srv01 ~]# echo $? 0
0であれば成功です。2. 参加後の状態確認
realm listコマンドで参加状態を確認します。[root@rhel9srv01 ~]# realm list ad.example.com type: kerberos realm-name: AD.EXAMPLE.COM domain-name: ad.example.com configured: kerberos-member login-formats: %U@ad.example.com login-policy: allow-realm-logins permitted-logins: permitted-groups:
configured: kerberos-memberと表示されていれば、ドメイン参加は完了です。login-formatsの%U@ad.example.comがSSHログイン時のユーザー名形式になります。3. ドメインユーザーの解決確認
idコマンドでADのユーザー情報が取得できるか確認します。[root@rhel9srv01 ~]# id testuser@ad.example.com uid=1234455001(testuser@ad.example.com) gid=1234455001(testuser@ad.example.com) groups=1234455001(testuser@ad.example.com),1234455513(domain users@ad.example.com)
sssd.confを調整する
realm joinが成功すると/etc/sssd/sssd.confが自動生成されます。多くの場合はそのままで動作しますが、実務でよく必要になる設定を2点解説します。1. ホームディレクトリの自動作成
初回ログイン時にホームディレクトリを自動作成するため、oddjob-mkhomedirを有効にします。これを設定しないと「Permission denied」でログインできません。# oddjobによるホームディレクトリ自動作成を有効化 [root@rhel9srv01 ~]# authselect enable-feature with-mkhomedir [root@rhel9srv01 ~]# systemctl enable oddjobd --now Created symlink /etc/systemd/system/multi-user.target.wants/oddjobd.service ... # sssdも確認 [root@rhel9srv01 ~]# systemctl status sssd * sssd.service - System Security Services Daemon Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; preset: enabled) Active: active (running) since Sat 2026-09-12 10:15:03 JST; 5min ago
2. ログインを特定グループに制限する(任意)
全ADユーザーにSSHログインを許可するのではなく、特定のADグループのメンバーだけに絞ることができます。# 特定のグループ「linux-users」だけに許可する [root@rhel9srv01 ~]# realm permit --groups linux-users@ad.example.com # 設定後の確認 [root@rhel9srv01 ~]# realm list ad.example.com type: kerberos realm-name: AD.EXAMPLE.COM domain-name: ad.example.com configured: kerberos-member login-formats: %U@ad.example.com login-policy: allow-permitted-logins permitted-logins: permitted-groups: linux-users@ad.example.com
realm permit --allを実行します。ドメインユーザーのSSHログイン確認
自分のPC(クライアント)からSSHで接続します。ユーザー名はユーザー名@ドメイン名の形式で指定します。# クライアントPCからSSH接続(@ドメイン名 を付けてログイン) $ ssh "testuser@ad.example.com"@192.168.1.100 testuser@ad.example.com@192.168.1.100's password: (ADパスワードを入力) # 初回ログインはホームディレクトリが自動作成される Creating home directory for testuser@ad.example.com. Last login: Sat Sep 12 10:30:00 2026 from 192.168.1.50 # ログイン後に自分のUID/GIDを確認 [testuser@ad.example.com@rhel9srv01 ~]$ id uid=1234455001(testuser@ad.example.com) gid=1234455001(testuser@ad.example.com) groups=1234455001(testuser@ad.example.com),1234455513(domain users@ad.example.com)
sudoersでADユーザー・グループに権限を付与する
ドメインユーザーやADグループにsudo権限を付与するには、/etc/sudoers.d/にファイルを追加します。visudoで/etc/sudoersを直接編集してもよいですが、設定を分離した方が管理しやすいです。# /etc/sudoers.d/以下に設定ファイルを作成する [root@rhel9srv01 ~]# visudo -f /etc/sudoers.d/ad-linux-admins # ファイルの内容(ADグループ「linux admins」にsudo ALL権限を付与する例) # グループ名のスペースはバックスラッシュでエスケープする %linux\ admins@ad.example.com ALL=(ALL) ALL # 特定のユーザーだけに権限を付与する場合 testuser@ad.example.com ALL=(ALL) NOPASSWD: /usr/bin/systemctl
トラブルシュート|参加・認証できない時の切り分け
realm joinが失敗する場合
よくあるエラーと原因を以下にまとめます。| エラーメッセージ | 原因と対処 |
|---|---|
| DNS lookup failed | ADのDNSサーバーを/etc/resolv.confのnameserverに設定する |
| Clock skew too great | LinuxとADの時刻が5分以上ずれている。chronydのNTPサーバーをADに向ける |
| Insufficient permissions | コンピュータ追加権限がないアカウントを使っている。AdministratorまたはDomain Adminsを使う |
| Already joined to this domain | 既にドメイン参加済み。realm leaveで一度離脱してから再参加する |
| Could not find a configured realm | realm discoverで検出できていない。DNS疎通とSRVレコードを再確認する |
sssdログで原因を特定する
ドメイン参加後にSSHログインできない場合は、sssdのログを確認します。# sssdのメインログ [root@rhel9srv01 ~]# tail -100 /var/log/sssd/sssd.log # ドメイン固有のログ(認証失敗の詳細はここ) [root@rhel9srv01 ~]# tail -100 /var/log/sssd/sssd_ad.example.com.log # Kerberosチケットが取得できるか直接確認する [root@rhel9srv01 ~]# kinit testuser@AD.EXAMPLE.COM Password for testuser@AD.EXAMPLE.COM: [root@rhel9srv01 ~]# klist Credentials cache: API:a1b2c3d4-e5f6-7890-abcd-ef1234567890 Principal: testuser@AD.EXAMPLE.COM Issued Expires Principal Sep 12 10:30:00 2026 Sep 12 20:30:00 2026 krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM
kinitでKerberosチケットが取得できる場合、Kerberos認証そのものは動作しています。SSHログインができない場合は/var/log/secure(RHEL系)または/var/log/auth.log(Ubuntu系)も確認してください。ドメインから離脱して再参加する
設定を最初からやり直したい場合はrealm leaveでドメインから離脱します。# ドメインから離脱する [root@rhel9srv01 ~]# realm leave ad.example.com # 離脱後は realm list が空になる [root@rhel9srv01 ~]# realm list (何も表示されない)
本記事のまとめ
| やること | コマンド・ファイル |
|---|---|
| DNS疎通確認 | host -t SRV _ldap._tcp.ドメイン名 |
| 時刻同期確認 | chronyc tracking |
| realmdのインストール | dnf install -y realmd |
| 必要パッケージを確認 | realm discover ドメイン名 |
| 必要パッケージを一括インストール | dnf install -y oddjob oddjob-mkhomedir sssd adcli samba-common-tools |
| ADドメインに参加 | realm join --user=Administrator ドメイン名 |
| 参加状態の確認 | realm list |
| ドメインユーザーの解決確認 | id ユーザー名@ドメイン名 |
| ホームディレクトリ自動作成を有効化 | authselect enable-feature with-mkhomedir |
| ログインを特定グループに制限 | realm permit --groups グループ名@ドメイン名 |
| ドメイン離脱 | realm leave ドメイン名 |
realm joinコマンド自体はシンプルですが、前提のDNSと時刻同期の準備が不十分だと確実に詰まります。事前確認を丁寧にやっておけば、参加そのものはスムーズに終わります。
Linuxサーバー管理セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxのPAM設定入門|/etc/pam.d/の仕組みとpam_pwquality・pam_faillockでセキュリティを設計する方法
- この記事の属するカテゴリ:セキュリティへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます