2007年11月22日

[selinux-users:02066] Re: setrlimitを許可するようなタイプはありませんでしょうか。

藤原@宴会1次会終了&今から...明日は三浦マラソン10キロです。

07/11/22 に Toshiharu Harada<haradats@xxxxx> さんは書きました:
> こんにちは。

犬の散歩お疲れさんです。

> 忙しくてたまらないのですが、このSELinux的な言葉が飛び交うスレッドが、

> ツボにはいってしまい耐えきれず出てきました。最高です。

まあ、間違いアリで食いつくのが私の身上なんで・・・

> 自分でやる時間はとれないのですが、TOMOYO Linuxを
> 使ってみたらどうでしょうか?

いいオプションですね。
SELinuxと共存もできるはずですし。

> On 11/22/2007 12:36 PM, KaiGai Kohei wrote:
> >>> chconでタイプを変更してもいいと思いますが、再起動したら、
> >>> 元に戻ってしまうと思います。
> >> えっ!そうだったんですか?
> >> (再起動時にrestoreconが実行されるのかな)
> >
> > いえ、再起動しても SELinux のセキュリティコンテキストは
> > 保持されますのでご安心を。
>
> TOMOYO Linuxならrestoreconは不要で、ラベル付けの状態を
> 意識する必要はありません。

ラベルないもんねー。

> >>>> PHPプログラムからは、以下の様なコマンドを実行します。
> >>>> echo "暗号化する文字列" |/usr/bin/gpg -a --batch --homedir
> >>>> /var/www/.gnupg -e --recipient メールアドレス
> >
> > PHPのsystem()関数などを使って、上記のコマンドを実行されている
> > ものと推測します。PHPから外部コマンド呼び出し系の関数を実行した
> > 場合、/bin/sh 経由での実行になってしまいます。

yes

> > これは httpd_t ドメインによる shell_exec_t タイプの実行となり、
> > これによって httpd_sys_script_t ドメインへのドメイン遷移が発生
> > します。このドメインは process:{setrlimit} 権限が無く、他の適
> > 当なドメインへの遷移パスの無いので、ポリシーの編集以外に手段が
> > 無いように見えます。
> > ただし、これは boolean の httpd_ssi_exec が on に設定
> > されている場合。
>
> 私がツボにはいってしまったのは、ここです。

そうですね。
実は、私も、shellスクリプトで、1分以内にクリックしたユーザをカウントして表示する、
というのをやりたかったんですが、「スクリプトの実行を許可する」というのが、
セキュリティ的観点からどうなのか?と悩んだ結果、やめにした、という経緯があります。
ここで、サーバがイントラネット用だと、何も心配ないでしょうが、インターネットサーバの
場合や、ユーザにどれだけ開放しているのか、というのが考慮事項としてありそうです。

> SELinuxだと「ドメインは全てフラットで階層を持たない」ので
> こうなるわけですが、TOMOYO Linuxであればそのまま
> 遷移の枝をドメインとして区別できます。しかも自動的に
> (事前の定義なしに)。

ok.
TOMOYOでは、遷移されたものとして、そのプロセスを区別します。ですから、
そのシェルスクリプトが、バックアップ用のcronからのものなのか、インターネットから
たたかれたものなのかを区別できるということですよね。
確かにそのとおりです。

> > httpd_ssi_exec を off に設定すると、httpd が /bin/sh を実行しても、
> > httpd_t ドメインのままですので、ポリシーの編集以外にも手の打ちよう
> > があります。
>
> shell_exec_tの「コンテキスト」を区別したいけれど、
> それは結局ドメイン遷移の履歴なので、履歴の概念を持たない
> SELinuxだと、上記のようなところができる限界なのだと
> 思います。

yes.
ドメイン遷移をしてしまえば、shell_exec_t がほにゃららできる、になると思います。
ここで、確かに危険性をはらんでいるといえるのは、httpd_tがシェルを実行する、
というのをどこまで許すのか、迷うところです。
私のサーバでは、一刀両断した、はずだけどなー??
あ、もう一回設定見直そうかな。。


> > まず、上記の処理を行うシェルスクリプトを作成してください。
> > /usr/local/bin/gpg-wrapper.sh 等という形で
> > -----
> > #!/bin/sh
> >
> > echo "$1" | /usr/bin/gpg -a --batch --homedir /var/www/.gnupg -e --recipient "$2"
> > -----
> > を作成し、これに httpd_unconfined_exec_t というタイプを付与します。
> > PHPからは system("/usr/local/bin/gpg-wrapper.sh 暗号化する文字列 メールアドレス"); という形で
> > 実行できるでしょう。
> >
> > httpd_t が httpd_unconfined_exec_t を実行した場合のドメイン遷移は
> > httpd_unconfined_script_t ですので、必要な権限が付与されることに
> > なります。
> >
> > 但し、"unconfined" と付いているように、このドメインは非常に強い
> > 権限を持っており、入力値の検査には注意するようにしてください。
> > 例えば、暗号化する文字列に「a"; cat /etc/shadow; echo "abc」なんて
> > 入っていたらとても悲しいことになります。
>
> このあたりだと理解不能領域なのですが、別にTOMOYO Linuxで
> なかったとしても、こうした場合を区別できたら望ましいという点は
> SELinuxな藤原さんにもご賛同いただけるのではないでしょうか?(いかが?)

僕は、今回は、phpですが。。

yes.
でも、海外さんが言っているのは、ユーザが打ち込んだであろう文字列を検査しろ、
と、普通に警告しているように思えますが。
エスケープ処理しろ、すなわち、
phpならば、htmlspecialcharsとか、escapeshellcmdをダブルでかませばいいかもです。
正規表現を使ってもいいですし。
それは、普通の管理者の範疇でできるはずです。
プラス、私が言ったように、php.iniの設定で、シェルスクリプトを実行できるディレクトリを
指定してしまえば、一般ユーザに開放していても、制御が可能ですし、
そもそも、uidをチェックする、safe modeでphpを立ち上げておく必要はあるでしょう。

おお、そうか、TOMOYOはそこまで制御できるとおっしゃっているんですよね。。
でも、翻ってみれば、SELinuxは、汎用である、すなわち、柔軟性に富んでいると言えるかもしれません。

> > ポリシーを編集する場合の別解としては、
> > /usr/share/selinux/devel/include/apps/gpg.if に定義されている
> > gpg_per_role_template を使って、CGIから実行するためのgpg専用の
> > ドメインを作成するというのもできそうです。
> > が、こちらは私自身で試したわけではありません。

templateって、いつ使うの?
と思っていましたが、そういうときに使うんですね。
ちなみに、phpは通常CGIとしては使わないです。
使えますけどね。
ただのスクリプトです。
phpをconfigureするときに、安全にする処置をしなければいけませんし。。


> > というわけで、こんな感じでいかがでしょう?
>
> ためしにTOMOYO Linuxを導入してみて、その結果をもとに
> SELinuxのポリシーを書いてみるというのもありですね。

そうです、僕が TOMOYO Linuxと一日付き合って、あのエディタの
すばらしさがわかりました。パスとその履歴が一目瞭然!!
勉強は尽きないです。

じゃ、のみに行ってきまーーーす。。

> http://tomoyo.sourceforge.jp/wiki/?WorldOfTomoyoLinux
>
> --
> 原田季栄 (Toshiharu Harada)
> haradats@xxxxx
>
>
>


--
Shintaro Fujiwara
segatex project (SELinux policy tool)
http://sourceforge.net/projects/segatex/
Home page
http://intrajp.no-ip.com/
Blog
http://intrajp.no-ip.com/nucleus/
CMS
http://intrajp.no-ip.com/xoops/
Wiki
http://intrajp.no-ip.com/pukiwiki/

投稿者 xml-rpc : 2007年11月22日 19:34
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/66767
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。