jumble

アクセスカウンタ

zoom RSS SELinuxと格闘 その3

<<   作成日時 : 2012/03/18 21:13   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

SELinuxと格闘 その3


前の記事

さて、設定されているポリシーの確認はどうすればいいのか。
このページによれば、以前はselinux-policy-targeted-sources.noarchをインストールすれば、TEファイルが展開されたらしい。
TEファイルはポリシーのソースファイルなので、それを見ればある程度の確認ができる。
もちろん、現実に動いているポリシーの確認にはならないのだが。
ただ、現在はポリシーがモジュール化されていて、それすらもできない状態のようだ。
モジュール化自身は進化なんだろうけど、確認する手段が全く得られないのも困ったものだ。
方法はあるはずなのだが、なかなか見つけられなかった。
前のページにも書いたが、"SELinux ポリシー 確認"ぐらいの検索で一発で出て欲しいものだ。
が、やっと見つけた。
それがこのページ
なるほど、"sesearch"というコマンドがあるらしい。
これがまさにドンピシャなようだ。
setools-consoleというパッケージにあるらしい。
とりあえず、yumでインストール。
setoolsというパッケージもあり、setools-consoleを含んでいるみたいだ。
実際には、こちらをインストールした方がいいかもしれない。
標準ではインストールされてなかった。
どうしてだ。
これこそ、絶対に標準で入れておくべきだと思うのだが。
そもそも、このコマンドを探し当てるのにどうしてこんなに苦労するんだ。
SELinuxを運用するなら、必ず必要となる気がするんだが。
このコマンドの情報が少ないということは、いかにSELinux自体が使われていないかということだと思う。
もしくは、使っていても場当たり的な運用しかしてないのだろう。
とりあえず、前回追加したポリシーがちゃんと反映されているか確認してみた。

$ sesearch --allow | grep 'xdm_t.*default_t'
    allow xdm_t default_t : file { read getattr open } ;
    allow xdm_t default_t : dir read ;

どうやら大丈夫なようだ。
このコマンドの使い方はこれから勉強だな。
上の方法も、もっとスマートなオプションの指定などがあるかもしれない。

さて、ここまではとりあえずうまくいっているが、本当にこれでいいのか?
今回、xdm_tというドメインが、default_tというタイプを使えるようにした。
ただし、default_tというタイプをもつリソースがどのくらいあるのかはほとんど把握していない。
そんな状況で、あるドメインにそれを使う許可を与えることは、セキュリティの穴を拡げることになる。
これは、場合によっては致命的になるかもしれない。
やっぱり、allow文を追加してポリシーを変更するというやりかたは、安易に使用するべきではない。
基本的には、許可を与える範囲が明確な場合に限るべきだろう。
ではこの場合はどうするべきなのか?
最初、自分で作成した/ext/iniというディレクトリとその配下のファイルのタイプをxdm_tに変更した。
その後、自分でそのディレクトリ配下にファイルを作れなくなったので一旦諦めた。
だが、xdm_tドメインが原因だからといって、タイプをxdm_tにするというのはほとんど根拠が無い。
この時、そもそもSELinuxをあまり理解していなかったのだ。
今回、/etc/profile.dにシェルスクリプトを置き、そこから/ext/iniのファイルを実行するようにしている。
そこまでは動いているわけだから、/etc/profile.dと同じタイプにすればいいわけだ。
で、調べる。

$ ls -dZ /etc/profile.d/
drwxr-xr-x. root root system_u:object_r:bin_t:s0 /etc/profile.d/

$ ls -Z /etc/profile.d/
-rw-r--r--. root root system_u:object_r:bin_t:s0 PackageKit.sh
-rw-r--r--. root root system_u:object_r:bin_t:s0 bash_completion.sh
...
-rw-r--r--. root root unconfined_u:object_r:bin_t:s0 zzz.sh

このzzz.shは自分が作ったもの。
なるほど、bin_tというタイプか。
ここまでは動いているわけだから、xdm_tドメインはbin_tタイプを使えるはずだ。
なおかつ、通常の作業でもbin_tを使えたわけだ。
一応確認。

$ sesearch --allow | grep 'xdm_t.*bin_t'
    allow xdm_t bin_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open } ;
    allow xdm_t bin_t : dir { ioctl read getattr lock search open } ;
    allow xdm_t bin_t : lnk_file { read getattr } ;
    allow xdm_t bin_t : dir { getattr search open } ;

こんな場合もsesearchは必要になる。
ということで、/ext/ini(とその配下)のタイプは、bin_tにすればうまくいきそうだ。
この方針の方が簡単だし、断然理に適っている。

で、まずは前回追加したポリシーパッケージは削除する。

# semodule -r xxxx.pp

一応消えたことを確認。

$ sesearch --allow | grep 'xdm_t.*default_t'

次に、/ext/iniディレクトリとその配下のタイプをbin_tにする。

# semanage fcontext -a -t bin_t '/ext/ini(/.*)?'
# restorecon -R /ext/ini

確認。

$ ls -dZ /ext/ini
drwxr-xr-x. root root unconfined_u:object_r:bin_t:s0 /ext/ini

$ ls -Z /ext/ini
-rw-r--r--. root root unconfined_u:object_r:bin_t:s0 null.sh

これで再起動し、問題がないことを確認した。

SELinuxは、仕組みそのものももちろんだが、定番的な運用の方向性みたいなものがかなり重要になりそう。
今回のように、基本的にはあるリソースのタイプを変更する方向で検討するべきだろう。
ではどれにするのか?
大抵の場合、対象のリソースと似た目的で使われるリソースがすでにあると思われる。
なので、それに合わせればいいのだ。
以上が自分なりに得た結論なのだが、それでいいのかな?
そういうことを、体系付けて書いてくれているサイトなどがあれば、非常に心強いのだが。

SELinuxは一筋縄ではいかないだろうから、これからも苦労するだろうな。
とりあえず、checkmoduleとsemodule_packageの不整合の問題は何とかしたい。

次に続く

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
プラダ トート
SELinuxと格闘 その3 jumble/ウェブリブログ ...続きを見る
プラダ トート
2013/07/06 00:13

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
SELinuxと格闘 その3 jumble/BIGLOBEウェブリブログ
文字サイズ:       閉じる