SSSDとRealmdを使用してCentOS Stream 9をWindows Active Directoryにドメイン参加させる方法

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

システム拡大に伴うアカウント管理の悩み

当初、私のシステムはWebサーバーとデータベースサーバーを合わせて3〜5台程度でした。useraddコマンドでユーザーを作成し、手動でパスワードを設定する運用でも、まだ「余裕」がありました。しかし、サーバーが30ノードに達し、10人のDevOpsチームで頻繁にメンバーの入れ替えが発生するようになると、限界を感じ始めました。退職者が出るたびに、すべてのアカウントを削除するために各マシンにSSHでログインしなければなりませんでした。1台でも忘れてしまうと、重大なセキュリティホールになります。

既存のWindows Active Directory (AD) インフラを活用するのが、最も合理的な方向性です。ADアカウントを使ってCentOS Stream 9に直接ログインできるのに、なぜ2つの個別のユーザーシステムを管理する必要があるのでしょうか?この方法により、パスワードポリシーを統一し、ドメインコントローラー上でクリック一つでアクセス権を剥奪できるようになります。

初心者の多くは、WinbindやSambaの手動設定という「泥沼」に陥りがちです。その場合、設定ファイルは非常に長くなり、極めてエラーが発生しやすくなります。現在、CentOS 9において最も軽量で安定したソリューションは、RealmdSSSDの組み合わせです。SSSDは通訳のような役割を果たし、LinuxがMicrosoftの認証プロトコルをスムーズに理解し、通信できるようにします。

SSSDとRealmdのメリット

かつて私は自前でLDAPを構築しようと苦労しましたが、Windowsの複雑なフォレスト構造に直面すると非常に厄介でした。Realmdは、ドメインを自動的に検出し、必要な依存パッケージをインストールすることで、この問題を解決します。一方、SSSDは優れたキャッシング機能を備えています。ドメインコントローラーへのネットワークが不安定になっても、保存された情報(キャッシュされた資格情報)を使用してログインを継続でき、セッションが切れることはありません。

システムの準備:このステップを飛ばさないでください

経験上、ドメイン参加に失敗するケースの90%はDNS時刻同期が原因です。これら2つの要素が不正確だと、デバッグが困難な汎用的なエラーメッセージしか表示されません。

1. DNSをドメインコントローラーに向ける

CentOSサーバーはADのドメイン名を解決できる必要があります。/etc/resolv.confファイルを確認するか、nmcliを使用してください。

# nmcliを使用してDNSを更新する
nmcli connection modify eth0 ipv4.dns "192.168.1.10" 
nmcli connection up eth0

ドメインへのpingコマンドが正しい結果を返すことを確認してください:

ping itfromzero.local

2. 厳密な時刻同期

Kerberosプロトコルは、クライアントとサーバー間の時刻のズレが5分を超えると認証を拒否します。CentOS Stream 9では、chronyがデフォルトの最適な選択肢です:

dnf install chrony -y
systemctl enable --now chronyd

3. FQDN形式のホスト名を設定する

Linuxマシンの識別を明確にすることで、ADでの管理が容易になります。

hostnamectl set-hostname srv-web-01.itfromzero.local

ソフトウェアパッケージのインストール

以下のコマンドを実行して、必要な接続ツールをインストールします:

dnf install realmd sssd adcli samba-common-tools oddjob oddjob-mkhomedir sssd-ad -y
  • realmd: ドメイン参加の調整を行います。
  • sssd: 認証の処理とユーザーIDの保存を行います。
  • oddjob-mkhomedir: 初回ログイン時に自動的に/home/userディレクトリを作成します。

ドメイン参加の実行

まず、LinuxがADを認識できているか「探索」してみましょう:

realm discover itfromzero.local

問題がなければ、参加コマンドを実行します。ドメインの管理者権限を持つアカウントを用意してください:

realm join -U Administrator itfromzero.local

要求されたらパスワードを入力します。エラーが表示されなければ、あなたのマシンは正式にActive Directoryの「Computers」リストに含まれたことになります。

SSSD設定の最適化

デフォルトでは、ログイン時にフルネームのuser@domainを入力する必要があります。これをusernameだけで済むように短縮するには、/etc/sssd/sssd.confファイルを編集します:

vi /etc/sssd/sssd.conf

use_fully_qualified_names = True の行を False に変更します。その後、サービスを再起動します:

systemctl restart sssd

ユーザーが作業環境でエラーにならないよう、ホームディレクトリの自動作成機能を有効にします:

authselect select sssd with-mkhomedir --force
systemctl enable --now oddjobd && systemctl restart oddjobd

確認とSudo権限の付与

idコマンドを使用して、LinuxがWindowsからのユーザーを認識しているか確認します:

id username_ad

管理グループ(例:AD内のIT_Adminsグループ)にroot権限を付与するには、sudo設定ファイルを作成します:

vi /etc/sudoers.d/ad-admins

以下の行を追加します(グループ名にスペースが含まれる場合はバックスラッシュを使用してください):

%[email protected] ALL=(ALL) ALL

実践的な教訓:SSSDが「ストライキ」を起こしたとき

実際のプロジェクトで、realm listは成功を報告しているのに、ユーザーがログインできないというエラーに遭遇したことがあります。/var/log/sssd/のログを確認したところ、Windowsファイアウォールがポート389 (LDAP) と445 (SMB) をブロックしていることが判明しました。LinuxサーバーのIP帯域に対してこれらのポートを開放するだけで、すべてがスムーズに動作するようになりました。

注意:仮想マシンをクローン(テンプレート化)する場合は、クローンを作成する前にrealm leaveを実行してください。そうしないと、新しいマシンのSIDが重複し、競合が発生してドメインから頻繁に切断される原因になります。

まとめ

CentOS Stream 9をActive Directoryに統合することは、インフラをプロフェッショナル化するための最適な方法です。もう大量のパスワードを覚えたり、手動でユーザーを削除したりする必要はありません。すべてが一箇所に集約されます。CentOS 7からバージョン9へシステムをアップグレードする場合は、管理をより楽にするために、ぜひこのプロセスを適用してください。

Share: