2.2. ホスト物理マシンのセキュリティー保護

Red Hat Enterprise Linux ホストのパフォーマンスを強化するには次のようなタスクやヒントが役立ちます。
  • 強制 (enforcing) モードで SELinux を実行します。setenforce コマンドを使って SELinux を強制 (enforcing) モードで実行するように設定します。
    # setenforce 1
  • すべての不必要なサービスを削除するか、または無効にします (AutoFSNFSFTPHTTPNIStelnetdsendmail など)。
  • サーバー上にはプラットフォームの管理に必要な最低限のユーザーアカウントのみを追加します。不必要なユーザーアカウントは削除してください。
  • ホストでは不必要なアプリケーションは実行しないようにしてください。ホストでアプリケーションを実行すると仮想マシンのパフォーマンスに影響を与えるため、その影響がサーバーの安定性に及ぶ可能性があります。サーバーをクラッシュさせる可能性のあるアプリケーションは、サーバー上のすべての仮想マシンをダウンさせてしまう原因ともなります。
  • 仮想マシンのインストールおよびイメージには集中管理できる場所を使用します。仮想マシンのイメージは /var/lib/libvirt/images/ に格納してください。仮想マシンのイメージをこれ以外のディレクトリーに格納する場合は、そのディレクトリーを SELinux ポリシーに追加し、インストールを開始する前にラベルの再設定を必ず行ってください。集中管理ができる共有可能なネットワークストレージの使用を強くお勧めします。

注記

パフォーマンスに関するヒントの詳細は、Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイドを参照してください。

2.2.1. セキュリティー導入計画

仮想化技術を導入する際には、ホスト物理マシンとそのオペレーティングシステムが攻撃されないことを確認する必要があります。この場合、ホスト物理マシンとは、システム、デバイス、メモリー、ネットワークのほかにすべてのゲスト仮想マシンを管理する Red Hat Enterprise Linux システムのことです。ホスト物理マシンが保護されていないと、システム内のすべてのゲスト仮想マシンが脆弱になります。仮想化を使用してシステムのセキュリティーを強化する方法はいくつかあります。担当者または担当者の企業は導入計画を作成する必要があります。この導入計画には、以下が含まれている必要があります。
  • 動作仕様
  • ご使用のゲスト仮想マシンで必要なサービスの指定
  • ホスト物理サーバーとこれらのサービスに必要なサポートの指定
以下は、導入計画の作成時に考慮すべきセキュリティー問題です。
  • ホスト物理マシン上では必要となるサービスのみを実行する。ホスト物理マシン上で実行されているプロセスやサービスが少ないほど、セキュリティーのレベルとパフォーマンスが高くなります。
  • ハイパーバイザー上で SELinux を有効にする。SELinux と仮想化の使い方については、「SELinux と強制アクセス制御 (MAC)」を参照してください。
  • ファイアーウォールを使用してホスト物理マシンへのトラフィックを制限する。攻撃からホスト物理マシンを保護するデフォルト拒否ルールでファイアウォールをセットアップできます。また、ネットワークを介するサービスを制限することも重要です。
  • 標準ユーザーのホストのオペレーティングシステムに対するアクセスを許可しない。ホストのオペレーティングシステムの特権アカウントが設定されている場合、特権のないアカウントにアクセスを許可すると、セキュリティーが危険にさらされる可能性があります。

2.2.2. クライアントアクセス制御

libvirt のクライアントアクセス制御フレームワークでは、システム管理者は複数のクライアントユーザー、管理オブジェクト、および API 操作に対する細かい権限のルールをセットアップすることができます。これにより、クライアントの接続を最小限の特権セットに制限することができます。
デフォルト設定では、libvirtd デーモンには 3 つのレベルのアクセス制御があります。最初は、すべての接続が非認証状態で行われます。この状態では、認証を完了するために必要な API 操作のみが許可されます。認証が成功した後は、クライアント接続に使用されたソケットによって、接続はすべての API 呼び出しへの完全な無制限アクセスを持つか、または「読み取り専用」操作に制限されます。アクセス制御フレームワークでは、管理者が、認証された接続に細かいアクセス権ルールを定義することができます。libvirt のすべての API 呼び出しには、使用されるオブジェクトに対して検証される一連の権限があります。さらに、特定のフラグが API 呼び出しに設定されているかについて権限のチェックが行われます。API 呼び出しに渡されるオブジェクトのチェックのほかにも、一部のメソッドは結果をフィルタリングします。

2.2.2.1. アクセス制御ドライバー

アクセス制御フレームワークは、今後追加される任意のアクセス制御技術との統合を可能にするためにプラグ可能なシステムとして設計されています。デフォルトでは、ドライバーは使用されません。そのため、アクセス制御のチェックは全く行われません。libvirt は polkit を実際のアクセス制御ドライバーとして使用するためのサポートを提供します。polkit アクセス制御ドライバーの使用方法については、設定ドキュメント を参照してください。
アクセス制御ドライバーは、access_drivers パラメーターを使用して libvirtd.conf 設定ファイルで設定されます。このパラメーターは、さまざまなアクセス制御ドライバー名を受け入れます。複数のアクセス制御ドライバーが必要とされる場合は、すべてのアクセス制御ドライバーのアクセスが付与されるようにそれらが処理される必要があります。「polkit」をドライバーとして有効にするには、以下のコマンドを実行します。
# augtool -s set '/files/etc/libvirt/libvirtd.conf/access_drivers[1]' polkit
ドライバーをデフォルト (アクセス制御なし) に戻すには、以下のコマンドを入力します。
# augtool -s rm /files/etc/libvirt/libvirtd.conf/access_drivers
libvirtd.conf に変更を加えると、libvirtd デーモンの再起動が必要になることに注意してください。

2.2.2.2. オブジェクトおよびアクセス権

libvirt は、アクセス制御を、その API の主なオブジェクトタイプすべてに適用します。それぞれのオブジェクトタイプには、それぞれ一連の権限が定義されます。特定の API 呼び出しについてチェックされる権限を判別するには、該当 API の API 参照マニュアル文書を参照してください。オブジェクトと権限の詳細の一覧は、libvirt.org を参照してください。

2.2.2.3. ブロックデバイスをゲストに追加する際のセキュリティー上の懸念事項

  • ホスト物理マシンでは、ファイルシステムを特定するために、fstab ファイルや、initrd ファイルまたはカーネルコマンドラインなどでファイルシステムのラベルを使用しないようにしてください。ゲスト仮想マシンがパーティションや LVM ボリューム全体への書き込みアクセスを持つ場合、ファイルシステムのラベルを使用するとセキュリティー上のリスクが発生します。ゲスト仮想マシンが、ホスト物理マシンに属するファイルシステムのラベルを独自のブロックデバイスストレージに書き込む可能性があるためです。これにより、ホスト物理マシンの再起動時に、ホスト物理マシンがこのゲスト仮想マシンのディスクをシステムディスクとして誤って使用してしまう可能性があり、ホスト物理マシンシステムが危険にさらされる可能性があります。
    fstab ファイル、initrd ファイルまたはカーネルコマンドラインなどで使用する場合、デバイスの識別にはその UUID を使用した方がよいでしょう。それでも、特定のファイルシステムでは UUID の使用が完全に安全であるとは言えませんが、UUID を使用した場合には同様のセキュリティー侵害の可能性は確実に低くなります。
  • ゲスト仮想マシンはディスク全域、またはブロックデバイス全域 (例: /dev/sdb) に書き込みアクセスを持つべきではありません。ブロックデバイス全域にアクセスを持つゲスト仮想マシンはボリュームラベルを修正できる場合があり、これがホスト物理マシンシステムの攻撃に使用される可能性があります。パーティション (例: /dev/sdb1) または LVM ボリュームを使用して、この問題を回避してください。LVM 管理および設定例については、「CLI コマンドでの LVM 管理」または「LVM 設定の例」を参照してください。
    /dev/sdb1 または /dev/sdb などの raw ディスクなどのパーティションへの raw アクセスを使用する場合、global_filter 設定を使用して、安全なディスクのみをスキャンできるよう LVM を設定する必要があります。global_filter コマンドを使用した LVM 設定スクリプトの例については、「サンプル lvm.conf ファイル」を参照してください。