「FreeIPA」の機能を試してみよう
はじめに
前回は、Linuxの認証基盤である「FreeIPA」について、IPAサーバ/クライアントの主なコンポーネントを紹介しました。今回は、実際にFreeIPAをインストールして、FreeIPAが持つ多くの機能のいくつかを見ていきましょう。
FreeIPAのインストール準備
まずは、FreeIPAをインストールする前準備として、手元のKVM環境にお試し用のipaサーバを構築します。
前回で解説したように、基本的にFreeIPAが管理するドメインにはKerberosでログインするため、他のKerberosで管理されていないドメインでなくてはいけません。DNSで正引き・逆引きが可能な必要があるので、libvirtのネットワーク設定を変更して、あらかじめ仮想マシンに対してdnsmasqが提供するDNSにipa.example.comとclient.example.comのエントリを定義しておきます。
# virsh net-edit default
<network>
<name>default</name>
<uuid>635536af-9e63-49b0-8c01-b7fd269417de</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:2d:34:13'/>
<domain name='example.com'/>
<dns>
<host ip='192.168.122.2'>
<hostname>client</hostname>
</host>
<host ip='192.168.122.10'>
<hostname>ipa</hostname>
</host>
</dns>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.200' end='192.168.122.220'/>
</dhcp>
</ip>
</network>
ホストからも名前でアクセスできるよう、/etc/hostsにも同様に定義しておきます。
192.168.122.2 client.example.com
192.168.122.10 ipa.example.com
これらの設定を反映するため、dnsmasqを再起動します。このネットワークに繋がっているVMのブリッジへの接続が全て切れてしまうので注意してください。
# virsh net-destroy default
# virsh net-start default
利用する環境の都合でDNSが存在しない場合は、インストーラのオプションで「--no-host-dns」と「インストール中にDNSによる名前解決をしない」を指定します。その場合でも最低限ブラウザを利用するマシンからは名前解決(/etc/hostsで可)ができないとFreeIPAのWeb UIが利用できないので注意してください。
FreeIPAのインストール
前準備ができたので、さっそくFreeIPAをインストールしていきましょう。まず、仮想マシンに「Fedora27 Server」を導入します。上で設定したアドレスを指定し、vCPUは4、メモリは8GBを割り当てます。
次にFreeIPAサーバのパッケージをインストールし、ipa-server-installコマンド を実行します。ipa-server-installはオプションでの指定がなければ必要な質問を対話的に行います。
# dnf install -y freeipa-server
# ipa-server-install
今回は以下の設定を行いました。
- DNSを設定するか? → 設定しない
- サーバ名は何か? → ipa.example.com
- realm名は何か? → EXAMPLE.COM
その後、LDAP全体を管理するDirectory Managerのパスワードと、普段利用するFreeIPAの管理者adminのパスワードを入力します。
設定のサマリを確認されるので、意図した通りになっていることを確認して「yes」と入力すると、インストーラが各種の設定を実施します。私の環境では10分ほどかかりました。
問題なくインストールが終了すると、最後に下記のように表示され、次にやるべきこととアドバイスが表示されます。
Setup complete
Next steps:
1. You must make sure these network ports are open:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
UDP Ports:
* 88, 464: kerberos
* 123: ntp
2. You can now obtain a kerberos ticket using the command: 'kinit admin'
This ticket will allow you to use the IPA tools (e.g., ipa user-add)
and the web user interface.
Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
- firewallのポート開放
- ipaコマンド(FreeIPAのコマンドラインクライアント)を利用する前にkinit adminで認証するようにという注意
- CA局の証明書が/root/cacert.p12にあるのでバックアップするようにという注意
この指示に従って、firewallctlでfirewallのポートを開きます。
# firewallctl zone -p FedoraServer add service http https ldap ldaps kerberos kpasswd ntp
# firewallctl reload
これでFreeIPAサーバの基本的なインストールができました。
ホストマシンからhttps://ipa.example.comへ接続するとFreeIPAのWeb UIが表示され、adminユーザとしてログインすると管理画面が表示されます。
クライアントの登録
続いて、FreeIPAにclient.example.comというシステムを登録します。ipa-clientをインストールして、ipa-client-installを実行します。
# dnf install -y ipa-client
# ipa-client-install
今回はDNSを設定していないため自動検出が働かないので、ドメインとFreeIPAサーバの質問に対応して入力します。
登録に利用するユーザ(今回はadminで行います)とパスワードを入力します。設定を確認して「yes」と入力すると各種設定、システムの登録、ホスト証明書の作成と取得、SSHのホスト公開鍵をFreeIPAへ登録などを行います。
もしここで何か問題が発生する場合は、クライアントとFreeIPA間の通信が可能か確認してみましょう。
ユーザの登録
次にユーザを登録します。Kerberosにadmin@EXAMPLE.COMとしてログインしましょう。この作業はipaサーバまたはドメインに参加しているclient上のどちらでも可能です。
$ kinit admin
この後の操作はipaコマンドを使用します。
$ ipa user-add
登録したいユーザの名前とアカウント名が質問されるので、入力してユーザを作成します。
$ ipa passwd <<ユーザ名>>
パスワードを2回入力して、パスワードを登録します。
これでユーザ登録は完了です。早速ログインしてみましょう。今登録したパスワードがexpireされ、変更を求められます。これはFreeIPAのポリシーで、管理者が再発行したパスワードは1回で使い捨てることが強制されるためです。
登録したユーザとしてログインできたら、klistコマンドでKerberosのチケットが付与されていることを確認します。idコマンドで表示されるuidとipa user-show <<ユーザ名>>で表示されるuidが同じことを確認できます。
Web UIの利用
それでは、Web UIを使用してみましょう。ホスト側でhttps://ipa.example.com/へ接続します。adminユーザでログインすると、下のような画面がでてきます。ユーザ一覧の他にも上部のメニューに多くの項目があります。
各ユーザ名をクリックすると表示される詳細ページで[Actions]をクリックすると、いくつかの操作ができます。
- パスワードの変更
- ユーザの有効化/無効化/削除
- (ロックアウトされていた場合の)ロック解除
- OTPトークンの追加
- グループへの所属を再生成
- ユーザ証明書発行
OTPトークンの生成
ここで、ワンタイムパスワードを生成するトークンを発行し、ログインに利用してみましょう。ユーザ詳細の[Actions]から[Add OTP Token]を選択し、トークン生成のUIを出します。[Add]ボタンをクリックするとTOTPまたはHOTPのトークンをが生成され、QRコードが表示されます。このトークンはスマートフォンのアプリケーション(Google AuthenticatorやFreeOTPなど)で利用できます。
後からトークンを管理したい場合は、[Authentication]メニュー内の[OTP Tokens]から検索して有効期間の設定や無効化などの操作が可能です。
デフォルトでは各ユーザがそれぞれの権限で自分用にOTPトークンの生成を行えるので、トークンの配布はセルフサービスで行います。
2要素認証によるログイン
上記の作業ではトークンを作ってユーザに割り当てましたが、これだけでは認証に利用されません。認証方式をパスワードのみによる認証から変更する必要があります。
ドメイン全体の認証ポリシーを変更するには、[IPA Server]→[Configuration]→[ユーザーオプション]→[Default user authentication types]から[Two factor authentication (password + OTP)]を選択し、デフォルトの認証方法をワンタイムパスワード付きに指定します。このモードでは、有効なトークンが紐づいているユーザは2要素認証で認証し、有効なトークンが紐づいていないユーザはパスワードのみで認証します。
クライアントでログインしようとすると、プロンプトが通常の"Password: "ではなく"First Factor: "となっています。ここでパスワードを入力します。次に"Second Factor: "でトークンの値を入力します。PAMでは複数要素によるパスワード入力が可能なためこのようなことができますが、FreeIPAのWeb UIへのログインなど、入力欄が1つしかないソフトウェアでパスワードを入力する必要がある場合は、パスワードとOTPをそのまま繋げた文字列を入力します。
実はFirst Factorのプロンプトに繋げた文字列を入力して、Second Factorは空文字列を入力しても認証は行えます。では、なぜこのように分割して入力するのでしょうか?
SSSDのデフォルトではノートPCなどでの利用を考慮して、FreeIPAへの接続がなく、かつ過去に認証に成功しているユーザの場合にはパスワードだけで認証を成功させます。この動作を実現するため、SSSDは認証が成功した時にパスワードのSSHA256の値を生成してキャッシュに蓄積します。入力が2つに分割されていないとどこまでがパスワードでどこからかOTPか確定しない場合があることが理由です。FreeIPAのOTP実装ではトークンの文字数を伝える仕組みがあるため不要ですが、任意のOTP実装と組み合わせられるようになっています。
SSH公開鍵の配布
同一ドメインに所属しているマシン同士でsshする場合にはKerberosによる認証がうまくいきますが、ドメインの外部からclient.example.comにsshするにも、sshの公開鍵をFreeIPAサーバに登録することでドメイン内のマシンに配布できます。
Web UIでユーザの詳細画面内、[Account Settings]→[SSH Public keys]で[Add]をクリックすると入力ボックスが表示され、そこへ登録したい公開鍵(~/.ssh/id_rsa.pub など)の内容をコピー&ペーストします。
この状態で以下のようにsshすると、ホストのfingerprintの確認のみでログインできます。FreeIPAのDNS機能まで構成すると(接続元sshクライアントの 設定によりますが)fingerprintの確認もDNS SSHFPレコードで行われて不要になります。
$ ssh client.example.com -l kmoriwak
The authenticity of host 'client.example.com (192.168.122.2)' can't be established.
ECDSA key fingerprint is SHA256:4+k4cLbeLOiVUBWBdiGUMMDiwfqgD0Il1w3crRoBo64.
ECDSA key fingerprint is MD5:b0:10:a0:c7:dd:0f:b5:a9:28:d1:06:3c:e9:5a:6e:22.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'client.example.com' (ECDSA) to the list of known hosts.
Last login: Sun Dec 17 18:49:03 2017
[kmoriwak@client ~]$
おわりに
今回は、FreeIPAをインストールし、その多くの機能の一部を紹介しました。最後に、FreeIPAをもっと知りたくなった場合に便利な関連資料を示します。
●FreeIPA Workshop(英語)
FreeIPAの基本的な操作を試すワークショップ教材。vagrantベースなので環境構築が簡単です。
●FreeIPAプロジェクト(英語)
「FreeIPA public demo」というページで動作しているデモ環境を公開しています。このデモ環境は毎日削除されるので、自由に使って壊しても問題ありません。とりあえずWeb UIを試してみたい人にはこちらがお勧め。
●「Linux ドメイン ID、認証、およびポリシーガイド」
RHEL7のドキュメントの一部として提供されているFreeIPAのドキュメント。かなりの分量ですが導入の前提条件から利用方法、運用方法、トラブルシュートまで幅広く扱っています。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Linuxの認証を簡単にする「FreeIPA」とは
- APIファーストの設計ツール「Apicurio」「Microcks」を使ってみよう!
- OpenStack Kilo(RDO版)でのMidoNet構築手順(1)
- ソフトウェア定義型ネットワークの作成
- OpenStack with OpenDaylight (手動構築編)
- 高まるOSSセキュリティへの関心に応え、認証に関する最新技術&情報を徹底紹介!
- Active Directoryユーザーとコンピューター
- Xen上のVMにおけるネットワーク性能
- クラウドネイティブな環境でKeycloakによるシングルサインオンを実現
- RHEL-OSP6でのDVR環境構築手順