第3章 システムを最新の状態に保つ

本章では、システムを最新の状態に保つプロセスについて説明します。セキュリティー更新のインストール方法の立案や設定、新たに更新されたパッケージが導入する変更の適用、Red Hat カスタマーポータルを利用したセキュリティーアドバイザリーの追跡などが関連してきます。

3.1. インストール済みソフトウェアのメンテナンス

セキュリティーの脆弱性が発見された場合、セキュリティー上のリスクを最小限に抑えるために、影響を受けるソフトウェアを更新する必要があります。そのソフトウェアが現在サポートされている Red Hat Enterprise Linux ディストリビューション内のパッケージの一部である場合、Red Hat は脆弱性を修正する更新パッケージをできるだけ迅速にリリースするように全力を尽くします。
多くの場合、セキュリティー上の特定の不正使用に関する発表にはパッチ (または問題を解決するソースコード) が伴われています。このパッチは Red Hat Enterprise Linux パッケージに適用されます。パッチはテストされ、エラータ更新としてリリースされるものです。しかし、発表にパッチが含まれていない場合には、Red Hat の開発者はまず、問題の解決に向けてそのソフトウェアの保守担当者と協力します。問題が解決されると、パッケージがテストされ、エラータ更新としてリリースされます。
システムで使用しているソフトウェアのエラータ更新がリリースされている場合、システムが攻撃される可能性のある期間を最短にするため、影響を受けるパッケージをできる限り早く更新することが強く推奨されます。

3.1.1. セキュリティーの更新の立案と設定

すべてのソフトウェアにはバグが含まれます。これらのバグは、悪意のあるユーザーにシステムをさらしてしまう可能性のある脆弱性につながりかねません。更新されていないパッケージは、コンピューターへの侵入を招く一般的な原因となります。脆弱性の悪用を防ぐには、セキュリティーパッチをタイミングよくインストールする計画を実行して、発見された脆弱性をすばやく排除してください。
セキュリティー更新が利用可能になったらそれらをテストして、インストールするスケジュールを立てます。更新のリリースからシステムにインストールするまでの間、システムを保護するための新たな制御が必要になります。これらの制御は脆弱性の内容によって異なりますが、ファイアウォールの追加ルールや、外部ファイアウォールの使用、またはソフトウェア設定の変更などがこれらに含まれることがあります。
サポート対象のパッケージ内のバグは、エラーのメカニズムを使用して修正されます。エラータは、1 つ以上の RPMパッケージとそのエラータが対処する問題の簡単な説明で構成されています。エラータはすべて、アクティブなサブスクリプションを持つお客様に Red Hat サブスクリプション管理 サービスで配布されます。セキュリティー問題に対処するエラータは、Red Hat セキュリティーアドバイザリー と呼ばれます。
セキュリティーエラータを使った作業についての詳細情報は、「カスタマーポータルでセキュリティー更新を見る」 を参照してください。RHN Classic からの移行を含む Red Hat サブスクリプション管理 サービスについての詳細情報は、Red Hat サブスクリプション管理 にある関連ドキュメントを参照してください。

3.1.1.1. Yum のセキュリティー機能の使用

Yum パッケージマネジャーには、セキュリティーエラータの検索、一覧、表示、インストールに使用可能なセキュリティー関連の機能がいくつか含まれています。これらの機能を使うと、Yum を使ってセキュリティー更新のみをインストールすることもできます。
使用中のシステムで利用可能なセキュリティー関連の更新を確認するには、root で以下のコマンドを実行します。
~]# yum check-update --security
Loaded plugins: langpacks, product-id, subscription-manager
rhel-7-workstation-rpms/x86_64                  | 3.4 kB  00:00:00
No packages needed for security; 0 packages available
上記のコマンドは非対話モードで実行されるので、更新が利用可能かどうかの自動確認のスクリプトに使用することができます。このコマンドは、利用可能なセキュリティー更新がある場合には 100 を返し、更新がない場合には 0 を返します。エラーが発生すると、1 が返されます。
同様に、以下のコマンドを使用するとセキュリティー関連の更新のみがインストールされます。
~]# yum update --security
updateinfo サブコマンドを使うと、リポジトリーが提供する利用可能な更新についての情報を表示したり、それについてアクションを取ることができます。この updateinfo サブコマンド自体は、多くのコマンドを受け付け、この中にはセキュリティー関連の使用も含まれます。これらのコマンドの概要については、表3.1「yum updateinfo で使用可能なセキュリティー関連のコマンド」 を参照してください。

表3.1 yum updateinfo で使用可能なセキュリティー関連のコマンド

コマンド説明 
advisory [advisories]1 つ以上のアドバイザリーについての情報を表示します。advisories をアドバイザリー番号または番号に置き換えます。 
cvesCVE (Common Vulnerabilities and Exposures) に関連する情報のサブセットを表示します。 
security または secセキュリティー関連の情報をすべて表示します。 
severity [severity_level] or sev [severity_level]提供された severity_level のセキュリティー関連パッケージについての情報を表示します。 

3.1.2. パッケージの更新とインストール

システムのソフトウェアを更新する際には、信頼できるソースから更新をダウンロードすることが重要です。攻撃者は、問題を解決するはずのバージョンと同じバージョン番号のパッケージを簡単に再構築し、そのパッケージからセキュリティー上の別の不正使用を可能にした上で、それをインターネット上にリリースする場合があります。こうした事態が発生すると、元の RPM に対するファイル検証などのセキュリティー対策を講じても、不正アクセスを検知することができません。このため、RPM は Red Hat などの信頼できるソールからのみダウンロードし、その保全性を検証するためにパッケージの署名を確認することが極めて重要になります。
Yum パッケージマネジャーの使用方法に関する詳細情報は、Red Hat Enterprise Linux 7 システム管理者のガイドの Yum の章を参照してください。

3.1.2.1. 署名パッケージの検証

Red Hat Enterprise Linux のパッケージはすべて、Red Hat GPG 鍵を使って署名されています。GPGGNU Privacy Guard または GnuPG の略で、配信ファイルの信頼性を保証するために使用されるフリーソフトウェアのパッケージです。パッケージ署名の検証が失敗すると、パッケージは改ざんされている可能性があるので信頼できません。
Yum パッケージマネジャーを使うと、インストールまたはアップグレード対象の全パッケージを自動的に検証できます。この機能は、デフォルトで有効になっています。使用中のシステムでこのオプションを設定する場合は、/etc/yum.conf 設定ファイル内で gpgcheck 設定ディレクティブが 1 に設定されていることを確認してください。
以下のコマンドを使用すると、ファイルシステム上のパッケージファイルを手動で検証できます。
rpmkeys --checksig package_file.rpm
Red Hat パッケージの署名のプラクティスについての追加情報は、Red Hat カスタマーポータルの Red Hat GPG キー の記事を参照してください。

3.1.2.2. 署名パッケージのインストール

ファイルシステムから検証済みのパッケージ (パッケージの検証方法については、「署名パッケージの検証」 を参照) をインストールするには、以下のように rootyum install コマンドを実行します。
yum install package_file.rpm
複数のパッケージを一度にインストールするには、シェル glob を使用します。たとえば、以下のコマンドを実行すると、現行ディレクトリーにすべての .rpm パッケージがインストールされます。
yum install *.rpm

重要

セキュリティーに関するエラータをインストールする前に、エラータレポートに記載されているすべての特別な指示をよく読み、指示に従ってインストールしてください。エラータ更新に基づく変更の適用についての全般的な指示は、「インストールされた更新による変更の適用」 を参照してください。

3.1.3. インストールされた更新による変更の適用

セキュリティーに関するエラータと更新をダウンロードしてインストールした後は、古いソフトウェアの使用を中止して新しいソフトウェアの使用を開始することが重要です。これを実際に行う方法は、更新済みのソフトウェアの種類によって異なります。以下では、ソフトウェアの一般的なカテゴリを示し、パッケージのアップグレード後に更新バージョンを使用する方法について説明します。

注記

一般的に、システムの再起動は、ソフトウェアパッケージの最新バージョンが使用されていることを確認する最も確実な方法です。ただし、このオプションは常に必要というわけではなく、システム管理者が常に利用できるわけでもありません。
アプリケーション
ユーザースペースのアプリケーションとは、ユーザーが開始できるすべてのプログラムのことです。通常このようなアプリケーションは、ユーザー、スクリプトまたは自動化されたタスクユーティリティがそれらを起動する場合にのみ使用されるものです。
ユーザースペースのアプリケーションが更新されると、システムにあるアプリケーションのすべてのインスタンスが停止し、更新バージョンを使用するためにプログラムが再起動されます。
カーネル
カーネルは、Red Hat Enterprise Linux 7 オペレーティングシステムの中心的なソフトウェアコンポーネントです。カーネルはメモリー、プロセッサーおよび周辺機器へのアクセスを管理し、すべてのタスクをスケジュールします。
カーネルは中心的な役割を担うので、カーネルの再起動にはコンピューターの再起動が伴います。つまりカーネルの更新バージョンは、システムの再起動後に初めて使用できるようになります。
KVM
qemu-kvm および libvirt のパッケージが更新されると、すべてのゲスト仮想マシンを停止して、関連の仮想化モジュールをリロードし (またはホストシステムを再起動し)、仮想マシンを再起動する必要があります。
kvmkvm-intel、または kvm-amd のどのモジュールがロードされているかを確認するには、lsmod コマンドを使用します。その後に modprobe -r コマンドを使用してロードされているモジュールを削除し、modprobe -a コマンドで影響を受けたモジュールをリロードします。以下に例を示します。
~]# lsmod | grep kvm
kvm_intel             143031  0
kvm                   460181  1 kvm_intel
~]# modprobe -r kvm-intel
~]# modprobe -r kvm
~]# modprobe -a kvm kvm-intel
共有ライブラリ
共有ライブラリは、glibc のように、多くのアプリケーションやサービスにより使用されるコードの集合です。通常、共有ライブラリを使用しているアプリケーションは、アプリケーションが初期化される際に共有コードを読み込みます。そのため、更新されたライブラリを使用しているすべてのアプリケーションは、まず停止してから再起動する必要があります。
特定ライブラリにリンクしている実行中のアプリケーションを判別するには、以下の例のように lsof コマンドを使用します。
lsof library
たとえば、libwrap.so ライブラリにリンクしている実行中のアプリケーションを判別するには、以下を入力します。
~]# lsof /lib64/libwrap.so.0
COMMAND     PID USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
pulseaudi 12363 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
gnome-set 12365 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
gnome-she 12454 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
このコマンドは、ホストのアクセス制御に TCP Wrapper を使用する実行中のプログラムの一覧を返します。そのため tcp_wrappers パッケージが更新されると、リストにあるすべてのプログラムは停止してから再起動する必要があります。
systemd サービス
systemd サービスは、通常ブートプロセス中に開始される永続的なサーバープログラムです。systemd サービスの例としては、sshdvsftpd などがあります。
通常、これらのプログラムはマシンが起動している限りはメモリ内に残るので、パッケージのアップグレード後には、更新された systemd サービスは停止してから再起動する必要があります。これは、rootsystemctl コマンドを使用すると実行できます。
systemctl restart service_name
service_namesshd などの再起動するサービスの名前に置き換えます。
他のソフトウェア
以下のアプリケーションの更新は、リンク先のリソースで示された指示にしたがってください。