PHP FPMは許可を拒否しますか?


9

PHP-FPMでアクセスが拒否された理由をいくつか読みましたが、解決できません。

エラーログは次のように読み取ります。

    2013/04/20 23:33:28 [crit] 15479#0: *6 open() "/var/lib/nginx/tmp/fastcgi
/2/00/0000000002" failed (13: Permission denied) while reading upstream, client: 
99.999.999.999, server: example.net, request: "GET /wp-admin/ HTTP/1.1", 
upstream: "fastcgi://unix:/tmp/php-fpm.sock:", host: "example.net", referrer:    
"http://example.net/"

私は少しですが失われました:

  1. / var / lib / nginx / tmpをec2-userに設定しました(チェックするすべてを+777にしても)
  2. /tmp/php-fpm.sockをec2-userに設定しました
  3. nginx confファイルはec2-userに設定されています
  4. php-confがユーザーおよびグループec2-userに設定されている
  5. ps auxはすべてのphp-fpmおよびnginxプロセスでec2-userを提供します

私のNginx構成には多くのファイルが含まれており、基本的な設定は次のとおりです。

user              ec2-user ec2-user;
worker_processes  5;  
error_log /opt/nginx/error.log;    
pid        /var/run/nginx.pid;    
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /opt/nginx/access.log main;    
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 13m;
    index index.php index.html index.htm;
    upstream php {
       server unix:/tmp/php-fpm.sock;
    }
    include /etc/nginx/conf.d/*.conf;
    include /mnt/web/nginx/conf.d/*.conf;
}

私の/etc/nginx/conf.d/は空です私の/mnt/web/nginx/conf.dには、「wordpress.conf」をすべて含むWebサイト構成の多くが含まれています。

location / {
    try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}
location ~ \.php$ {
    try_files $uri =404;    
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php;
}

私の/opt/php/etc/php-fpm.conf:

include=/opt/php/etc/fpm.d/*.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-fpm.sock
user = ec2-user
group = ec2-user
pm = dynamic
pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.status_path = /fpm-status
ping.path = /fpm-ping
slowlog = log/$pool.log.slow
catch_workers_output = yes

更新:問題を見つけ、答えに入れます


1
selinuxは有効ですか?getenforceまたはcat / selinux / enforceを実行し、0でない場合は有効になっています
silviud

1
nginx構成の残りの部分は何ですか?
マイケルハンプトン

1
ログファイルからのソケットは/tmp/php-fpm.sockですが、/ var / lib / nginx / tmpを変更しました-nginxでchrootを実行しましたか?
silviud 2013

1
コマンドの出力を送信します
silviud

1
また、ご家庭内のすべてのディレクトリを参照してください...ということになりserverfault.com/questions/170192/...
silviud

回答:


16

/ var / lib / nginx / tmpをec2-user / ec2-userに設定しました(チェックするものすべて+777ですら)

しかし...私は/ var / lib / nginxをec2-user / ec2-userに設定する必要もありました

...親のnginxフォルダーもchown / chgrpした後:エラーはもう発生しません。

数時間かかった...


7
chown -Rf www-data:www-data /var/lib/nginx私のために働いた。何もchmodする必要はありませんでした。
Chris

ログファイルをチェックすることは何も前にそれらをチェックすることを忘れないで、常に役立ちます:)
悲しみの詩

9

これは一般的に起こります。usernginx.conf の設定が

user nginx;

他の何かに。この場合、

user ec2-user ec2-user;

chmodのコメントによると、chmodコマンドは不要であり、セキュリティホールを開く可能性があります。

解決:

/ var / lib / nginxで現在のユーザーとグループの所有権を確認します。

$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug  5 00:05 /var/lib/nginx

これは、存在しない可能性のあるユーザーとグループという名前のユーザーnginxがこのフォルダを所有していることを示しています。これはファイルのアップロードを防ぎます。

この場合、フォルダーの所有権をnginx.confで定義されているユーザーに変更しますec2-user(sudoは必要ない場合があります)。

$ sudo chown -Rf ec2-user:ec2-user /var/lib/nginx

実際に変更されたことを確認します。

$ ls -ld /var/lib/nginx
drwx------ 3 ec2-user ec2-user 4096 Aug  5 00:05 /var/lib/nginx

権限拒否エラーはなくなります。error.logを確認します(nginx.conf error_logの場所に基づく)。

$ sudo nano /opt/nginx/error.log

それがうまくいかない場合は、nginxとphp-fpmをリロードする必要があるかもしれません。

$ sudo service nginx reload
$ sudo service php-fpm reload

私のグーグルクラウドCentos 7サーバーでそれはトリックをしました。
Damodar Bashyal

3

他の解決策はどれもうまくいきませんでしたが、これはうまくいくことがわかりました:

$ apt-get install php-pear php5-dev
$ pecl install timezonedb
$ echo 'extension=timezonedb.so'> /etc/php5/mods-available/timezonedb.ini
$ ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/conf.d/30-timezonedb.ini
$ service php5-fpm restart

ソース


わかりました、私たちはいくつかの解決策を試しました、そしてこれはうまくいったものです。なぜ機能したのか、何が問題なのかはわかりませんが、機能しました。
Neil Masters

1

ファイルのアップロードに関しても同様の問題があります。nginx 500エラー 2015/07/05 03:50:36 [crit] 3656#0: *7 open() "/var/lib/nginx/tmp/client_body/0000000007" failed (13: Permission denied), client: 10.0.2.2, server: www.test.com, request: "POST /api/v1/users HTTP/1.1", host: "test"

この問題は許可のみに関連しており、設定しただけで問題は解決しchmod -R 755 /var/lib/nginxました。


0

権限で私の問題を解決しました。最も簡単で簡単な方法は、php-fpmまたはnginxをsudo(スーパーユーザー)として実行しないことでした。あなたがしなければならないでしょう:

  1. nginxのすべてのログ出力場所をyourUserName:yourUserNameの例に変更します。chown yourUserName:yourUserName /var/log/nginx/error.log
  2. 次の更新サーバーのディレクトリとchown yourUserName:yourUserName -R /var/www

rootを使用しないことで、php-fpmのユーザーやグループ、またはリッスンしているユーザーやグループを変更する必要がなくなりました。現在のユーザー名になるため、nginx.conf 'user'もコメントアウトしてください。


同じ回答を複数回投稿しないでください。また、この問題は長い間解決されています。
スヴェン

0

/ var / lib / nginx / whateverの権限を編集する代わりに、nginxに/ tmp / nginxのような別のパスを使用するように指示するほうが理にかなっていますか?これで問題が解決しました:

# create the directory
mkdir /tmp/nginx
chown -R nginx.nginx /tmp/nginx (assumes nginx user is named nginx)
chmod -R 700 /tmp/nginx

/ tmp / nginxのアクセス許可は700にする必要があります(所有者が/etc/nginx/nginx.conf 'user'ディレクティブで指定された同じユーザーである限り問題ありません)、または何らかの理由で必要な場合は770にする必要があります別のファイル所有者とnginxがあり、グループのアクセス許可を介してI / Oを実行します。それを見たことはないが、誰が知っている。

centos7で、/ etc / nginx / nginx.confを編集してnginxにクライアント本体にその新しいディレクトリを使用するように指示します

...

http {
  ...
  client_body_temp_path /tmp/nginx 1 2;
  ...
}

そしてnginxを再起動します(再びcentos7)

systemctl restart nginx

決して何もchmod 777しないでください。特にキャッシュではありません!これで、すべてのローカルユーザーがキャッシュを書き換えて、潜在的に悪意のあるデータをユーザーに送信できます。アップロードの場合、誰かが代わりに自分のアップロードを代用することができます。
マイケルハンプトン

イエス様、リラックスしてください。このビルドはデモクラスタの一部です。しかし、よくわからない人のための良いキャッチ、私は答えを編集します。
シリコンロックスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.