Info: Version 1.4 is available.

TOMOYO Linuxメンテナンス手順

Last modified: $Date: 2011-07-01 13:55:23 +0900 (Fri, 01 Jul 2011) $

パッケージのアップデートについて

システムの振る舞いをポリシーにより制限しているため、パッケージのアップデートに伴いポリシーの更新が必要になる場合があります。

以下のいずれかの場合に、ポリシーの更新が必要になります。

学習モードを使ってポリシーを最初から再取得するのが理想です。しかし、現実には、一度強制モードでの運用を開始したシステムを強制モード以外に変更することは困難です。ドメイン単位で強制モードにするかどうかを指定できますが、強制モードではないドメインに属しているアプリケーションの制御を奪われたら意味がありません。例えば、 http サーバのアクセス許可を再取得するために http サーバだけを学習モードにするだけでも、システム全体が無防備になってしまうわけです。そのため、 TOMOYO Linux では、強制モードのまま、パッケージのアップデートとポリシーの修正を行います。

TOMOYO Linux には、強制モードのままポリシーの修正を行うためのツールが付属しています。これらのツールを使うことで、軽微な変更ならば、ポリシーを最初から再取得することなくシステムの運用を継続できます。ただし、これらのツールは、全てのケースに対応できるとは限らず、最適なポリシーであることを保証するものではありません。

手順

ウィンドウを3つ開きます。以後、これらのウィンドウをそれぞれ Window-1 Window-2 Window-3 と表記します。

まず、 Window-1 に切り替えます。そして、対話的に許可したいプロファイルの ALLOW_ENFORCE_GRACE を 1 に変更します。例えば、プロファイル番号 3 について設定したい場合は以下のようになります。

setlevel 3-ALLOW_ENFORCE_GRACE=1

プロファイルの内容を setlevel コマンドで変更するのではなく、 ALLOW_ENFORCE_GRACE の設定だけが異なる強制モード用のプロファイルを setprofile コマンドでドメインに割り当てても構いません。

次に、以下のコマンドを起動してください。

ccs-queryd

ccs-queryd は、ポリシー違反の発生を検知して、アクセス要求の内容を表示します。管理者は、そのアクセス要求の妥当性を判断して、アクセスを許可するか否か、ドメイン用ポリシーに追加するか否かを指定することができます。

無条件にアクセス要求を許可しないようにしてください。ポリシー違反の原因がパッケージのアップデートによるものとは限らず、侵入者の攻撃によるものである可能性があるからです。もし、侵入者の攻撃によって発生したアクセス要求に対してアクセスを許可してしまった場合、侵入されてしまいます。

ALLOW_ENFORCE_GRACE が 0 に設定されているまたは ccs-queryd が動作していない場合、ポリシー違反が発生するとそのアクセス要求は直ちに拒否されます。 ALLOW_ENFORCE_GRACE が 1 に設定されていてさらに ccs-queryd が動作している場合、ポリシー違反が発生しても管理者が応答するまでそのアクセス要求は保留状態となります。そのため、 ccs-queryd を動作させたままログアウトしないでください。

次に、 Window-2 で以下のコマンドを起動してください。

ld-watch

ld-watch は、 /etc/ld.so.cache に登録されている共有ライブラリファイルの情報が変更された場合に、共有ライブラリを自動的に allow_read ディレクティブを使用して例外ポリシーに追加します。これにより、不特定多数のプログラムからアクセスされるライブラリファイルのパス名が変化した場合に、ライブラリファイルを読み込めないことが原因でプログラムが動作しなくなる状況を回避することができます。

次に、 Window-3 に切り替えて、パッケージのアップデートを行うためのコマンドを実行します。

yum を使用している環境ならば yum update を、 apt を使用している環境ならば apt-get update および apt-get upgrade を実行します。

パッケージをアップデート中に、デーモンの再起動などでポリシー違反が発生しますので、 Window-1 に注目してください。

パッケージのアップデートが完了したら、10秒ほど待ってから、 Window-2 で動作中の ld-watch を Ctrl-C で終了させてください。

次に、手作業でポリシーを保存してください。

savepolicy

以下のコマンドを実行して、存在しないパス名の一覧を取得します。

findtemp < /etc/ccs/exception_policy.txt

テキストエディタで /etc/ccs/exception_policy.txt を開き、存在しない共有ライブラリファイルに対する allow_read 等の無意味なアクセス許可を削除してください。そして、以下のコマンドを実行して例外ポリシーを再読み込みしてください。

loadpolicy ef

以下のコマンドを実行して、存在しないパス名の一覧を取得します。

findtemp < /etc/ccs/domain_policy.txt

もし、大量のパス名が表示された場合は注意が必要です。パッケージのアップデートにより、ディレクトリ名ごとパス名が変化してしまった可能性があります。

例えば、 Fedora Core 4 に付属の logwatch は、アップデートによりパス名が変化します。 Fedora Core 4 をインストールした直後の logwatch は /etc/log.d/ ディレクトリに設定ファイルなどを保持しています。しかし、アップデートにより /etc/logwatch/ ディレクトリに設定ファイルなどを保持するようになり、 /etc/log.d/ ディレクトリは削除されてしまいます。

規則性が明確な場合は、テキストエディタで /etc/ccs/domain_policy.txt を編集してください。そして、以下のコマンドを実行してドメイン用ポリシーを再読み込みしてください。

loadpolicy df

次に、強制アクセス制御の対象となっているプログラムの動作を確認するために、一通りの操作を試してください。もし、アクセス許可の不足が検出された場合は Window-1 に表示されますので、 Window-1 の監視を忘れないようにしてください。

動作確認が完了したら、再度ポリシーを保存してください。

savepolicy

そして、 Window-1 で動作中の ccs-queryd を Ctrl-C で終了させてください。

最後に、プロファイルの ALLOW_ENFORCE_GRACE を 0 に戻します。例えば、プロファイル番号 3 について設定した場合は以下のようになります。

setlevel 3-ALLOW_ENFORCE_GRACE=0

以上でパッケージの更新作業は完了です。ウィンドウを3つとも閉じてください。

sflogo.php