Linuxの認証を簡単にする「FreeIPA」とは
はじめに
「Linuxの認証基盤をもうちょっと簡単に管理したい……」、そう思ったことはないでしょうか。「ない」という方でも、以下のような場合に便利なソリューションがあると嬉しいかと思います。
- Kerberosを使ってユーザ、ホスト、サービスの認証を行い、シングルサインオンしたい
- ホストを登録するだけでDNSに登録し、ドメイン内のユーザが利用できるよう認証設定を完了させたい
- ポリシーを更新するたびにsudoersの設定を各マシンに導入・更新する
- ssh-copy-idをするためにパスワード認証を許可しているが本当はパスワード認証を禁止したい
- 2要素認証を使いたい
- スマートカード認証を行いたい
- sshの秘密鍵が入ったノートPCを紛失した。あらゆるサーバのauthorized_keysに登録された鍵の登録を削除したい
「FreeIPA」は、これらの運用・管理を簡単にするLinuxの認証基盤です。今回と次回の2回にわたってFreeIPAの基礎知識、インストールと簡単な使用方法について紹介します。
Linuxの認証基盤 FreeIPA
FreeIPAはLDAPおよびKerberosによる認証基盤で、Windows環境におけるActive Directoryのような立ち位置のものです。立ち位置は似ているもののADやSambaを置きかえようというものではなく、Linux/UNIXの認証基盤に特化しています。
FreeIPAは2007年からはじまったプロジェクトで、LinuxおよびUNIXシステムでの利用にフォーカスしています。Red Hat Enterprise Linux 6からは、FreeIPAが"Identity Management"という名前で同梱されています。
FreeIPAの主な機能は以下のとおりです。
- ユーザ、ホスト、サービスのIDを集中管理する
- Kerberosでの認証によるシングルサインオン
- Active Directoryと連携し、ADにログインしているユーザにシングルサインオンを提供する
- 複数マシンにFreeIPAを導入し、マルチマスタレプリケーションを構成する
- Web UIおよびコマンドラインクライアント、XMLRPC APIの提供
- 証明書の発行
- ドメイン内向けDNSの管理
- 2要素認証
- 接続元のシステムを考慮するホストベースアクセス制御(HBAC)
- 従来システムとの互換性を実現するための互換LDAPツリーの提供
- 複数FreeIPAサーバ構築時の負荷分散
この他にも、FreeIPA内の管理操作についてロールベースアクセス制御(RBAC)や、必要条件を確認したうえで関係するコンポーネントを設定するサーバおよびクライアントのインストーラなど、多数の機能があります。
FreeIPA サーバの主なコンポーネント
FreeIPAはいくつかの既存のソフトウェアと、独自に作成されたソフトウェアを組み合わせて構成されています。
大きなコンポーネントとしては以下のものがあります(図1)。
- 389 Directory Server(LDAP)
- MIT Kerberos(Kerberos)
- Dogtag(公開鍵基盤)(optional)
- BIND(DNS)(optional)
- Web UI、API、専用クライアント(FreeIPA独自)
この中であまり馴染みがない人が多そうな、389 Directory ServerとDogtagを簡単に紹介します。この2つはどちらもNetscape社の製品に由来しており、かつてNetscape Directory Server、Netscape Certificate Systemとして販売されていたLDAPサーバおよび公開鍵基盤です。Netscape社を買収したAOLからRed Hatが買収したのちにオープンソースプロジェクトになっています。製品としてはRed Hat Directory Server、Red Hat Certificate Systemとして販売されています(Certificate Systemは日本では販売されていません)。
FreeIPA クライアントの主なコンポーネント
FreeIPAを利用するクライアントは、大きく2種類に分けられます。
- FreeIPAのドメインに参加し、FreeIPAの全機能を利用できるクライアント
- FreeIPAのcompatibility treeやNISプラグインを利用し、LDAPやNISの仕組みを利用するクライアント
通常は前者で、後述するSSSDに対応していないOSや、古い版を利用する場合は後者を利用します。
FreeIPAのドメインに参加するには、静的なホスト名を設定したのちipa-client-installまたはipa-joinコマンドを利用します。DNSによる自動検出が有効であれば適切な権限を持つユーザとして認証したのちドメインに参加します。
「ドメインに参加」と一言で書きましたが、実際にはFreeIPAにホスト名やIPアドレス、MACアドレス等が登録される他、PAM、NSS、SSSD、LDAP、Kerberos、NTPの設定、ホスト証明書、sshホスト鍵の生成・登録を行います。
FreeIPAのクライアント側のコンポーネントはSSSD(System Security Services Daemon)です。聞き慣れない方も多いかと思いますが、SSSDはPAMやNSSのバックエンドとして動作し、FreeIPAへの問い合わせやキャッシュを行います。HBACやsudoersの管理などポリシー管理ではキャッシュ管理により少ない遅延で作を可能にするため重要な役割を担っています。
SSSDはAD、LDAPなどの各種バックエンドへ対応し、ドメイン修飾付きのユーザ名解決により複数のバックエンドを同時に利用できるほか、ID情報と一部の認証情報のキャッシュを行うなど多数の機能を持っています。 FreeIPAプロジェクトのクライアント側として開発が始まりましたが、今は別プロジェクトに分かれています。
FreeIPAサーバをインストールする前に
次回ではFreeIPAのインストール方法を解説しますが、FreeIPAサーバのインストール手順そのものは簡単なものの、前提条件は少し厳しくなっています。FreeIPAの管理するドメインでのログインは基本的にKerberosによるものになるため、他のKerberosで管理されていないドメインであることが必要です。DNSでの正引き、逆引きが可能であることも事実上必須です。
小さな環境向けでも最低2台のFreeIPAサーバを構築し、レプリケーション構成にすることをお勧めします。FreeIPAサーバが障害で動作しなくなると認証が止まってしまいますので、設定によっては依存しているシステム群でログインができなくなってしまいます。レプリケーション構成であれば障害時の対策になるほか、バージョンアップ時にも無停止での更新が可能などのメリットがあります。
ID管理サーバはセキュリティの要になりますので、FreeIPAサーバを構築する場合は他のサービスと同居させるのではなく、専用の仮想マシンを用意するようにしましょう。また、SELinuxもenforcingから変更しないことをお勧めします。