« 今日の俺 | メイン | 平穏な近況 »

2006年07月14日

せっかくだからTOMOYO Linux III

いよいよポリシーの作成に入りますな。
・ポリシーの作成準備
TOMOYOはポリシーを定義してセキュリティ制限をかけるというより、
学習モードで許可する動作を実行するー>その動作を覚えさせるー>強制モードでそれ以外をストップ
って感じの流れになっているので、とりあえずは許可する動作を教え込む必要がある。

/root/security/manager.txtへのプログラムの指定として、該当ファイルに


/root/ccstools/loadpolicy
/root/ccstools/editpolicy
/root/ccstools/setlevel



シャットダウン処理のときの割り込み処理として、haltスクリプトの最後の方にある


exec $command $HALTARGS


のところを、


/root/ccstools/savepolicy a
exec $command $HALTARGS


と変更。

アクセスログの出力は、んー普通に/var/logあたりに入れておくか。


# mkdir -p /var/log/tomoyo


として、ログ保存ディレクトリを作成。
とりあえずそのまま/etc/rc.localに以下を記述。ログの保存先は趣味で*.logにする。


/root/ccstools/ccs-auditd /var/log/tomoyo/accept.log /var/log/tomoyo/reject.log



んで、logrotateさせるために、/etc/logrotate.d/tomoyoファイルを作成し、以下の設定を記述。


/var/log/tomoyo/*.log {
weekly
rotate 9
missingok
notifempty
nocreate
}



・プロファイルの作成
要するに、TOMOYOではプロファイル設定を指定することで、動作モードを切り替えることができるというものか。
設定パラメータの詳細はここを参照してもらうとして、
とりあえず幾つかポリシーを設定してみようか。

ファイルアクセスを学習モード、ドメイン別ポリシー違反を表示、
SYAORANを使用しているためDENY_CONCEAL_MOUNT=3は設定。
あと個人的に気になった、TCP接続の使用とカーネルモジュールの使用、
chrootで使用可能なディレクトリというものを設定してみる。

/root/security/profile1.txt


DENY_CONCEAL_MOUNT=3
MAC_FOR_FILE=1
TOMOYO_VERBOSE=1
MAC_FOR_CAPABILITY::inet_tcp_create=1
MAC_FOR_CAPABILITY::use_kernel_module=1
RESTRICT_CHROOT=1



・例外ポリシーの作成
幾つか例外的に指定するファイルの設定をする。
/root/ccstools/make_exception.sh を実行すると、幾つか自動的にパターンを生成していくれるので、
それを確認/登録しつつ設定を進めるとよさそうです。
設定の記述は/root/security/exception_policy.txt に行うよう。

パス名のパターン登録
file_patternというキーワードで列挙する。
何かのログファイルや一時ファイルのように、「同じようなファイル名書式だけど絶対的には違うファイル名」のパターンを登録する。
<例>


/tmp/crontab.XXXXkzlx32、/tmp/crontab.XXXXhkdnwzなど
=>file_pattern /tmp/crontab.XXXX\?\?\?\?\?\?



すべてのプログラムに読み込みを許可するファイル
allow_readというキーワードで列挙する。
共有ライブラリなど、無条件で読み込み許可をするためのファイルですね。

ドメイン遷移履歴をリセットするプログラム
initializer というキーワードで列挙する。
ここで定義されたプログラムは、kernelというドメインの直下で動作するようになる……らしい。
うーん、意味合いはよくわかりません<何
trust_domain
という定義がmake_exception.shで生成された設定にあるので、
間接的に信頼済みドメインで動作するようになる、という意味合いになるのかな。

電源オフの処理に必要なアクセス許可
電源オフ時に必要な処理は学習できないので、あらかじめ定義しておく必要があるとのこと。
これもmake_exception.shで生成された設定を見ると
trust_domain /etc/rc.d/init.d/halt /sbin/halt
というものがあるので、haltが許可されるようにすればいいのかな。

とりあえず自動生成されたexception_policy.txtをざっと確認して、そのまま適用させてみる。
どうも、既にexception_policy.txtは作成されていたようで、


initializer /sbin/hotplug
initializer /sbin/modprobe


というエントリが記述されていた。
その後ろに自動生成されたものを追記。

logrotate への対応
これはそのまま、initializer /usr/sbin/logrotateを例外ポリシーに。
コマンドラインから起動させて学習させるから……らしい。

prelink への対応
prelinkを止める……ということらしいが、とりあえずは変更なしにしておく。
ってかprelinkがよくわかっていないからな

anacron への対応
initializer /usr/sbin/anacron
initializer /usr/bin/run-parts
を例外ポリシーにする。
これも、コマンドラインからanacronを実行して学習させるから。

cron への対応
cronがrun-partsを実行するため、
initializer /usr/bin/run-parts
を例外ポリシーにする。

で、学習させている間のみ、/etc/crontabのrun-partsの実行感覚を


*/5 * * * * root run-parts /etc/cron.hourly
*/5 * * * * root run-parts /etc/cron.daily
*/5 * * * * root run-parts /etc/cron.weekly
*/5 * * * * root run-parts /etc/cron.monthly


というように5分間隔に設定しなおす。
学習が終わったら元に戻す。

・Targeted Policy への対応
どうもSELinuxのポリシー設定? のような動作っぽいのだけども
基本知識が不足しているのでパス<何

ポリシーの作成
さて、いよいよ学習モードでの起動に入りますよ。
とりあえず再起動して、カーネルパラメータに、
さっき追加したプロファイルを読み込ませるためにccs=1を指定して起動。
grubの選択画面でEnterを押してからカーネルを選択してaキー、最後にccs=1。

logrotate への対応
コマンドラインから logrotate を起動。
# /usr/sbin/logrotate -f /etc/logrotate.conf

anacron への対応
コマンドラインから anacron を起動
# anacron -dfn

………………Job `cron.daily' startedから戻ってこなくなりました
むぅ……/var/log/tomoyo/以下のファイルも、あることはあるんだがサイズ0のままだ。
/root/security/exception_policy.txtが


initializer /sbin/hotplug
initializer /sbin/modprobe


だけに戻っている。っていうかこのファイル自体はリンクで、新しく作られたファイルにリンクし直されたというのが正しいか。

ってか、カーネルパラメータにTOMOYO_NOLOAD を忘れていたか……


とりあえず再起動。カーネルパラメータにccs=1 TOMOYO_NOLOADと指定して起動。
……しても進展なし。
うーん、ccs-auditdは起動しているし、許可/拒否ともにログを出力するようにしているから、
どちらかにログが出ると思うんだが……


とりあえず夜が明けたので、ここまで。

投稿者 kagerou : 2006年07月14日 03:46

Twitter

この記事をTwitterでつぶやく

トラックバック

このエントリーのトラックバックURL:
http://scriptlife.hacca.jp/cgi-bin/MT/mt-tb.cgi/426

コメント

 こんにちは。

>ccs=1
確認ですが、CCS=は大文字で指定されていますよね?
小文字だと認識されないのでデフォルトの
/root/security/profile0.txt を読み込もうとしてしまいます。

>どうもSELinuxのポリシー設定? のような動作っぽいのだけども
SELinux と同様に Targeted と名乗ってますが、 SELinux とは無関係です。
これは、システム全体ではなく特定のプロセス(例えば Web サーバと
SSH サーバのみ)に対してだけ強制アクセス制御を適用する形のポリシーです。
Targeted にすれば、例えば /etc/crontab の編集や anacron や logrotate の
手動実行をする必要がなくなります。
Targeted ポリシーを作成する具体的な手順としては、まず例外ポリシーで
initializer /sbin/init と trust_domain <kernel> /sbin/init を
指定して、その他の initializer 指定を取り消します。これにより、
/sbin/init と /sbin/init から実行される全てのプロセスが
強制アクセス制御の適用対象外となります。
その上で、 initializer /usr/sbin/httpd を追加してやると
/usr/sbin/httpd は <kernel> /usr/sbin/httpd ドメイン、
つまり <kernel> /sbin/init ドメインの外へ移動し、
(trust_domain <kernel> /usr/sbin/httpd という指定が無いので)
/usr/sbin/httpd は強制アクセス制御の適用対象となります。
ぐっとお手軽になりますので、慣れるまでは Targeted にしても構いませんよ。

>っていうかこのファイル自体はリンクで、新しく作られたファイルにリンクし直されたというのが正しいか。
ごめんなさい。手順書に注意書きをしておくべきでしたね。
これは、 TOMOYO Linux カーネルで起動して
「/etc/rc.d/init.d/halt スクリプトの修正」と
「/root/security/exception_policy.txt の作成」をしたために、
シャットダウン時に実行された /root/ccstools/savepolicy により
/root/security/exception_policy.txt が更新されてしまったためです。
とりあえず、 /root/security/exception_policy.txt を作成あるいは更新をしたら
/root/ccstools/loadpolicy e を実行してカーネルに読み込むようにしてください。

>/var/log/tomoyo/以下のファイルも、あることはあるんだがサイズ0のままだ。
CCS= を ccs= と指定してしまった場合は /root/security/profile0.txt を読み込もうとする
→存在しないのでデフォルト(全てのアクセス制御を無効)が使われる
→無効なのでアクセス許可ログも拒否ログも生成されないということになります。

投稿者 熊猫 : 2006年07月15日 20:15

こんにちわ。毎度ありがとうございます_| ̄|○

> CCS=は大文字で
ビンゴです。合点がいきました_| ̄|○
引数の類は小文字で指定する方がなんとなく慣れているから……


> /root/ccstools/loadpolicy e
これは実行していませんでした。

投稿者 かげろ : 2006年07月16日 17:07

コメントしてください




保存しますか?