章 3章. セキュリティの更新

セキュリティの脆弱性が発見された場合、セキュリティ上の危険を最小限に抑えるために、影響を受けるソフトウェアを更新する必要があります。そのソフトウェアがRed Hat Enterprise Linux 製品に入っているパッケージの一部で、現在サポートされている場合、Red Hat, Inc. からできる限り早急に脆弱性を修正する更新パッケージをリリースすることが約束されています。多くの場合、特定のセキュリティ不正アクセスに関する告知にはパッチ(または問題を解決するソースコード)が付いています。このパッチをその Red Hat Enterprise Linux パッケージに適用します。パッチは Red Hat 品質保証チームによって検証され、エラータ更新としてリリースされています。もしも、告知にパッチが付いていない場合は、Red Hat の開発者がそのパッケージのメインテナーと共に問題の解決にあたっています。問題解決後に、パッケージを検証して、エラータ更新としてリリースします。

システムで使用しているソフトウェア用のエラータ更新がリリースされたら、影響を受けるパッケージをできるだけ早く更新し、システムが攻撃を受けやすくなる期間を最小限に抑えることを強くおすすめします。

3.1. パッケージを更新する

システムのソフトウェアを更新する場合は、信頼できるソースから更新をダウンロードすることが重要です。攻撃者は簡単に、問題を解決するはずのパッケージと同じバージョン番号を使いしかしこれに別のセキュリティ不正アクセスを付けてパッケージを構築し直し、インターネットでリリースすることができます。こうした事態が発生した場合、オリジナルの RPM に対してファイルを検証するなどのセキュリティ手段では不正アクセスは検知されません。従って、Red Hat, Inc. などの信頼できるソースからのみ RPM をダウンロードし、パッケージの署名を確認してその健全性を確かめることが非常に重要となります。

Red Hat ではエラータ更新に関して 2 通りの取得方法を提供しています。

  1. Red Hat Network でのエラータ更新の一覧とダウンロード

  2. Red Hat エラータwebサイト上のエラータ更新の一覧、リンクなし

注記注記
 

Red Hat Enterprise Linux 製品ラインでは、更新パッケージのダウンロードは Red Hat Network からのみになります。Red Hat エラータウェブサイトでは更新情報が掲載されますがダウンロードできる実際のパッケージはありません。

3.1.1. Red Hat Network を利用

Red Hat Network ならほとんどの更新処理を自動化することができます。ご使用のシステムに必要な RPMパッケージを判定して、安全なリポジトリからダウンロードしてきます。RPM署名を検証し、改変されていないか確認、それから更新します。パッケージのインストールはすぐに行なうこともできますが、一定の時間をおいてから行なうよう予定組みすることもできます。

Red Hat Network では更新する各マシンに システムプロフィール を作成する必要があります。システムプロフィールにはシステムに関するハードウェアとソフトウェアの情報が含まれます。この情報は機密扱いとされ他の人に渡ることはありません。各システムに適用すべきエラータ更新を判定する目的のためだけに使用されます。この情報がないと Red Hat Network は特定システムに更新が必要かどうかを判定することができません。セキュリティエラータが(または、いずれの種類のエラータでも)リリースされると、Red Hat Network はエラータの詳細及び影響を受けるシステムの一覧を電子メールで送信します。更新を適用するには、Red Hat 更新 エージェントを使用するか、ウェブサイト、http://rhn.redhat.comからそのパッケージを更新するようスケジュールに入れます。

ヒントヒント
 

Red Hat Enterprise Linux にはRed Hat Network 通知ツールが入っています。登録している Red Hat Enterprise Linux システム用の更新があると、視覚的な警告を表示してくれる便利なパネルアイコンです。アプレットについての詳細は次のURLを参照してください。 http://rhn.redhat.com/help/basic/applet.html

Red Hat Network の利点に関する詳細は、 http://www.redhat.com/docs/manuals/RHNetwork/Red Hat Network Reference Guideを参照するか、 http://rhn.redhat.com でご覧ください。

重要重要
 

セキュリティエラータをインストールする前に、必ず、エラータ報告に特別な指示が記載されていないかどうかよくお読みください。指示がある場合には、それに従ってインストールを実行してください。エラータ更新による変更の適用についての全般的な解説は、 項3.1.5 を参照してください。

3.1.2. Red Hat エラータウェブサイトを使用

セキュリティエラータ報告がリリースされると、Red Hat のエラータウェブサイト、http://www.redhat.com/security/で公表されます。このページからご使用のシステムの製品とバージョンを選択して、ページの上部にある security を選択すると、Red Hat Enterprise Linux セキュリティアドバイザリーのみを表示します。いずれかのアドバイザリーの概要がシステムで使用しているパッケージについて記述している場合は、その概要をクリックすると詳細が見られます。

詳細ページには、セキュリティ不正アクセスについての解説と、セキュリティの欠陥を修正するパッケージ更新と同時に行なう必要がある特別の指示について記載されています。

更新されたパッケージをダウンロードするには、そのリンクをクリックして Red Hat Network にログインし、パッケージ名をクリックしてハードドライブに保存します。/tmp/updatesなど新しいディレクトリを作成して、ダウンロードしたすべてのパッケージはそこに保存することを強くおすすめします。

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

すべての Red Hat Enterprise Linux パッケージは Red Hat, Inc. GPG キーで署名されています。GPG とは GNU Privacy Guard または GnuPG の略で、配信ファイルの正真性を保証するために使用されるフリーソフトフェアパッケージです。例えば、Red Hat が保持するプライベートキー(秘密鍵)はパッケージをロックし、パブリックキーはパッケージのロックを外して検証します。Red Hat が配信するパブリックキーが RPM 検証中にプライベートキーと合致しない場合、そのパッケージは変更が加えられている可能性があるため信用できません。

Red Hat Enterprise Linux の RPM ユーティリティは自動的に RPM パッケージの GPG 署名の検証を試みてからそれをインストールします。Red Hat の GPG 鍵がインストールされていない場合は、Red Hat Enterprise Linux インストール CD-ROM などの安全で静的な場所からインストールしてください。

CD-ROM が /mnt/cdrom にマウントされていると仮定して、次のコマンドを使いキーリングにインポートします(システムの信頼できる鍵のデータベース)。

rpm --import /mnt/cdrom/RPM-GPG-KEY

RPM 検証用としてインストールされたすべての鍵の一覧を表示するには、次のコマンドを実行します。

rpm -qa gpg-pubkey*

Red Hat 鍵の場合、出力は以下のようになります。

gpg-pubkey-db42a60e-37ea5438

特定の鍵についての詳細を表示するには、rpm -qiコマンドを入力、その後に前のコマンドからの出力をつけます。

rpm -qi gpg-pubkey-db42a60e-37ea5438

RPM をインストールする前に、RPMファイルの署名の検証を行なうことは極めて重要なことです。これにより Red Hat, Inc. のパッケージリリースに改変が加えられていないことを確認します。ダウンロードしたパッケージすべてを一度に検証するには、次のコマンドを発行します。

rpm -K /tmp/updates/*.rpm

各パッケージに対して GPG 鍵が検証に成功すると、このコマンドはgpg OK を返してきます。検証に失敗した場合は、正しい Red Hat パブリック鍵を使用しているか確認すると共に、コンテンツのソースも確認してください。GPG 検証に失敗したパッケージはインストールしないでください。第三者によって変更が加えられている可能性があります。

GPG 鍵の検証とエラータ報告に関連するすべてのパッケージのダウンロードを終了したら、シェルプロンプトでルートとしてこれらのパッケージをインストールします。

3.1.4. 署名パッケージをインストールする

次のコマンドを発行すると、ほとんどのパッケージのインストールを安全に行うことができます(カーネルパッケージを除く)。

rpm -Uvh /tmp/updates/*.rpm

カーネルパッケージの場合には、次のコマンドを使用します。

rpm -ivh /tmp/updates/<kernel-package>

上記の例にある<kernel-package>の部分には、 カーネルPRM の名前を入れてください。

新しいカーネルを使用してマシンが安全にリブートされたら、次のコマンドを使用して古いカーネルを削除することができます。

rpm -e <old-kernel-package>

上記の例にある<old-kernel-package>は、古いカーネルRPM の名前を入れてください。

注記注記
 

古いカーネルを削除する必要性はありません。デフォルトのブートローダ GRUB では、複数のカーネルをインストールしてから、ブート時にメニューから選ぶことができます。

重要重要
 

セキュリティエラータをインストールする前に、必ず、エラータ報告に特別な指示が記載されていないかどうかよくお読みください。指示がある場合には、それに従ってインストールを実行してください。エラータ更新による変更の適用についての全般的な解説は、 項3.1.5 を参照してください。

3.1.5. 変更を適用する

Red Hat Network のエラータウェブサイトまたは Red Hat のエラータウェブサイトからセキュリティエラータを ダウンロードしてインストールしたら、古いソフトウェアの使用を中止し、新しいソフトウェアの使用を開始することが大切です。どのようにするかは更新したソフトウェアの種類によります。以下の一覧では、ソフトウェアの全般カテゴリを項目別に別け、パッケージアップグレード後の更新バージョンの使用方法について説明します。

注記注記
 

全般的には、ソフトウェアパッケージの最新バージョンが使用されていることを確認するには、システムをリブートするのが一番確実な方法です。しかし、システム管理者の場合、常にこの方法がとれるとは限りません。

アプリケーション

ユーザースペースのアプリケーションとはシステムのユーザーが開始できるすべてのプログラムのことです。一般的に、このようなアプリケーションはユーザー、スクリプト、自動化タスクユーティリティなどによって起動されたときのみ使用され、持続し続けるものではありません。

こうしたユーザースペースのアプリケーションを更新したら、システムのアプリケーションすべてのインスタンスを中止し、もう一度そのプログラムを起動し直し更新したバージョンを使用します。

カーネル

カーネルは Red Hat Enterprise Linux オペレーティングシステムの核となるソフトウェアコンポーネントです。カーネルはメモリ、プロセッサ、周辺機器などへのアクセスを管理する他、すべてのタスクをスケジュールします。

中心的な役割を果たすため、カーネルはコンピュータを停止せずには再スタートできません。したがって、カーネルの更新バージョンはシステムがリブートするまで使用できません。

共有ライブラリ

共有ライブラリはglibcなどのコードのユニットで、 複数のアプリケーションやサービスによって使用されます。共有ライブラリを利用しているアプリケーションは、一般的に、初期化されたとき共有コードを読み込むので、更新したライブラリを使用するアプリケーションはすべて停止して起動し直す必要があります。

特定ライブラリに対してリンクする実行中のアプリケーションを見つけるには、次の例のように、lsof コマンドを使用します。

lsof /usr/lib/libwrap.so*

このコマンドは、ホストアクセス制御用 TCP ラッパーを使用するプログラムで稼働中のプログラム一覧を返してきます。従って、tcp_wrappersパッケージを更新した場合には、これでリストアップされたプログラムはすべて停止して再起動し直す必要があります。

SysV サービス

SysV サービスは、ブートプロセスのあいだ起動される持続的サーバープログラムです。SysV サービスの例としては、sshdvsftpdxinetdなどがあります。

こうしたプログラムは、たいていメモリ内でマシンがブートしているあいだずっと持続しているため、パッケージをアップグレードしたら各更新 SysV サービスは停止して、再起動する必要があります。これはサービス設定ツールで行なうか、シェルプロンプトでルートとしてログインして、次のように/sbin/serviceコマンドを発行します。

/sbin/service <service-name> restart

上記の例にある<service-name>の部分は、sshdなどのサービス名を入れてください。

サービス設定ツールについての詳細は、Red Hat Enterprise Linux システム管理ガイドにあるサービスへのアクセスの制御の章を参照してください。

xinetd サービス

xinetd スーパーサービスに制御されているサービスは、アクティブな接続があるときのみ実行します。xinetd に制御されているサービスの例としては、Telnet、IMAP、POP3 などがあります。

こうしたサービスの新規インスタンスは、新しいリクエストを受信する度にxinetd で起動されるため、アップグレード後の接続は更新されたソフトウェアで扱われます。しかし、xinetd制御のサービスをアップグレードするときにアクティブな接続があった場合は、古いバージョンで扱われます。

xinetdが制御する特定サービスの古いインスタンスを停止するには、サービスのパッケージをアップグレードしてから現在実行中のプロセスすべてを停止します。プロセスが実行しているか確認するには、psコマンドを使用してから、killコマンドまたはkillallコマンドで現在のサービスのインスタンスを停止します。

例えば、セキュリティエラータの imapパッケージがリリースされた場合、パッケージをアップグレードしたら、シェルプロンプトにルートとして次のコマンドを入力します。

ps -aux | grep imap

このコマンドはすべてのアクティブな IMAPセッションを返してきます。これから、個々のセッションを次のコマンドを発行して終了できます。

kill -9 <PID>

上記の例にある <PID>の部分には、IMAP セッションのプロセス ID 番号 (ps コマンドの2番目の項目)を入れます。

すべてのアクティブな IMAPセッションを終了するには、次のコマンドを発行します。

killall imapd

xinetdについての全般情報は、 Red Hat Enterprise Linux リファレンスガイドにある TCP ラッパーとxinetdの章を参照してください。