PHP FPM memberikan izin ditolak?

9

Saya membaca beberapa entri tentang mengapa PHP-FPM mungkin memberi saya izin ditolak tetapi saya tidak bisa menyelesaikannya.

Log kesalahan dibaca seperti:

    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/"

Saya sedikit tersesat:

  1. Saya telah mengatur / var / lib / nginx / tmp ke ec2-user (saya bahkan +777 semuanya untuk memeriksa)
  2. Saya telah mengatur /tmp/php-fpm.sock ke pengguna ec2
  3. file conf nginx diatur ke pengguna ec2
  4. php-conf diatur ke pengguna dan grup EC2-pengguna
  5. ps aux memberikan pengguna ec2 pada semua proses php-fpm dan nginx

Konfigurasi Nginx saya mencakup banyak file, konfigurasi dasar adalah:

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/ saya kosong /mnt/web/nginx/conf.d saya mengandung BANYAK konfigurasi situs web yang semuanya termasuk "wordpress.conf":

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 saya:

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

UPDATE: menemukan masalah, taruh di jawabannya

edelwater
sumber
1
apakah selinux diaktifkan? jalankan getenforce atau cat / selinux / menegakkan jika 0 tidak diaktifkan
silviud
1
Apa sisa konfigurasi nginx Anda?
Michael Hampton
1
socket Anda dari file log adalah /tmp/php-fpm.sock tetapi Anda berubah / var / lib / nginx / tmp - apakah Anda melakukan chroot di nginx?
silviud
1
mengirim output dari perintah mount
silviud
1
lihat juga semua direktori di rumah Anda ... lihat serverfault.com/questions/170192
silviud

Jawaban:

16

Saya telah mengatur / var / lib / nginx / tmp ke ec2-user / ec2-user (saya bahkan +777 semuanya untuk memeriksa)

Tapi ... Saya juga harus mengatur / var / lib / nginx ke ec2-user / ec2-user

... setelah juga chown / chgrp folder nginx induk: tidak ada lagi kesalahan.

Butuh waktu beberapa jam ...

edelwater
sumber
7
chown -Rf www-data:www-data /var/lib/nginxbekerja untukku. tidak perlu chmod apa pun.
Chris
memeriksa file log selalu membantu, ingatlah untuk memeriksanya sebelum apa pun :)
puisi sedih
9

Ini biasanya terjadi. Ketika userpengaturan di nginx.conf diubah dari

user nginx;

untuk sesuatu yang lain. Pada kasus ini,

user ec2-user ec2-user;

Perintah chmod tidak diperlukan sesuai komentar Chris, dan bisa membuka celah keamanan.

Larutan:

Periksa kepemilikan pengguna dan grup saat ini di / var / lib / nginx.

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

Ini memberi tahu Anda bahwa pengguna dan grup yang mungkin tidak ada yang nginxmemiliki folder ini. Ini mencegah pengunggahan file.

Ubah kepemilikan folder menjadi pengguna yang ditentukan dalam nginx.conf dalam kasus ini ec2-user(sudo mungkin tidak diperlukan).

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

Verifikasi bahwa itu benar-benar berubah.

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

Kesalahan yang ditolak izin sekarang harus hilang. Periksa error.log (berdasarkan lokasi nginx.conf error_log).

$ sudo nano /opt/nginx/error.log

Jika itu tidak berhasil, Anda mungkin perlu memuat ulang nginx dan php-fpm.

$ sudo service nginx reload
$ sudo service php-fpm reload
nu everest
sumber
Itu berhasil di server Google cloud Centos 7 saya.
Damodar Bashyal
3

Tidak ada solusi lain yang bekerja untuk saya, tetapi saya menemukan ini berfungsi:

$ 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

Sumber

nullvariable
sumber
Ok, kami mencoba beberapa solusi dan ini yang berhasil. Kita tidak tahu mengapa itu berhasil atau apa masalahnya, tetapi ternyata berhasil.
Neil Masters
1

Saya punya masalah serupa dengan unggah file. kesalahan 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"

Masalah ini terkait dengan izin saja, saya hanya mengatur chmod -R 755 /var/lib/nginxdan semuanya berjalan baik!

Bishwanath Jha
sumber
0

Baru saja menyelesaikan masalah saya dengan izin. Cara termudah dan paling sederhana adalah tidak menjalankan php-fpm atau nginx sebagai sudo (pengguna super). Yang harus Anda lakukan adalah:

  1. chown semua lokasi output log untuk nginx ke yourUserName: contoh yourUserName Anda :chown yourUserName:yourUserName /var/log/nginx/error.log
  2. Server pembaruan terbaru juga contoh :chown yourUserName:yourUserName -R /var/www

Dengan tidak menggunakan root, saya tidak perlu mengubah pengguna atau grup php-fpm atau pengguna atau grup yang mendengarkan. Pastikan Anda juga mengomentari 'pengguna' nginx.conf karena itu akan menjadi nama pengguna saat ini.

clh
sumber
Tolong jangan posting jawaban yang sama beberapa kali. Juga, masalah ini telah lama dipecahkan.
Sven
0

Alih-alih mengedit izin pada / var / lib / nginx / apa pun, bukankah lebih masuk akal untuk hanya memberitahu nginx untuk menggunakan jalur yang berbeda seperti / tmp / nginx? Ini memperbaiki masalah bagi saya:

# 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 izin harus 700 lebih disukai (yang seharusnya tidak menjadi masalah selama pemiliknya adalah pengguna yang sama yang ditentukan dalam /etc/nginx/nginx.conf arahan 'pengguna') atau 770 jika karena alasan tertentu Anda perlu memiliki pemilik file yang berbeda dan nginx untuk melakukan i / o melalui izin grup. Tidak pernah melihat itu tetapi siapa yang tahu.

Pada centos7, edit /etc/nginx/nginx.conf untuk memberi tahu nginx untuk menggunakan direktori baru itu untuk badan klien

...

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

dan restart nginx (lagi centos7)

systemctl restart nginx
siliconrockstar
sumber
Tidak pernah chmod 777 apa pun. Terutama bukan cache! Sekarang setiap pengguna lokal dapat menulis ulang cache Anda dan mengirim data yang berpotensi berbahaya ke pengguna Anda. Untuk unggahan, seseorang dapat mengganti unggahan mereka sendiri sebagai gantinya.
Michael Hampton
Ya Tuhan santai, bangunan ini adalah bagian dari kelompok demo. Tapi tangkapan yang bagus untuk orang-orang yang mungkin tidak tahu yang lebih baik, saya akan mengedit jawabannya.
siliconrockstar