質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1383閲覧

ApacheのPHPでのsuexecのエラーについて

teityann1225

総合スコア158

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/05/23 17:02

#やりたいこと
VirtualHostごとにsuexecを使って、ユーザー権限で実行したい。
htmlファイルは正常に見ることができます。
よろしくお願いします。
Apache・PHPバージョン

Server version: Apache/2.4.6 (CentOS) PHP 7.2.18 (cli) (built: Apr 30 2019 15:26:52) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

#発生しているエラー

End of script output before headers: php-cgi

#設定ファイル等
user.conf

NameVirtualHost *:80 NameVirtualHost *:443 ScriptAlias /php-test /home/test/www/php-cgi <VirtualHost *:80> ServerName test.example.com DocumentRoot "/home/test/www/html" SuexecUserGroup test test RemoveHandler .php .phps <FilesMatch .php$> SetHandler php-cgi </FilesMatch> Action php-cgi /php-test </VirtualHost> <VirtualHost *:443> ServerName test.example.com DocumentRoot "/home/test/www/html" SuexecUserGroup test test SSLEngine on SSLCertificateFile /etc/letsencrypt/live/test.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/test.exampele.com/privkey.pem RemoveHandler .php .phps <FilesMatch .php$> SetHandler php-cgi </FilesMatch> Action php-cgi /php-test </VirtualHost>

/home/test/www/php-cgi

#!/bin/sh exec /usr/bin/php-cgi

/home/test/www/php-cgiの権限設定:

-rwxr-xr-x 1 test test 32 4月 11 14:06 /home/test/www/php-cgi

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/05/23 23:30

suexec -V の出力結果は、どうなっているでしょうか?
guest

回答1

0

ベストアンサー

まず、suEXEC サポート の「suEXEC セキュリティモデル」に記載されている条件をクリアしているか確認してください。

suEXEC で、よく引っかかるのが、

4.対象の CGI, SSI プログラムが安全でない階層の参照をしているか?
13.ディレクトリが Apache のドキュメントツリー内にあるか?
14.ディレクトリを他のユーザが書き込めるようになって いないか?
16.対象となる CGI/SSI プログラムファイルが他アカウントから 書き込めるようになっていないか?
18.対象となるユーザ/グループがプログラムの ユーザ/グループと同じか?

あたりです。


今回の設定で気になったのは、

DocumentRoot "/home/test/www/html"

のドキュメントルートを /home/test 以下に置いている点です。

Cent OS 7 デフォルトの suEXEC だと suexec -V の結果は、

# suexec -V -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="apache" -D AP_LOG_SYSLOG -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=500 -D AP_USERDIR_SUFFIX="public_html"

となります。

上記の suEXEC の場合、

13.ディレクトリが Apache のドキュメントツリー内にあるか?

は、 /var/www 以下のディレクトリ か UserDir を使った場合の $HOME/public_html のディレクトリ以下しか suEXEC は実行できません。

それ以外のディレクトリで、実行する場合は、suEXEC のコンパイルオプションで、 --with-suexec-docroot=DIR を指定してコンパイルする必要があります。


(追記)

suEXEC から外れるので参考程度ですが...

PHP だけなら、apache 2.4 の Event MPM + PHP-FPM で、Webサーバーを構築して、PHP の実行ユーザーユーザー毎に設定ファイルを作成して PHP-FPM を起動させるのが、今風な気もします。

参考情報としては、

投稿2019/05/23 23:47

編集2019/05/24 01:18
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問