PHP が chmod/rename および move_upload_file() を実行できるようにユーザー/グループを変更する

PHP が chmod/rename および move_upload_file() を実行できるようにユーザー/グループを変更する

VPS 上の PHP スクリプトでは何もできないようです。

ディレクトリに何かをアップロードしようとすると、「アクセスが拒否されました」というエラーが返されます。

はい、権限を777に変更しました。動作はしますが、セキュリティ上の問題が気に入りません。

コマンドを実行する場合:

ps axu|grep apache|grep -v grep

戻ってくる

 nobody    7689  0.1  3.8  50604 20036 ?        S    21:38   0:00 /usr/local/apache/bin/httpd -k start -DSSL
root     13600  0.0  3.8  50304 20348 ?        Ss   Jun06   0:46 /usr/local/apache/bin/httpd -k start -DSSL
nobody   15733  0.1  3.8  50700 20156 ?        S    21:39   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   15818  0.1  3.8  51492 20180 ?        S    21:39   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   23843  0.1  3.7  51336 19592 ?        S    21:40   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30335  0.0  3.5  50436 18496 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30406  0.0  3.5  50444 18544 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30407  0.0  3.5  50556 18696 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30472  0.0  3.6  50828 19348 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30474  0.0  3.5  50668 18868 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30476  0.0  3.6  50532 19064 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   30501  0.0  3.8  50556 20080 ?        S    21:36   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32341  0.0  3.5  50444 18492 ?        S    21:41   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32370  0.0  3.5  50444 18476 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32414  0.1  3.7  51336 19524 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32416  0.1  3.5  50668 18816 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32457  0.1  3.6  50828 19320 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32458  0.1  3.6  50772 19276 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32459  0.0  3.5  50444 18504 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32460  0.2  3.6  50828 19320 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32463  0.0  3.5  50444 18472 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody   32466  0.0  3.4  50436 17960 ?        S    21:42   0:00 /usr/local/apache/bin/httpd -k start -DSSL

ディレクトリの所有者は「user [505]」で、グループは「user[508]」です(WinSCPで表示)

PHP スクリプトが動作できるように、Apache ハンドラーを適切な所有者とグループに変更するにはどうすればよいですか?

追伸

私のPHPはセーフモードに設定されておらず、open_basedirは値なし

編集:

これは私の httpd.conf の外観です (連想ドメインの場合)

 <VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /home/domain/public_html
ServerAdmin info@domain
## User <theUsername> # Needed for Cpanel::ApacheConf
<IfModule mod_userdir.c>
    Userdir disabled
    Userdir enabled <userName>
</IfModule>
<IfModule mod_suphp.c>
    suPHP_UserGroup <userName> <userName>
</IfModule>
<IfModule !mod_disable_suexec.c>
    SuexecUserGroup <userName> <userName>
</IfModule>
CustomLog /usr/local/apache/domlogs/domain.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
CustomLog /usr/local/apache/domlogs/domain.com combined
ScriptAlias /cgi-bin/ /home/domain/public_html/cgi-bin/
#Options -ExecCGI -Includes
#RemoveHandler cgi-script .cgi .pl .plx .ppl .perl

答え1

Web サーバーを実行しているユーザーと同じ権限が必要です。これは OS によって異なります。「apache」や「www-data」など、まったく別の権限である可能性があります。

使用していない限りsuEXECスクリプトは Web サーバーによって実行され、そのユーザーと同じ権限で実行されます。

したがって、この問題を解決するには、Apache プロセスがどのユーザーで実行されているかを特定し、スクリプトで変更できるようにするファイル/フォルダーに適切な権限を適用する必要があります。

confファイルでApacheが実行されるユーザーとグループのアカウントを指定するには、

User=[username]
Group=[groupname]

指令。

conf ファイルを確認してください。ファイルの名前と場所は OS によって異なります。ここでもう少し詳細を入力すると、より直接的な回答が得られる可能性があります。

編集: Centosの場合、confファイルは次の場所にあります。

/etc/httpd/conf/httpd.conf

答え2

アップデート!あなたもこの問題に遭遇している場合は、これを試してください:

WHM で次の場所に移動します:

メイン >> サービス設定 >> Apache 設定 >> PHP および SuExec 設定

私が変更され PHP 5 ハンドラー宛先: suphp。

とてもうまくいきました

答え3

WHM メイン >> サービス構成 >> Apache 構成 >> PHP および SuExec 構成 php hadler >> fcgi を変更すると、問題が解決します。

関連情報