皆さんこんにちは。 システム開発課の丸野です。
企業内で多数のLinuxサーバを運用していると、ユーザ管理について悩まされることが多いのではないでしょうか。Windows環境ではActive Directoryによる一元的なドメイン管理が一般的ですが、Linux環境ではそれに相当する仕組みを導入せず、個別管理になりがちです。 その結果、以下のような課題に頭を悩ませている方もいらっしゃるのではないでしょうか。
- 複数のLinuxサーバで個別にユーザ管理をしている
- 退職者が出るたびに全サーバのrootパスワードを変更している
- サーバごとにパスワードポリシーが統一されていない
- 適切な権限管理が出来ておらず、誰でもsudoできてしまう
Windows環境なら当たり前の一元管理が、なぜかLinuxになると「サーバごとに個別管理」という非効率かつリスクの高い運用になってしまうケースをよく見かけます。
今回は、これらの課題を解決できる「FreeIPA」によるディレクトリサービス構築について紹介します。
FreeIPAとは
FreeIPAは、Red Hat社が中心となって開発している、オープンソースのIDM(アイデンティティ管理)ソリューションであり、平たく言えば「Linux向けActive Directory」です。 FreeIPAは複数のオープンソースコンポーネントから成り立っています。
- 389 Directory Server
- LDAPディレクトリサービス
- MIT Kerberos
- シングルサインオンと強力な認証
- Dogtag Certificate System
- 証明書管理
- SSSD (System Security Services Daemon)
- クライアント側の認証とキャッシング
- BIND(オプション)
- ドメイン管理とサービスディスカバリ
これら複数の技術を個別に構築・連携させる手間なく、統合されたソリューションとして利用できるのが大きな魅力です。 また、シンプルながら必要十分のWebインターフェースから操作できるようになっています。
FreeIPAでできること
ユーザ管理の一元化
Linuxでは基本的に、サーバごとに個別のユーザーアカウントを作成・管理します。個人で利用したり、小規模な運用ではこれでも問題ありませんが、以下のような問題が発生しがちです。
- 新入社員が入るたびに全サーバでアカウント作成が必要
- 退職者が出るたびに全サーバでアカウント無効化が必要
- パスワード変更が全サーバで個別に必要
FreeIPAを導入すると、こういったユーザ管理を一元化できるようになります。 新入社員のアカウントを一箇所で作成すれば、グループ内の全サーバで即時有効になります。同様に、退職者のアカウントを無効化すれば即時アクセスが遮断されます。当然ながら、管理者のパスワード変更も即座に反映されます。
アクセス制御と権限管理の実現
Linux管理の運用上の問題から、rootパスワードを複数の管理者間で共有したり、必要以上に強力な権限を持つsudoersの設定を行ったりするといった、セキュリティのベストプラクティスに反する運用が行われがちです。 誰でもrootにsuできる状況だと、誰がどんな操作を行ったかの監査が困難になり、また担当者が退職した際には全サーバのrootパスワードを変更するという運用コストも発生しがちです。 FreeIPAを導入すると、以下のようなより安全な権限管理が実現できます
- グループ毎の権限管理の実現とログによる監査
- 職務に応じた必要最小限の管理権限のみを付与可能
- rootパスワードの共有をやめ、個人の責任を明確化
- 特定アカウントの即時無効化
これにより、セキュリティリスクの低減と運用コストの削減を同時に達成できます。
Sudoルールの一元管理
FreeIPAでは、Webインターフェースやコマンドラインツールを通じて、中央集権的にsudoルールを管理できます。これにより次のような事を実現可能になります。
- きめ細かなアクセス制御
- 特定のユーザーグループに対して、特定のホストでのみ、特定のコマンドだけを実行できるよう設定可能
- 役割ベースのアクセス制御
- 「Webサーバ管理者」「データベース管理者」などの役割に応じた適切な権限設定
例えば、Webサーバ管理者にはsystemctl restart httpd
の実行権限のみを付与し、データベース管理者にはデータベース関連のコマンドのみを実行できるよう設定するといった、職責に応じた最小権限の原則を実装しやすくなります。
ホストベースのアクセス制御(HBAC)
FreeIPAでは、HBACルールを設定することで、誰がどのサーバにどのようにアクセスできるかをきめ細かく制御できます。
- ユーザー/グループ、ホスト/ホストグループ、サービスの組み合わせでルールを定義
- 例:「開発チームはステージングサーバにSSHアクセス可能、本番サーバにはアクセス不可」
- 特定のサービスだけを許可/拒否することも可能
FreeIPAサーバを立ててみよう
FreeIPAの実際の構築手順について紹介します。OSはRocky Linux 9を想定します。
前提条件
- サーバ要件:
- CPU: 2コア以上
- メモリ: 4GB以上推奨(最低1.2GB)
- ストレージ: 10GB以上の空き容量
- 静的IPアドレス
- FQDNの設定(例:ipa.example.com)
FreeIPAサーバのインストール
- ホスト名の設定 まず、ホスト名がFQDN形式になっていることを確認します。Kerberosの認証が正しく機能するためには、静的なホスト名が必要です。
# ホスト名を確認 hostname # FQDNが設定されていない場合は変更 sudo hostnamectl set-hostname ipa.example.com
- 必要なパッケージのインストール 以下のコマンドで、DNSサーバの機能まで含めてインストールできます。
sudo dnf install -y freeipa-server freeipa-client freeipa-server-dns
- ファイアウォールの設定
Rocky Linux 9では、
freeipa-4
という名前のファイアウォールサービスがあるので、これを利用することで必要なポートをまとめて解放できます。
sudo firewall-cmd --add-service=freeipa-4 --permanent sudo firewall-cmd --reload
- FreeIPAサーバのセットアップ 以下のコマンドで、セットアップスクリプトを実行します。基本的に対話形式で設定を行います
sudo ipa-server-install
主に聞かれるのは以下のような内容になります。
- サーバとして構成するか
- DNSフォワーダを設定するか
- ドメイン名
- レルム名(たいていドメイン名の大文字)
- Directory Managerのパスワード設定
- FreeIPAサーバの管理者パスワード設定
レプリケーションについて
FreeIPAは重要なサービスであるため、レプリケーション構成にすることをおすすめします。 こちらは必須ではないので今回の記事では省略しますが、気になる方は公式ドキュメントをぜひ確認してみて下さい。
FreeIPAクライアントのインストール
サーバをセットアップできましたので、クライアントになるマシンにFreeIPAクライアントをインストールし、アクセスしてみましょう。 今回はクライアントもRocky Linux 9で行いますが、一般的なディストリビューションであればだいたい対応しています。
sudo dnf install -y ipa-client sudo ipa-client-install --mkhomedir
以上のコマンドで、対話形式で設定を行うことができます。
--mkhomedir
は必須のオプションではありませんが、これを追加することでユーザーの初回ログイン時にそのユーザーのホームディレクトリが自動作成されるようになります。
--mkhomedir
オプションが指定されていない場合、初回ログイン時にユーザーのホームディレクトリが無かった場合にはカレントディレクトリが/
になります。
FreeIPAクライアントのインストールが終了したら、FreeIPAサーバの管理者アカウントでログインし直してみてください。
管理機能を試してみよう
FreeIPAを使い始める最低限の準備が整いましたので、基本的な管理機能を設定してみましょう。 もちろんWebGUIでも同様の作業を行うことが可能ですが、今回はLinuxらしくコマンド操作メインで説明します。
Kerberosチケットを取得する
FreeIPAサーバで作業する前に、FreeIPA管理ユーザーのKerberosチケットを取得する必要があります。
# パスワードの入力が求められます
kinit admin
管理者グループの作成
まずはsysadmins
という管理者グループを作成してみましょう。
今回はこのグループにsudo権限を与えていくように設定していきます。
ipa group-add sysadmins --desc "System Administrators"
管理者ユーザの作成
次に新しくユーザを作成して、sysadmins
グループに割り当てます。
--password
オプションを利用することで、パスワードは対話的に入力できます。
このオプションを省略した場合には、パスワード未設定状態でユーザが作成され、初回ログイン時にパスワード変更が求められるようになります。
ipa user-add user1 --first=user --last=one --password --shell=/bin/bash ipa group-add-member sysadmins --users=user1
sudoコマンドの定義
次に、sudoコマンドのグループを設定します。
今回は2つ作成します
- 最低限のコマンドをsudoで実行できるグループ
# 実行可能対象とするコマンドを設定する ipa sudocmd-add /bin/systemctl --desc="Systemd control command" ipa sudocmd-add /bin/journalctl --desc="Journal log viewer" ipa sudocmd-add /usr/bin/dnf --desc="Package manager" # sudoルールを定義する ipa sudorule-add sysadmin_limited --desc="Limited sudo for system admins" # このsudoルールをすべてのホストに適用 ipa sudorule-mod sysadmin_limited --hostcat=all # グループにsudoルールを適用する ipa sudorule-add-user sysadmin_limited --group=sysadmins # sudoルールにコマンドを設定する ipa sudorule-add-command sysadmin_limited \ --sudocmds="/bin/systemctl" \ --sudocmds="/bin/journalctl" \ --sudocmds="/usr/bin/dnf" # sudoで実行するユーザーを指定する(通常はroot) ipa sudorule-add-runasuser sysadmin_limited --users=root # sudo時のパスワード入力を省略する(オプション) ipa sudorule-add-option sysadmin_limited --sudooption='!authenticate'
- 全てのコマンドをsudoで実行できるグループ
ipa sudorule-add sysadmin_full --desc="Full sudo access for system admins" ipa sudorule-add-user sysadmin_full --group=sysadmins ipa sudorule-mod sysadmin_full --hostcat=all ipa sudorule-add-runasuser sysadmin_full --users=root ipa sudorule-add-option sysadmin_full --sudooption='!authenticate'
これで完了です。クライアントで設定した通りのsudoコマンドを実行できるか確かめてみてください。 もし、変更が反映されていない場合は、sssdの再起動を試してみてください。
sudo systemctl restart sssd
また、複数のsudoグループが設定されている場合、より権限の広い方が優先されます。
監査ログについて
FreeIPAでは監査ログが標準で有効になっていますので、以下のようなパスでログを確認できるようになっています。
ログファイルパス | 内容 |
---|---|
/var/log/httpd/error_log |
WebUIやAPI経由での操作エラー(IPAのREST API含む) |
/var/log/httpd/access_log |
IPA WebUI/APIへのアクセスログ |
/var/log/krb5kdc.log |
Kerberos認証関連ログ(kinitなど) |
/var/log/dirsrv/slapd-<REALM>/errors |
389 Directory Server のエラーログ(LDAP) |
/var/log/dirsrv/slapd-<REALM>/access |
LDAPアクセスログ(ユーザー認証・検索・追加など) |
/var/log/pki/pki-ca/debug |
CA関連ログ(証明書発行・更新など) |
/var/log/pki/pki-ca/system |
Dogtag(証明書管理)のシステムログ |
/var/log/sssd/sssd_*.log |
SSSDの動作ログ(クライアントでの認証やキャッシュ制御など) |
まとめ
FreeIPAを導入することで、企業内のユーザー管理、権限管理、認証基盤の多くの課題を解決できます。特に複数のLinuxサーバを運用している環境では、管理工数の大幅な削減とセキュリティレベルの向上が期待できます。
「でも導入は大変そう...」と思われるかもしれませんが、基本的なセットアップは1〜2時間程度で完了します。そして一度導入すれば、日々の運用管理が格段に楽になり、長期的に見れば大きなコスト削減になるでしょう。
ぜひ皆さんの環境でも、FreeIPAの導入を検討してみてください。