実際の課題:サーバーが増えたのに管理がカオス状態になったとき
新しいユーザーを追加するたびに各サーバーへSSHで入って作業した経験はありませんか?あるいは、退職した社員のアカウントが15台の異なるサーバーに残り続けているという状況を対処したことは?これは、インフラが急速に拡大し始めた小規模チームで非常によく見られる問題です。
自分もまさにこの状況に直面しました。会社がサーバーを3台から12台へ、たった6か月で拡張したときのことです。/etc/passwdの手動管理やSSHキーのコピー&ペーストでのユーザー管理は、最初のセキュリティインシデントを招く典型的な失敗パターンです。
FreeIPAはまさにこの問題を解決するために生まれました。LDAP、Kerberos、DNS、Certificate Authorityを単一パッケージに統合したオープンソースのIdentity Managementスタックです。Red HatはRHELのIdMの基盤として採用しており、FedoraはFreeIPAの開発と最新機能テストの場となっています。
FreeIPAで何ができるのか?
インストール手順に入る前に、FreeIPAで何ができるか、そしてより重要なこととしてできないことを把握しておきましょう:
- 集中型ユーザー管理:一か所でユーザーを作成・削除すれば、ドメインに参加済みのすべてのマシンに即時反映
- シングルサインオン(SSO):一度ログインすれば、Kerberosチケットを通じて複数のサービスを利用可能
- ホストベースアクセス制御(HBAC):どのユーザーがどのサーバーにSSHできるかを定義
- 集中型Sudoポリシー:各マシンの
/etc/sudoersを編集せずにsudo権限を一元管理 - DNS統合:自分のドメインの内部DNSを管理
- 証明書管理:内部CA、証明書の自動発行と失効
FreeIPAは複雑なハイブリッドクラウド環境には適していません。その場合はKeycloakまたはFreeIPA + AD Trustの検討が必要です。また、WebアプリにOAuth2/OIDCが必要な場合は、OktaのようなパブリックIdPの代替にはなりません。
FreeIPA Serverのインストール
システム要件
FreeIPAは多数のサービスを同時に実行するため、リソース消費が多めです。最低限必要なスペックは以下の通りです:
- RAM:2GB(本番環境では4GB推奨)
- CPU:2コア
- ディスク:20GB以上(LDAPデータベースはオブジェクト数に応じて増加)
- ホスト名が解決可能であること — これが最もよく見落とされるポイントです
ホスト名とDNSの準備
FreeIPAはホスト名とDNSに非常に敏感です。このステップを省略するとインストールがうまくいきません:
# ホスト名をFQDN形式で設定する
hostnamectl set-hostname ipa.lab.internal
# ホスト名が解決できるか確認する
hostname -f
# 出力は次のようになるはず: ipa.lab.internal
# DNSサーバーがない場合は /etc/hosts に追加する
echo "192.168.1.100 ipa.lab.internal ipa" >> /etc/hosts
# 確認する
ping -c 1 ipa.lab.internal
パッケージのインストール
# まずシステムをアップデートする
dnf update -y
# DNSサポート付きFreeIPA Serverをインストールする
dnf install -y freeipa-server freeipa-server-dns
# 必要なサービスのファイアウォールを開放する
firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,kerberos,kpasswd,http,https,ntp}
firewall-cmd --reload
インストーラーの実行
最も重要なステップです。FreeIPAにはインタラクティブなインストーラーが用意されており、ホスト名の検証、DNSフォワード/リバース確認を自動で行い、インストール開始前に各パラメーターを確認します:
ipa-server-install \
--domain=lab.internal \
--realm=LAB.INTERNAL \
--ds-password=YourDirectoryPassword \
--admin-password=YourAdminPassword \
--setup-dns \
--forwarder=8.8.8.8 \
--forwarder=1.1.1.1 \
--auto-reverse \
--unattended
このプロセスには約5〜10分かかります。Directory Server(389-ds)、Kerberos KDC、Apache httpd、DNS(BIND)、NTP、Certificate Authority(Dogtag)のインストールと設定が行われます。
対話形式の質問を省略するために--unattendedオプションをよく使います。初回は、どんな項目が確認されるかを把握するためにこのフラグを外して実行するのがおすすめです。設定される各コンポーネントへの理解が深まります。
インストール後の設定
Kerberosチケットの取得と管理開始
# adminのチケットを取得する
kinit admin
# インストール時に設定したadminパスワードを入力する
# チケットを確認する
klist
# Web UIにアクセスする
# https://ipa.lab.internal/ipa/ui/
FreeIPAのWeb UIは直感的に操作できます。ただし、大量の操作やオンボーディングプロセスのスクリプト化が必要な場合は、CLIの方がはるかに効率的です。
ユーザーとグループの作成
# 新しいユーザーを作成する
ipa user-add trungnguyen \
--first=Trung \
--last=Nguyen \
[email protected] \
--shell=/bin/bash
# パスワードを設定する
ipa passwd trungnguyen
# DevOpsチーム用グループを作成する
ipa group-add devops --desc="DevOps Engineers"
# ユーザーをグループに追加する
ipa group-add-member devops --users=trungnguyen
ホストベースアクセス制御(HBAC)の設定
HBACはFreeIPAで最も気に入っている機能です。各サーバーに入って権限を設定する代わりに、中央でルールを一度定義すれば、エンロール済みのすべてのマシンに即時反映されます:
# まず、デフォルトの「allow_all」ルールを無効化する(範囲が広すぎるため)
ipa hbacrule-disable allow_all
# ルールを作成する: devopsのみ本番サーバーへのSSHを許可する
ipa hbacrule-add allow_devops_prod \
--desc="Allow devops team to access production servers"
# ルールにSSHサービスを追加する
ipa hbacrule-add-service allow_devops_prod --hbacsvcs=sshd
# ルールにdevopsグループを追加する
ipa hbacrule-add-user allow_devops_prod --groups=devops
# ルールにホストを追加する(ホストのエンロール後)
ipa hbacrule-add-host allow_devops_prod --hosts=prod-web-01.lab.internal
集中型Sudoポリシー
# devops用sudoルールを作成する — systemctlコマンドの実行を許可する
ipa sudorule-add devops_systemctl_rule
# 許可するコマンドを追加する
ipa sudocmd-add /usr/bin/systemctl
ipa sudorule-add-allow-command devops_systemctl_rule \
--sudocmds=/usr/bin/systemctl
# devopsグループに適用する
ipa sudorule-add-user devops_systemctl_rule --groups=devops
# 全ホストに適用する
ipa sudorule-add-host devops_systemctl_rule --hosts=ALL
クライアントをFreeIPAドメインにエンロール
他のサーバーで集中認証を利用するには、FreeIPAクライアントをインストールする必要があります:
# クライアントマシン(Fedora/RHELの場合)
dnf install -y freeipa-client
# ドメインにエンロールする
ipa-client-install \
--domain=lab.internal \
--server=ipa.lab.internal \
--realm=LAB.INTERNAL \
--principal=admin \
--password=YourAdminPassword \
--mkhomedir \
--unattended
# エンロール後、IPAのユーザーが解決できるか確認する
id trungnguyen
# 出力例: uid=1234567890(trungnguyen) gid=1234567890(trungnguyen) groups=...
確認とモニタリング
実行中のサービスを確認する
# 全FreeIPAサービスのステータス概要を確認する
ipactl status
# 出力例:
# Directory Service: RUNNING
# krb5kdc Service: RUNNING
# kadmin Service: RUNNING
# named Service: RUNNING
# httpd Service: RUNNING
# ipa-custodia Service: RUNNING
# pki-tomcatd Service: RUNNING
# ipa-otpd Service: RUNNING
エンドツーエンドの認証テスト
# 実際に適用する前にHBACルールをテストする
ipa hbactest \
--user=trungnguyen \
--host=prod-web-01.lab.internal \
--service=sshd
# どのルールがマッチし、Allow/Denyのどちらになるかが表示される
# Kerberos認証をテストする
kinit trungnguyen
klist
# LDAPクエリをテストする
ldapsearch -x -H ldap://ipa.lab.internal \
-b "dc=lab,dc=internal" \
-D "uid=admin,cn=users,cn=accounts,dc=lab,dc=internal" \
-W "(uid=trungnguyen)"
ログとモニタリング
# Directory Serverのログを確認する
journalctl -u dirsrv@LAB-INTERNAL -f
# Kerberos KDCのログ
journalctl -u krb5kdc -f
# Apacheのログ(Web UI + API)
journalctl -u httpd -f
# レプリケーションの確認(レプリカがある場合)
ipa-replica-manage list
ipa-replica-manage status
バックアップとリカバリー
バックアップなしでIPAサーバーがクラッシュした際の痛い教訓から学んだこと:トラブルが起きてからでは遅い。最初から毎晩バックアップを実行するcronジョブを設定しておきましょう。
# フルバックアップ(ファイル+データ、通常500MB〜1GB程度)
ipa-backup --gpg --gpg-keyring=/root/ipa-backup-key
# 現在のバックアップ一覧を確認する
ls -lh /var/lib/ipa/backup/
# 必要な場合はリストアする
ipa-restore /var/lib/ipa/backup/ipa-full-2026-04-28-00-00-00
実運用上の注意点
FreeIPAを本番環境で運用してきた経験から、覚えておくべき重要なポイントをまとめます:
- Kerberosチケットの有効期限:デフォルトでは24時間後に期限切れとなります。長時間実行するジョブはポリシーの見直しまたはkeytabの利用を検討してください
- 時刻同期は必須:Kerberosは5分以上の時刻のずれを許容しません。すべてのマシンがIPAサーバーにNTP同期されていることを確認してください
- 高可用性のためのレプリカ:IPAサーバーがダウンすると認証機能が完全に停止します。本番環境では少なくとも2台のレプリカが必要です
- SELinuxとFreeIPA:FreeIPAはSELinux enforcing環境でも問題なく動作します。最初からSELinuxを正しく考慮して設計された数少ないエンタープライズアプリケーションの一つです
Fedoraをメインの開発マシンとして2年間使っており、パッケージの更新速度には非常に満足しています。FedoraのFreeIPAはRHELよりも数か月先行しています。本番RHELに展開する前にFedoraで新機能を検証するワークフローは、非常に合理的なアプローチです。

