• 締切済み

PHPでsuEXEC

test.cgiをPHP言語で記述し、suEXECを使っているつもりなんですが、確認のためにfopen()で作成されたファイルの所有者を見たらapacheになっていました。 現在インストールされているPHPがCGIとしての動作に対応できているかを確認する方法はないですか? PerlならsuEXECが適用されています。 何をどう設定すればsuEXECとつながってくれるでしょうか? apacheとsuexecのログでは手がかりになる情報は得られませんでした。

  • hurce
  • お礼率42% (29/68)
  • CGI
  • 回答数1
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

サーバーでのphpの起動法が2種類有ることはご存じですか? http://www.php.net/manual/ja/install.general.php サーバーがapacheならば、SAPI(サーバーモジュールとして)起動の方が、オーバーヘッドが少ないため、こちらでの起動のことが多いです。 この場合、実行者はサーバー(apache)です。 phpinfo(); phpinfo(INFO_MODULES);などで、この起動時情報が得られるかと思います。 これを変更するのは、サーバーの再設定が必要です。 レンタルサーバーでは変更は無理かと思われます。

関連するQ&A

  • Suexecについて

    いつもお世話になります。 FreeBSD 4.7-RELEASE-p28とApache/1.3.33でWEBサーバー(レンタル)を構築しております。現在サーバー移行をしており旧環境から既存cgiの動作テストをしております。 exec cmdでコールしたcgiが動作しないため困っております。 例えばroot--cgi | ---test(index.shtml)というディレクトリ構造だとします。 /root/test/index.shtmlファイルから上位層のcgiにあるcgiファイルを <!--#exec cmd="../cgi/test.cgi">でコールするとcgiが反応しません。 色々調べたところSuexec の環境なので ".." を使用した相対パスが原因でエラーになっているという情報を見つけたのですが、このような状況を確認する方法、Suexec環境を 解除するにはどうしたらよいのでしょうか? どなたかご教示願います。

  • 500エラーorダウンロードになる。suEXEC

    【環境】 fedora7(さくら専用サーバー Apache(2.2.8) vsftpd(2.0.5-16.fc7) suEXEC cgiを700で動かしたいのですが、 全く動いてくれません。。。 500 Internal Server Error エラーログを一部抜粋しました。 error.log [Sat May 24 17:08:07 2008] [error] [client 121.1.216.98] attempt to invoke directory as script: /home/test1/cgi-bin/test/ [Sat May 24 17:08:07 2008] [error] [client 121.1.216.98] File does not exist: /home/test1/httpdocs/favicon.ico [Sat May 24 17:08:11 2008] [error] [client 121.1.216.98] Directory index forbidden by Options directive: /home/test1/httpdocs/file/00/, referer: http://ドメイン/ [Sat May 24 17:08:11 2008] [error] [client 121.1.216.98] mod_mime_magic: can't read `/home/test1/cgi-bin/test/log_note.cgi', referer: http://ドメイン/ [Sat May 24 17:08:11 2008] [error] [client 121.1.216.98] (13)Permission denied: exec of '/home/test1/cgi-bin/test/log_note.cgi' failed, referer: http://ドメイン/ [Sat May 24 17:08:11 2008] [error] [client 121.1.216.98] Premature end of script headers: log_note.cgi, referer: http://ドメイン/ [Sat May 24 17:08:11 2008] [error] [client 121.1.216.98] File does not exist: /home/test1/httpdocs/favicon.ico [Sat May 24 17:08:13 2008] [error] [client 121.1.216.98] mod_mime_magic: can't read `/home/test1/cgi-bin/test/test.cgi', referer: http://ドメイン/ [Sat May 24 17:08:13 2008] [error] [client 121.1.216.98] (13)Permission denied: exec of '/home/test1/cgi-bin/test/test.cgi' failed, referer: http://ドメイン/ [Sat May 24 17:08:13 2008] [error] [client 121.1.216.98] Premature end of script headers: test.cgi, referer: http://ドメイン/ [Sat May 24 17:08:13 2008] [error] [client 121.1.216.98] File does not exist: /home/test1/httpdocs/favicon.ico suexec.log [2008-05-24 16:58:20]: too few arguments 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" DOC_ROOTの変更方法も分からず、ずっとhomeでやってたので、 ミスだったのかな?と思い。 /var/以下にcgiを置いてchmodでtest.cgiの権限700にしてしてみましたが、500のエラーでした。 なぜかFFFTPのクライアントからは操作ファイル操作が出来ませんでした。 ユーザー名はapacheグループに属してるだけです。 バーチャルで運営の予定です。 perlのパスは usr/bin/perl test.cgiの先頭は #!/usr/bin/perl です。 suEXECは・・・ chmod 4711 /usr/sbin/suexec でapache再起動後のログに、 [Sat May 24 17:31:04 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) が出ます。 /usr/sbin/httpd -l でチェックすると。 core.c prefork.c http_core.c mod_so.c の4点しかありません。 suexec: disabled; invalid wrapper /usr/sbin/suexec は出ません。 宜しくお願い致します。

    • ベストアンサー
    • CGI
  • CGI (suEXEC)について!

    CGI (suEXEC)についての質問です! OS: Red Hat Linux 7.3 httpd: Apache 1.3.28 Apacheの設定ファイル httpd.conf 内で設定してある DocumentRoot のディレクトリ内にある CGIを”パーミッション700の場合にのみ”動作するようにする方法はありますでしょうか? suEXECを使用してユーザディレクトリ内のCGIは700で動くようにできたのですが、 httpd.conf 内で設定してある DocumentRoot のディレクトリ内では700だと動かない為。 また、suEXECというものは、ユーザーディレクトリのみに適応されるものなのでしょうか? ご存知の方いらっしゃいましたら、アドバイス等を宜しくお願いします。

  • Apache+SuexecでForbidden

    Apache 2.4.18 + PHP 5.6.18 で Suexec VirtualHost & Suexecを用いて、PHPの実行権を 各VirtualHostで異なるようにしたいのですが gdtest.php を /usr/local/apache2/htdocs に置いて http://172.16.72.152/gdtest.php では正常動作しますが gdtest.php を /home/user1/public_html に置いて http://dummy-host1.XXXXXXX.jp/gdtest.php では Forbidden You don't have permission to access /php-user1/php_user-cgi/gdtest.php on this server と表示されます。 以下に当方の情報をお示しますので、どこが間違っているのか ご指摘いだだけますようお願いいたします。 1.Apache config ./configure --prefix=/usr/local/apache2 \ --with-apr=/usr/local/apr/apr-1.5.2 \ --with-apr-util=/usr/local/apr-util/apr-util-1.5.4 \ --with-pcre=/usr/local/pcre/pcre-8.38 \ --with-mpm=prefork \ --with-suexec-userdir=public_html \ --with-suexec-docroot=/home \ --with-suexec-caller=daemon \ --enable-suexec apache は User daemon, Group daemon で動作する 2.PHP config phpinfo()で確認 Configure Command : './configure' '--enable-mbstring=ja' '--enable-bcmath' '--with-gd' '--with-freetype-dir=/usr/include/' '--with-png-dir=/usr/include' '--with-jpeg-dir=/usr/include' Server API : CGI/FastCGI Virtual Directory Support : disabled Loaded Configuration File : /usr/local/lib/php.ini : 3.Virtual Hostは正常動作 /usr/local/apache2/conf/extra/httpd-vhosts.conf # 1st priority <VirtualHost 172.16.72.152:80> ServerAdmin root@172.16.72.152 DocumentRoot "/usr/local/apache2/htdocs" ServerName 172.16.72.152:80 ErrorLog "logs/error_log" CustomLog "logs/access_log" common ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/htdocs"> Options Indexes FollowSymLinks AllowOverride All Action php56 /cgi-bin/php56-cgi AddHandler php56 .php Require all granted </Directory> </VirtualHost> # 2nd priority <VirtualHost 172.16.72.152:80> ServerAdmin root@172.16.72.152 DocumentRoot "/home/user1/public_html" ServerName dummy-host1.XXXXXXX.jp ErrorLog "logs/dummy-host1-error_log" CustomLog "logs/dummy-host1-access_log" common SuexecUserGroup user1 user1 ScriptAlias /cgi-bin/ "/home/user1/cgi-bin/" Action php_user1 /cgi-bin/php_user1-cgi AddHandler php_user1 .php <Directory "/home/user1/public_html"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost> 4.suexec -V -D AP_DOC_ROOT="/home" -D AP_GID_MIN=100 -D AP_HTTPD_USER="daemon" -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html" 5. httpd -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_prefork_module (static) authn_file_module (shared) authn_core_module (shared) authz_host_module (shared) authz_groupfile_module (shared) authz_user_module (shared) authz_core_module (shared) access_compat_module (shared) auth_basic_module (shared) reqtimeout_module (shared) filter_module (shared) mime_module (shared) log_config_module (shared) env_module (shared) headers_module (shared) setenvif_module (shared) version_module (shared) unixd_module (shared) status_module (shared) autoindex_module (shared) suexec_module (shared) cgid_module (shared) vhost_alias_module (shared) dir_module (shared) actions_module (shared) userdir_module (shared) alias_module (shared) 6. directory, file関係 755 user1 user1 /home/user1/cgi-bin <-- daemon でも変わらない 755 user1 user1 /home/user1/cgi-bin/php_user1-cgi cgi版phpである /usr/local/apache2/cgi-bin/pgp56-cgi を php_user1-cgi としてコピー 755 user1 user1 /home/user1/public_html/gdtest.php /home, /home/user1 もパーミッションは 755 7. log messages 172.16.72.152 - - [09/Feb/2016:15:13:30 +0900] "GET /gdtest.php HTTP/1.1" 403 241 [/usr/local/apache2/logs/dummy-host1-error_log] [Tue Feb 09 15:13:] [authz_core:error] [pid 4905] [client 172.16.72.152:43902] AH01630: client denied by server configuration: /home/user1/cgi-bin/php_user1-cgi

  • CGIモードのphpスクリプトが400で動くわけ

    さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

    • 締切済み
    • CGI
  • CGI版PHPについて

    一般的なPerlのCGIが実行可能な状態のApache(Linux上)にCGI版のPHPを追加インストールした場合、ApacheはスクリプトがPerlであるかPHPであるかの違いをどう認識するのでしょうか? 方法1 スクリプトはどちらも*.cgiとして作成し、スクリプト内先頭行のperlやphpへのパスの記述で認識する 方法2 perl→*.cgi php→*.php のようにhttpd.confや.htaccessで設定する 初心者のためこの二つくらいしか思い浮かばないのですが、どちらかが正解だったりしますか??

    • ベストアンサー
    • PHP
  • exec()にで別PHPをバックグラウンドで起動させるには

    どうしたらよいか分からずに困っております…。 例えば次の様な記述が実行できません。 exec("c:\php\php.exe c:\test\test.php"); 次の様にperlファイルを起動しようとすると、それは問題なく動作します。 exec("c:\perl\bin\perl.exe c:\test\test.cgi"); すみませんが、どなたかヒントだけでも頂けたら嬉しいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpのソースにphpのパスを書かない方法

    ファイル所有者がapacheになってしまう問題を解決するためにphpをsuexecで使いたいのですが、phpをCGIで実行させるためにはphpのソースの最初に#!/usr/bin/phpが必要みたいでしたが、これを書かずに実現する方法はありませんか? 拡張子がphpのファイルであれば、#!/usr/bin/phpを自動で付けるようなことはできませんか? 広告挿入の技術などを応用してできないでしょうか?

  • PHPプログラムを各ユーザ権限で実行させる(suEXEC)には?

    色々なCMSを試してみたくて、テスト用の自宅サーバ(外部には非公開)を構築しています。 サーバ環境はubuntu9.04+Apache2+PHP5+MySQL5で、Apacheのuserdirモジュールを有効にしています。この状態で各CMS専用のユーザを作成し、各ユーザのドキュメントルートにCMSをインストールして使っています。 具体的には・・・ xoopsユーザを作成して http://localhost/~xoops/ にXOOPSをインストール。 drupalユーザを作成して http://localhost/~drupal/ にDrupalをインストール。 ここで問題になったのは、PHPプログラムがwww-dataユーザの権限で実行されるので、自動的に生成されるファイルの所有者がwww-dataになってしまうということです。自分なりに調べて「suEXECを導入することで解決できそうだ」というところまでは解ったのですが、具体的な設定方法を見つけるには至っていません。 そこで質問なのですが、suEXECを導入することでxoopsユーザのドキュメントルート以下にあるプログラムはxoopsユーザの権限で、drupalユーザのドキュメントルート以下にあるプログラムはdrupalユーザの権限で実行されるようにするには、何をどの様に設定すれば良いのでしょうか。もしsuEXECを使う以外の方法で実現可能であれば、それでも構いません。 質問が冗長になってしまって申し訳ありませんが、サーバ構築の経験者様からのアドバイスを頂ければと思い質問させて頂きました。何卒よろしくお願い致します。

  • Apacheモジュールとしてphpをユーザー権限で

    Apacheモジュールとして、phpをユーザー権限で動かしている レンタルサーバー等が多いのですが、 これは、どのように行っているのでしょうか? #CGIであれば、suexecで十分かとは思うのですが OSはFreeBSD 10 です。 pkg ではなく、portsからのインストールになります。 よろしくお願いします。

専門家に質問してみよう