Last modified: $Date: 2006-11-25 10:18:46 +0900 (Sat, 25 Nov 2006) $
システムの振る舞いをポリシーにより制限しているため、パッケージのアップデートに伴いポリシーの更新が必要になる場合があります。
以下のいずれかの場合に、ポリシーの更新が必要になります。
学習モードを使ってポリシーを最初から再取得するのが理想です。しかし、現実には、一度強制モードでの運用を開始したシステムを強制モード以外に変更することは困難です。アプリケーション単位で強制モードにするかどうかを指定できたとしても、強制モードではないアプリケーションの制御を奪われたら意味がありません。例えば、 http サーバのアクセス許可を再取得するために http サーバだけを学習モードにできたとしても、システム全体が無防備になってしまうわけです。そのため、 TOMOYO Linux では、強制モードのまま、パッケージのアップデートとポリシーの修正を行います。
TOMOYO Linux には、強制モードのままポリシーの修正を行うためのツールが付属しています。これらのツールを使うことで、軽微な変更ならば、ポリシーを最初から再取得することなくシステムの運用を継続できます。ただし、これらのツールは、全てのケースに対応できるとは限らず、最適なポリシーであることを保証するものではありません。
/root/security/manager.txt に以下の内容が含まれていることを確認してください。含まれていない場合は追加して再起動する必要があります。
/root/ccstools/ld-watch /root/ccstools/ccs-queryd |
ウィンドウを3つ開き、信頼済みドメインへ遷移します。以後、これらのウィンドウをそれぞれ Window-1 Window-2 Window-3 と表記します。
まず、 Window-1 に切り替えます。そして、ポリシーに違反した場合に直ちに拒絶するのではなく管理者の判断を待つ設定に変更します。以下の例では60秒としています。
/root/ccstools/setlevel MAX_ENFORCE_GRACE=60 |
そして、以下のコマンドを起動してください。
/root/ccstools/ccs-queryd |
ccs-queryd は、ポリシー違反の発生を検知して、アクセス要求の内容を表示します。管理者は、そのアクセス要求の妥当性を判断して、アクセスを許可するか否か、ドメイン用ポリシーに追加するか否かを指定することができます。
無条件にアクセス要求を許可しないようにしてください。ポリシー違反の原因がパッケージのアップデートによるものとは限らず、侵入者の攻撃によるものである可能性があるからです。もし、侵入者の攻撃によって発生したアクセス要求に対してアクセスを許可してしまった場合、侵入されてしまいます。
なお、 MAX_ENFORCE_GRACE 秒以内にアクセスを許可する指示を行わなかった場合、そのアクセス要求は拒否されてしまいます。そのため、 MAX_ENFORCE_GRACE の時間は判断するのに十分な値を指定してください。また、ポリシー違反が発生してから MAX_ENFORCE_GRACE 秒以内に応答する必要があるため、メッセージが表示されたことを見逃さないようにするためにウィンドウの配置位置に注意してください。
次に、 Window-2 で以下のコマンドを起動してください。
/root/ccstools/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 で終了させてください。
次に、手作業でポリシーを保存してください。
/root/ccstools/savepolicy a |
以下のコマンドを実行して、存在しないパス名の一覧を取得します。
/root/ccstools/findtemp --all < /root/security/exception_policy.txt |
テキストエディタで /root/security/exception_policy.txt を開き、存在しない共有ライブラリファイルに対する allow_read 等の無意味なアクセス許可を削除してください。そして、以下のコマンドを実行して例外ポリシーを再読み込みしてください。
/root/ccstools/loadpolicy ef |
以下のコマンドを実行して、存在しないパス名の一覧を取得します。
/root/ccstools/findtemp --all < /root/security/domain_policy.txt |
もし、大量のパス名が表示された場合は注意が必要です。パッケージのアップデートにより、ディレクトリ名ごとパス名が変化してしまった可能性があります。
例えば、 Fedora Core 4 に付属の logwatch は、アップデートによりパス名が変化します。 Fedora Core 4 をインストールした直後の logwatch は /etc/log.d/ ディレクトリに設定ファイルなどを保持しています。しかし、アップデートにより /etc/logwatch/ ディレクトリに設定ファイルなどを保持するようになり、 /etc/log.d/ ディレクトリは削除されてしまいます。
規則性が明確な場合は、テキストエディタで /root/security/domain_policy.txt を編集してください。そして、以下のコマンドを実行してドメイン用ポリシーを再読み込みしてください。
/root/ccstools/loadpolicy df |
次に、強制アクセス制御の対象となっているプログラムの動作を確認するために、一通りの操作を試してください。もし、アクセス許可の不足が検出された場合は Window-1 に表示されますので、 Window-1 の監視を忘れないようにしてください。
動作確認が完了したら、再度ポリシーを保存してください。
/root/ccstools/savepolicy a |
そして、ポリシーに違反した場合に管理者の判断を仰ぐことなく拒絶する設定に戻します。
/root/ccstools/setlevel MAX_ENFORCE_GRACE=0 |
最後に、 Window-1 で動作中の ccs-queryd を Ctrl-C で終了させてください。
以上でパッケージの更新作業は完了です。ウィンドウを3つとも閉じてください。