ハードリンクの扱い、再考(2)
日本はLinux Worldか。私はこちらで黙々と開発。。
sourceforge.netのshellサーバが昨日からずっと落ちてて、seedit.sourceforge.netの更新ができないorz
さて、またも、ハードリンクの扱いが気になる。
http://d.hatena.ne.jp/himainu/20060519#1148069594
より
- seedit-restoreconのふるまい
c)はまずい気がしてきた。
ディレクトリ単位のアクセス制御してるとき、ハードリンクのラベルが保存されない。
例えば、
/foo/secret/
以下に、機密情報が格納されるとする。
foo_secret_tタイプが付与される。
/foo/secret/foo.txtのハードリンクが、
/bar/foo.txtに作成されたとする。
/bar/foo.txtのラベルも、foo_secret_t。
が、
seedit-restorecon /bar
が走ると、/foo/secret/foo.txtのラベルがbar_tになってしまう!
これはまずい。
条件「c」ははずすべきだ。
そうなると、影響を受けるのは、
「元からあるファイル」の条件、
両方記述されてない場合、ディレクトリの名前が後のほうが優先。
allow /etc/shadow,/var/shadow両方がどこにも書いてない時。
/etc/shadow,/var/shadowには、var_tが付与される。-> /var/shadowを「元からあるファイル名」
★しかし、条件c)により、どちらかに対するallowが書かれ次第、ラベルが付与されなおされる。★
の★★部分が無くなることに。しかし、★★が無くなったほうが自然。
「元からあるファイル」に設定をしなければいけない、という条件が徹底されるので。
「元からあるファイル」がどれだか分かるよう、
「ハードリンク警告」を出すようにしたほうがいいのかもしれない。
- 同じディレクトリに存在するハードリンクをテスト。。
/etc/shadow /etc/z_shadow
という名前で作られてしまうと?
テスト結果OK。
allow /etc/z_shadow r;を加えて、/etc/z_shadowへのラベルを生成しても。/etc/z_shadowは、etc_shadow_tのまま保存された。
まとめ ハードリンクの扱い(改訂版)
- ルール: ハードリンクへのアクセス制御「元からあるファイル名を記述する必要がある」
- 「元からあるファイル」の基準
以下、/etc/shadow, /var/shadowがハードリンクと仮定。
- deny/allowが明示的に記述されたファイルについては、そのファイルのラベルが付与される。
allow /etc/shadowは書かれてるが、
allow /var/shadowはどこにも書かれてないと、
etc_shadow_tが付与される。-> /etc/shadowを「元からあるファイル名」
- 両方記述されてる場合、名前が若いほうが優先。
allow /etc/shadow
allow /var/shadowが記述されていると、
etc_shadow_tが付与。-> /etc/shadowを「元からあるファイル名」
#chroot環境は/var/に置くことが多いので..
- 両方記述されてない場合、ディレクトリの名前が後のほうが優先。
allow /etc/shadow,/var/shadow両方がどこにも書いてない時。
/etc/shadow,/var/shadowには、var_tが付与される。-> /var/shadowを「元からあるファイル名」
- 今の実装だと、ホームディレクトリ間のハードリンクは保存されない。
- カギとなるのはseedit-restoreconプログラム。
- seedit-restoreconは、以下のラベルがついているファイルに対してラベルを張り替える
- a)親,先祖ディレクトリのラベルがついている時(default_t,rootdir_t含む)
- b)unlabeled_tがついてる時
- seedit-restoreconは、以下のラベルがついているファイルに対してラベルを張り替える