PHP O FPM concede permissão negada?

8

Eu li várias entradas sobre por que o PHP-FPM pode me dar permissão negada, mas não consigo resolvê-lo.

Os registros de erros são como:

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

Estou um pouco, mas perdi:

  1. Eu configurei o / var / lib / nginx / tmp para ec2-user (até mesmo 7777 tudo para verificar)
  2. Eu configurei o /tmp/php-fpm.sock para o ec2-user
  3. o arquivo conf nginx está definido como ec2-user
  4. o php-conf está definido para usuário e grupo ec2-user
  5. ps aux dá ec2-usuário em todos os processos php-fpm e nginx

Minha configuração do Nginx inclui muitos arquivos, o conf básico é:

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;
}

meu /etc/nginx/conf.d/ está vazio meu /mnt/web/nginx/conf.d contém MUITAS configurações de site, todas com "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;
}

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

UPDATE: encontrou o problema, coloque na resposta

    
por edelwater 21.04.2013 / 01:43

5 respostas

14

Eu configurei o / var / lib / nginx / tmp para ec2-user / ec2-user (até mesmo 7777 tudo para verificar)

Mas ... eu também tive que configurar o / var / lib / nginx para ec2-user / ec2-user

... depois também chown / chgrp a pasta nginx pai: não há mais erros.

Demorei algumas horas ...

    
por 21.04.2013 / 03:21
6

Isso geralmente acontece. Quando a configuração user no nginx.conf é alterada de

user nginx;

para outra coisa. Neste caso,

user ec2-user ec2-user;

O comando chmod não é necessário por comentário de Chris, e pode abrir um buraco de segurança.

Solução:

Verifique a propriedade atual do usuário e do grupo em / var / lib / nginx.

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

Isso informa que um usuário e grupo possivelmente inexistente chamado nginx possui essa pasta. Isso impede o upload de arquivos.

Altere a propriedade da pasta para o usuário definido no nginx.conf, neste caso, ec2-user (o sudo pode não ser necessário).

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

Verifique se realmente mudou.

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

O erro de permissão negada deve desaparecer agora. Verifique o error.log (baseado na localização do error_log nginx.conf).

$ sudo nano /opt/nginx/error.log

Se isso não funcionar, talvez seja necessário recarregar o nginx e o php-fpm.

$ sudo service nginx reload
$ sudo service php-fpm reload
    
por 29.12.2016 / 23:13
3

Nenhuma das outras soluções funcionou para mim, mas descobri que isso funciona:

$ 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

Fonte

    
por 21.05.2014 / 13:57
1

Eu tenho o problema semelhante com o upload de arquivos. erro 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"

O problema estava relacionado apenas à permissão, apenas defini chmod -R 755 /var/lib/nginx e as coisas funcionaram!

    
por 05.07.2015 / 06:13
0

Apenas resolvi meu problema com permissões. A maneira mais fácil e simples foi não rodar o php-fpm ou o nginx como sudo (super usuário). O que você teria que fazer é:

  1. chown todos os locais de saída de log de nginx para yourUserName: yourUserName example : chown yourUserName:yourUserName /var/log/nginx/error.log
  2. Próximo diretório do servidor de atualização também exemplo : chown yourUserName:yourUserName -R /var/www

Por não usar o root, não precisei alterar o usuário ou grupo do php-fpm ou qualquer usuário ou grupo de escuta. Certifique-se de comentar também o nginx.conf 'user', pois ele será o nome do usuário atual.

    
por 21.07.2017 / 22:29