2007年11月28日

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

 熊猫です。

> >>> chconでタイプを変更してもいいと思いますが、再起動したら、
> >>> 元に戻ってしまうと思います。
> >> えっ!そうだったんですか?
> >> (再起動時にrestoreconが実行されるのかな)

> >
> > いえ、再起動しても SELinux のセキュリティコンテキストは
> > 保持されますのでご安心を。

でも、 /.autorelabel には要注意ですよ。
このファイルを作成する許可があれば、 .fc ファイルの内容に従って勝手に変更されてしまいます。
このファイルを作れるのは root ユーザだけなのでしょうが、油断大敵です。
悪意あるユーザが自力ではオープンできないセキュリティコンテキストが付いているファイルのハードリンクを作って
システム管理者が /.autorelabel を作って再起動してくれるのを待っているかもしれませんからね。

> > PHPからは system("/usr/local/bin/gpg-wrapper.sh 暗号化する文字列 メールアドレス"); という形で
> > 実行できるでしょう。
> >
> > 但し、"unconfined" と付いているように、このドメインは非常に強い
> > 権限を持っており、入力値の検査には注意するようにしてください。
> > 例えば、暗号化する文字列に「a"; cat /etc/shadow; echo "abc」なんて
> > 入っていたらとても悲しいことになります。

これは簡単なコマンドインジェクションですね。

TOMOYO Linux では、
httpd から mod_php で実行されたスクリプトから system() を呼び出した場合は
<kernel> /usr/sbin/httpd /bin/sh というドメインに、
mod_php ではなくスタンドアロンの php で実行されたスクリプトから system() を呼び出した場合は
<kernel> /usr/sbin/httpd /path/to/php-script /bin/sh というドメインに、
suexec 経由で起動されたスタンドアロンの php で実行されたスクリプトから system() を呼び出した場合は
<kernel> /usr/sbin/httpd /usr/sbin/suexec /path/to/php-script /bin/sh というドメインになります。

それぞれのドメインに対して、コマンド1個/ファイル1個を単位としてアクセス許可を与えるので、
system("echo 暗号化する文字列 | /usr/bin/gpg -a --batch --homedir /var/www/.gnupg -e --recipient メールアドレス")
の中の「暗号化する文字列」や「メールアドレス」に変な値( /bin/cat など)が入っていたとしても、
/usr/bin/gpg だけしか実行できませんし、その /usr/bin/gpg は(上記の3ケースの内の最初のケースの場合)
<kernel> /usr/sbin/httpd /bin/sh /usr/bin/gpg という専用のドメインで動作します。

仮に /bin/cat と /usr/bin/md5sum が同じラベル( bin_t ?)を持っていたとしても、 /bin/cat の実行許可を与えない限り
「ファイルのダイジェスト値だけを出力したかったのに(コマンドインジェクションにより /bin/cat が実行されて)
ファイルの内容を丸ごと出力してしまった」とかいう事件も起こりようがありません。

こういうのは、 bin_t のようなラベルを使ってグループ化しないことの利点ですね。


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




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