Nginx, php-fpm, hosts virtuais e premissions

0

Eu tenho a instalação do apache-mpm-itk + php_module e as pastas / arquivos do usuário pertencem a eles. Mas eu quero migrar várias contas para nginx + php-fpm.

Quais devem ser as permissões certas em pastas / arquivos se eu quiser usar o nginx / php-fpm com hosts virtuais que pertençam a diferentes usuários?

Por exemplo, a casa do usuário:

/var/www/user/data/www/domain.com    

e permissões é usuário: usuário

Aqui está o código do conf do nginx do host:

server {
    listen 8080;
    server_name domain.com;
    root /var/www/user/data/www/domain.com/;

    index index.php index.html index.htm;

    location / {
            # First attempt to serve request as file
            try_files $uri $uri/index.php;
    }


    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm/domain.com.socket;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

E aqui está a configuração do pool do php-fpm:

[domain.com]

listen = /var/run/php5-fpm/domain.com.socket
listen.backlog = -1
listen.owner = user
listen.group = user
listen.mode=0660

; Unix user/group of processes
user = user
group = user

; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /var/www/user/data/tmp
env[TMPDIR] = /var/www/user/data/tmp
env[TEMP] = /var/www/user/data/tmp

; host-specific php ini settings here
; php_admin_value[open_basedir] = /var/www/user/data:/tmp
php_admin_value[error_log] = /var/user/data/logs/fpm-php.log
php_admin_value[realpath_cache_size] = 4096K    
    
por psycho_one 20.10.2014 / 21:22

1 resposta

1

Trabalhadores nginx são gerados com o valor da diretiva user . O valor padrão é nobody , mas os pacotes oficiais do nginx incluem uma configuração padrão contendo user nginx; em nginx.conf , no contexto main .

Quando apenas um usuário é especificado, o grupo com o mesmo nome é aplicado aos trabalhadores do nginx.

Usuário padrão: o grupo para PHP-FPM é www-data: www-data.

O que você pode fazer é criar arquivos pertencentes a nginx:www-data , o que funcionaria na caixa. O problema seria então atualizar os arquivos, já que qualquer usuário que criasse arquivos precisaria de acesso de gravação.

Por padrão, os diretórios são graváveis pelo seu proprietário (usuário), mas não pelo grupo desse usuário, o que o obriga a:

  1. use o usuário nginx para atualizar o conteúdo da Web
  2. adicione o acesso de gravação ao grupo www-data e adicione o usuário que gerencia o conteúdo a este grupo

Para mim, as duas soluções anteriores são menos que ideais.

O que eu faria é fazer essa árvore de diretórios pertencente ao usuário que gerencia o conteúdo, usar user nginx www-data; para tornar o usuário nginx usuário pertencente ao grupo www-data e permitir que o usuário leia / escreva, agrupe para ler e outros nada (assim, um 0640 bitmask para arquivos e 0750 bitmask para diretórios, permitindo a passagem pelo usuário e grupo).

Para ir ainda mais longe, eu adicionaria o bit setgid nos diretórios, para garantir que o grupo correto seja automaticamente aplicado a qualquer diretório / arquivo criado na árvore. Eu usaria assim a máscara de bits 2640 nos arquivos e 2750 nos diretórios.

Você pode alterar o bitmask padrão para uma partição específica no nível do SO ... ou pode ficar com os padrões que são um pouco menos restritivos, mas trabalhe de maneira impecável, simplesmente alterando a propriedade e adicionando o sinalizador setgid.

    
por 08.11.2014 / 18:56