ふう。チョコ食べたので続きを投稿
ちなみに、前回のhoge.te ファイルのアウトラインについてはこちら。
んで、簡単に整理しておきましょう。
(1)お約束の冒頭
===
policy_module(<モジュール名>, <version番号>)
===
例えば以下みたいな形。
policy_module(hoge,0.0.1)
audit2allowでモジュールを生成すると、少し書式が違うが新しいのはこっちの書式らしい。
(2)require節
ルール定義や、オリジナルのタイプ定義の際に必要な属性はここで読み込んでおこう。
require{
type <既存のタイプ名>[,<既存のタイプ名2>...];
attribute <既存の属性名>;
}
タイプ・attributeともに、「,」で区切って列挙できるようすです。
ここまでのところは書式概要はシンプル・・・な気がします。makeして、「unknownだ」といわれたら追加してあげればよさそうなので、ミスも起こりにくいのかな・・・と(作業効率はともかくとして)。
(3)定義節
(3)-1タイプ定義
A:タイプ・属性だけの場合
----
type hoge_t[,attribute]
----
B:エイリアスを指定する場合
type hoge_t alias fuga_t; //ひとつだけエイリアスを指定する場合
type hoge_t alias {fuga_t other_t};
C:タイプ遷移の定義
---
type_transition <プロセスのタイプ(a)> <ファイル・ディレクトリのタイプ(b)> : <class(c)> <新しいタイプ(d)>
---
ここで、classと記載されているが、ここでは「ファイルなのか、ディレクトリなのか、シンボリックリンクなのか・・・)という指定が入るものと理解しておく。
「(a)のプロセスが、(b)の下にある(c)を作成した場合に、その(c)のコンテクストのタイプを(d)にする。」ということ。
例えば、unconfined_tタイプのプロセスが、hoge_home_tディレクトリ以下にファイルを作った場合にhoge_tタイプのファイルを作成させる・・というタイプ遷移を指定したければ、以下のようになる。
type_transition unconfined_t hoge_home_t:file hoge_t;
===
実例を作ってやってみる。
]# cd /root/mypolicy
mypolicy]# vi hoge.te
policy_module(hoge,0.1.0)
require{
type unconfined_t;
attribute file_type;
}
type hoge_t, file_type;
type hoge_home_t, file_type;
type_transition unconfined_t hoge_home_t:file hoge_t;
===
これで(まだ、何も許可していないがhoge_t、hoge_home_tというタイプの定義と、タイプ遷移の定義までは出来たことになる。
テスト用に特定のディレクトリをhoge_home_t として試すために、一度コンパイル=>ロードしてみる。
mypolicy]# ls
Makefile hoge.te
mypolicy]# make
(出力略)
Creating targeted hoge.pp policy package
rm tmp/hoge.mod.fc tmp/hoge.mod
mypolicy]# ls
Makefile hoge.fc hoge.if hoge.pp hoge.te tmp
===
hoge.if/hoge.pp/hoge.fcファイルが生成されているのが分かる。hoge.ppが、ロードすべきモジュールファイル。semodule コマンドを使ってロードする。
===
mypolicy]# semodule -i hoge.pp
mypolicy]# semodule -l | grep hoge
hoge 0.1.0
===
どうやらロードはされた様子。ここで、ちょっとテストしてみます。
===
mypolicy]# mkdir /root/hoge
mypolicy]# chcon -t hoge_home_t /root/hoge
mypolicy]# ls -Zd /root/hoge/
drwxr-xr-x root root root:object_r:hoge_home_t /root/hoge/
mypolicy]# touch /root/hoge/fuga
mypolicy]# ls -Z /root/hoge/fuga
-rw-r--r-- root root root:object_r:hoge_t /root/hoge/fuga
===
シンプルながらも、とりあえず意図したファイルが生成できた。まだ、何もルール書いてないけど・・・。
書式と適用の概要を考えるのならこれでいいかな。
(4)ほい。ポリシーの本体といっても良い、allow行についてですね
allow <source> <target>:<class> <許可する処理内容>
例えば以下みたいな??
===
allow hoged_t hoge_t:file {read write getattr }
allow hoged_t hoge_home_t:dir {read getattr search }
===
1行目では、hoged_t(まだ定義してませんが、特定のプロセスのタイプだとお考えください)が、hoge_t のファイルに読み・書き・属性取得をすることを許可。
2行目は、hoge_home_tディレクトリ内のファイルのread,getattr,search を許可してみている。
何か、実例を考えないとallow行の実験はむずいな(まぁ、ソースがあるので・・・特定のサービスをはずして作ったルールを適用したシステムを作ればいいんだと思うが・・・どこでも検証できるわけではなくて面倒だ)。
少し考えるべく、何か夜食を食べてみる(すぐに再開するかどうかは微妙)
SELinuxの最近のブログ記事
整理でもしておこう。
どうしても、後回し後回し・・・になってしまうからなぁ。
RHEL5.1 上で今回は学習。
インストールしたパッケージは以下。
■. selinux-policy-2.4.6-104.el5.src.rpm
apolの挙動を追っかけるとともに、policy.confを見てみたかったので・・・。入れてみました。
■.setool-gui, setool
こちらは、学習用に入れてみました。
■.selinux-policy-devel
お題目上、これを入れておかないわけには行かないでしょう。
続きを読む: SELinux policy記述概要など1
くだらんことに、某SNSでは、講座受けてきたよ。難しいね。
という日記を書くと「ゆるい日記を求む・・・」というダメだしが出てしまうようなので?こちらに退避しつつ、SNSで書いてる内容がゆるいということを考えてみようか。
ただし??。当然のことながらタイトルどおり高見に上り詰めるつもりはまったくない。幅広く、かつ、さほど浅くもない程度に手出しするのがおいらの性分なの。
ということで、最近仮想化の日記も書いてないにもかかわらず・・・。ここはSELinuxでもシリーズ化(シリーズがどこまで続くかはわからんちん)。
続きを読む: 遅まきながら、目覚めて高見の見物。
他サイト検索
カスタム検索
