0

SuPHP を FastCGI に置き換えようとしています。以前は、所有者とグループが異なるフォルダーがありました。各グループには、メンバーとして www-data もありました。ブラウザを使用して php ファイルを実行すると、ファイルの所有者として実行されました。そのため、ファイルがユーザー A (グループ A - www-data とメンバーとしての A) によって所有されていた場合、そのファイルはユーザー A として実行されました。

shell_exec('whoami') => return A

ここで、fastcgi をインストールし、PHP ファイルを実行するように構成しました。

これが私のphp5-fpm.confファイルです

<IfModule mod_fastcgi.c>
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
        </IfModule>

私の問題は、Aが所有する同じファイルを実行すると、

shell_exec('whoami') => return www-data

私は何を間違っていますか?

4

2 に答える 2

1

suPHP を FastCGI+PHP-FPM に置き換えることができますが、ユーザーごとに FPM プールとユーザーごとに仮想ホストをセットアップする必要があります (ユーザー/プールごとに個別の FastCgiExternalServer ディレクティブが必要であり、それらは仮想ホストごとにのみ有効であるため)。

たとえば、特定の仮想ルートでは次のようになります。

<FilesMatch "\.php$">
  SetHandler php5-fcgi
</FilesMatch>
Action php5-fcgi /php5-fcgi-username
Alias /php5-fcgi-username /usr/lib/cgi-bin/php5-fcgi-username
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-username -socket /var/run/php5-fpm-username.sock -pass-header Authorization

次に、FPM プール構成で次のようなものを使用できます。

listen = /var/run/php5-fpm-username.sock
listen.owner = www-data
listen.group = www-data
listen.mode=0660
user = ownerusername
group = ownerusergroup
pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 120s
pm.max_requests = 50000
catch_workers_output = yes

listen.owner および listen.group FPM プール パラメーターは、Web サーバーのユーザー/グループです (そのユーザーは、PHP-FPM ソケットへの接続を許可されている唯一のユーザーです)。

ユーザーとグループの FPM プール パラメーターは、PHP スクリプトの実行に使用されるユーザーとグループです。

10 人のユーザーがいる場合、10 個の FPM プールが必要になります。

ヒット数が多い場合は、FastCGI+PHP-FPM を使用するとパフォーマンスが大幅に向上しますが、構成の調整が難しくなります。1 秒あたりのヒット数がそれほど多くないサイト/アプリケーションの場合、FastCGI と PHP-FPM を気にする必要はありません。さらに、suPHP を使用すると、Web サーバーを再起動せずに編集できるユーザーごとの php.ini を取得できます。PHP-FPM を使用すると、すべてのプールが同じ php.ini を共有するため、FPM デーモンを再起動してリロードする必要があります。

于 2014-10-12T19:26:27.323 に答える
0

whoami現在のスクリプトが実行されている現在のユーザーを表示するだけです。

fastcgi を介した ubuntuwww-dataでは、そのファイルを所有するユーザーとしてではなく、ユーザーとしてスクリプトを実行します。これは仕様によるもので、アクセスが許可されていないファイルへの Web スクリプトのアクセスを制限するのに役立ちます。この動作を変更する必要がある場合は、構成ファイルのどこかで実行されているユーザー apache を変更する必要があります。

私のシステムでは、これは/etc/apacyhe2/envvars次の 2 つの環境変数を設定することで指定されます。

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
于 2014-09-05T08:43:42.633 に答える