このスレッドは解決済です(未解決に戻す場合はこちら)
<<戻る

suExecの設定 このメッセージに返信する
日時: 2010/07/29 22:48
名前: kawasaki
URL:
suExecの設定について伺いたい事があるので質問させていただきます。
当方、CentOS5.5にて当サイトのWWWサーバ構築手順を踏み、各ユーザディレクトリにて、cgiやPHPのsuExec化を行ないたかったのですが、どうも上手く行きません。

# suexec -V の結果は、
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"

と、標準のままです。
そして、ユーザディレクトリの設定も当サイトの手順を踏み、
/home/ユーザ名/public_html
のような形で作成しました。

そして、suexecの結果を確かめるために、CGI(Perl)とPHPでwhoamiを使って実行ユーザ名を表示するプログラムをユーザディレクトリに置き、ブラウザから確認した所、

/~ユーザ名/test.cgi
でアクセスした場合は、実行ユーザ名がディレクトリの所有者となり、正しい表示なのですが、
/ユーザ名/test.cgi(チルダなし)でアクセスした場合や、/userdir/ユーザ名/test.cgi
でアクセスした場合は、ユーザ名が「Apache」と表示され、suexecが上手く機能しません。

又、PHPのプログラム(who.php)でアクセスした場合は、全てにおいて実行ユーザ名がApacheとなり、suexecが全く機能してくれません。

これではセキュリティが不安ですので、どなたかご教授いただければと思います。

プログラムは以下の通りです。

test.cgi
#!/usr/bin/perl


print "Content-type: text/plain", "\n\n";
print `whoami`;


who.php
<?php
echo exec('whoami');
?>

----------追記-----------

どうやら調べているうちに、PHPはCGIとして処理しないと実行ユーザ権限を変えれない事が分かりました。よって、PHPはsuPHPの導入や、PHPをCGIモードで処理させる事で解決できそうですが、
単純にユーザディレクトリにアクセス擦る際に、
チルダ無しや、/userdir/ユーザ名/test.cgi
でアクセスしたら実行ユーザがApacheになってしまう問題について、解決策はありませんでしょうか?



記事編集 編集

Page: | 1 | 2 |

Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 02:12
名前: ペングイン
URL: http://blog.trippyboy.com
>kawasaki様

中途半端な説明をお許しください。

/var/www/html 配下はApacheで実行されます。

UserDir(/home/username/public_html)のアクセスはsuexecが有効になります。


># suexec -V の結果は、
>-D AP_DOC_ROOT="/var/www"
省略
>-D AP_USERDIR_SUFFIX="public_html"

suexecのオプションの説明は以下
--------------------------------
--with-suexec-userdir=DIR
suEXEC がアクセスを許されるユーザホームディレクトリ配下の サブディレクトリを指定します。 このディレクトリ以下の全実行ファイルは、"安全な"プログラムになるよう、 suEXEC がそのユーザとして実行できるようにします。 "単純な" UserDir ディレクティブを使っている場合 (すなわち "*" を含まないもの)、これと同じ値を設定すべきです。 Userdir ディレクティブがそのユーザのパスワードファイル内の ホームディレクトリと同じ場所を指していなければ、 suEXEC は適切に動作しません。デフォルトは "public_html" です。
各 UserDir が異なった仮想ホストを設定している場合、 それらを全て一つの親ディレクトリに含めて、 その親ディレクトリの名前をここで指定する必要があります。 このように指定されなければ "~userdir" cgi へのリクエストが動作しません。

よって少し遅く追記いたしましたhttpd.confの設定のように/var/www/配下に
ドキュメントルートを持つ場合、該当ユーザでのsuexecが有効になります。

これを/home/username/www/domain.com/などとされたい場合は、
suexecのバイナリ編集か、やり直しが必要と思われます。

suexecのオプションの記述が正しいか確認をするには、
httpd.confにてUserDirの公開フォルダ名を変更しsuexecが動くか動かないかお試しください。

たとえば・・・
<IfModule mod_userdir.c>
#UserDir public_html
UserDir publico2000
</IfModule>

CGI-
/home/username/publico2000/test.cgi
記事編集 編集
Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 02:19
名前: kawasaki
URL:
>ペングイン様

私こそ理解が及ばずに申し訳ないです…。

中途半端な解釈ですが、多分、ドキュメントルートが/var/www/html にある環境では、Apacheで実行されてしまうということですね…。
それで、バーチャルホストでドキュメントルートを/var/www/ に持つユーザーからだとsuExecでの実行が可能になる…。

その方法で試してみたいと思います。
詳細な情報に感謝です。


それから、どうしても上手く行かない場合TOPページ編集専用のユーザを作っておいて、そのユーザのホームディレクトリをTOPページのドキュメントルートにしてもいいかもしれないですね。

記事編集 編集
Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 02:23
名前: ペングイン
URL: http://blog.trippyboy.com
>kawasaki様

おっしゃるとおりです。

/var/www/htmlの公開をやめて(ApacheユーザでCGIが実行されること)、suexec
環境を利用されたいのであれば、ご利用のホスト名でVirtualHostを
/var/www/* をDocumentRootとして公開してください。

そうすればApacheユーザ以外のユーザでのコンテンツ編集が可能になります。

ご検討をお祈りします。
記事編集 編集
Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 03:11
名前: kawasaki
URL:
>ペングイン様
>suexecのオプションの記述が正しいか確認をするには、
>httpd.confにてUserDirの公開フォルダ名を変更しsuexecが動くか動かないかお試しください。

当方で、public_htmlが変更された場合を試してみましたが、表示することはできませんでした。
これで正しい設定と考えてよいのでしょうか?

ちなみに、教えていただきましたバーチャルホスト設定を自分の環境に合わせて使ったところ、CGIが見事suExec環境で実行されました。
本当に感謝いたします。
suExecのログにも結果が表示されてましたので、無事に設定ができたんだと思います。

これでCGIは裁けたので後はPHPをどうにか裁かないといけませんね。
PHPをApacheで実行されるとセキュリティ的に問題ありですから。

ペングイン様に感謝です。
記事編集 編集
Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 07:19
名前: stranger
URL: http://ja.528p.com/
Filesコンテナ で.phpをDeny from allに設定すれば?

使わないのであれば 全体に設定
userに使わせたくなければ userのディレクトリに設定

参考
http://httpd.apache.org/docs/2.0/ja/mod/core.html#files
記事編集 編集
Re: suExecの設定 このメッセージに返信する
日時: 2010/07/30 20:39
名前: kawasaki
URL:
>stranger様

遅ればせながら、情報提供ありがとうございます。
PHPを禁止してしまうとそれはそれで問題が出てきますので…。
PHPをモジュールとしてApacheから実行するのではなく、CGIとして各ユーザ権限で実行するようにしたいと考えています。
記事編集 編集

Page: | 1 | 2 |

件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -