2007年11月22日

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

海外です。

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

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

>>> 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」なんて
入っていたらとても悲しいことになります。


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

というわけで、こんな感じでいかがでしょう?
--
OSS Platform Development Division, NEC
KaiGai Kohei <kaigai@xxxxx>

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




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