2007年11月22日

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

近藤です。

レスありがとうございます。

>>>> PHPプログラムからは、以下の様なコマンドを実行します。
>>>> echo "暗号化する文字列" |/usr/bin/gpg -a --batch --homedir
>>>> /var/www/.gnupg -e --recipient メールアドレス
>

> PHPのsystem()関数などを使って、上記のコマンドを実行されている
> ものと推測します。PHPから外部コマンド呼び出し系の関数を実行した
> 場合、/bin/sh 経由での実行になってしまいます。
>
> これは httpd_t ドメインによる shell_exec_t タイプの実行となり、
> これによって httpd_sys_script_t ドメインへのドメイン遷移が発生
> します。このドメインは process:{setrlimit} 権限が無く、他の適
> 当なドメインへの遷移パスの無いので、ポリシーの編集以外に手段が
> 無いように見えます。
> ただし、これは boolean の httpd_ssi_exec が on に設定
> されている場合。
>
> httpd_ssi_exec を off に設定すると、httpd が /bin/sh を実行しても、
> 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」なんて
> 入っていたらとても悲しいことになります。

結論からいうと外だしにしたらうまくいったようです。
考えてみたら、以前Perl CGIでgpg使ってたのを思い出し、タイプを調べたところ
その時は、cgi-binの中のスクリプトを
system_u:object_r:httpd_sys_script_exec_t
にしてOKでした。

PHPプログラム自体にもsystem_u:object_r:httpd_sys_script_exec_t
にしてみましたがNGで、シェルスクリプトの外出しにして、
タイプがsystem_u:object_r:httpd_sys_script_exec_tでうまく
いったようです。

ありがとうございました。

これでポリシー変更しないで済みそうです。
...と、この調査をしてたら先ほどRedHatのErrataで
selinux-policy bug fix updateというメールが来てました。
ポリシー変更しているサーバはまたちょっと大変な作業が待ってそうです。


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




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