このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

バーチャルホストでのsuEXEC このメッセージに返信する
日時: 2009/11/09 12:50
名前: たまろ
URL:
サーバーにてsuEXECを使いたいと思っております。

-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"

現在このようになっており
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print `whoami`;

このようなCGIを
/home/user01/public_html/test.cgi[700] に設置することで

http://example.com/~user01/test.cgi で問題なく実行できuser01と表示されます。


今回僕は名前ベースのバーチャルホストを使って
/home/user01/public_htmlを
http://www.example.com/でアクセスできるように/etc/httpd/conf.d/virtualhost.confに

<VirtualHost *:80>
ServerName example.com
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /home/user01/public_html
ErrorLog logs/www.example.com-error_log
CustomLog logs/www.example.com-access_log combined env=!no_log
</VirtualHost>

の様に設定し、/etc/rc.d/init.d/httpd reload とした後

http://www.example.com/test.cgi にアクセスしたのですがInternal Server Errorとなり
エラーログには
[Mon Nov 09 12:24:59 2009] [error] [client 192.168.0.1] Premature end of script headers: test.cgi
と記録されます。

test.cgiのパーミッションを755とすればアクセスできるのですが、apacheと表示されます。


自分なりに調べてみてSuexecUserGroupという設定を見つけ
/etc/httpd/conf.d/virtualhost.confに追記し

<VirtualHost *:80>
ServerName example.com
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /home/user01/public_html
ErrorLog logs/www.example.com-error_log
CustomLog logs/www.example.com-access_log combined env=!no_log
  SuexecUserGroup user01 user01 ←ここを追記した。
</VirtualHost>

/etc/rc.d/init.d/httpd reload

とすると同じくInternal Server Errorで
エラーログには
[Mon Nov 09 12:32:26 2009] [error] [client 192.168.0.1] suexec policy violation: see suexec log for more details
[Mon Nov 09 12:32:26 2009] [error] [client 192.168.0.1] Premature end of script headers: test.cgi

と残りました。

test.cgiのパーミッションを755としても同様でアクセスできなくなりました。


これは、

-D AP_DOC_ROOT="/var/www"

となっているので/var/www配下のディレクトリでそのディレクトリの所有者と同じ場合でないとSuexecUserGroupを指定しても駄目だということだと思います。


それでさらに調べるとApacheをリビルトするなどして
-D AP_DOC_ROOT="/var/www" これを
-D AP_DOC_ROOT="/home とする方法が多く見られました。

しかしこれではやりようによっては実行者を偽って他人の権限で/binなどにある実行ファイルを他のユーザーがスクリプトからsuexecを呼ぶことで実行出来てしまうので危ないなと思いました。


単純にバーチャルホストのDocumentRoot を/var/www/html配下に置けばいいのではということなのかもしれませんがそれではFTPで各ユーザーがアクセスする際問題なのでどうしてもDocumentRootは/home/ユーザー名/public_htmlにしたいのです。

レンタルサーバーなどではバーチャルドメインを使ってもsuexecが使えたりしているのですがあれは一体どのような設定をしているのでしょうか?

どなたかお分かりになる方 ご教示ください。
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

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

- WEB PATIO -