У меня есть установка apache-mpm-itk + php_module, и папки / файлы пользователя принадлежат им. Но я хочу перенести несколько учетных записей в nginx + php-fpm.

Какими должны быть права доступа к папкам / файлам, если я хочу использовать nginx / php-fpm с виртуальными хостами, принадлежащими разным пользователям?

Например, дом пользователя:

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

и разрешения пользователь: пользователь

Вот код из хоста nginx conf:

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

А вот конфиг пула из 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    

1 ответ1

1

Работники nginx порождаются значениями из user директивы. Значение по умолчанию - nobody , но официальные пакеты nginx включают конфигурацию по умолчанию, содержащую user nginx; в nginx.conf , в main контексте.

Если указан только пользователь, группа с тем же именем применяется к работникам nginx.

Пользователь по умолчанию: группа для PHP-FPM - www-data: www-data.

То, что вы могли бы сделать, это сделать файлы, принадлежащие nginx:www-data которые бы работали. Тогда проблема будет заключаться в обновлении файлов, поскольку любому пользователю, создающему файлы, потребуется доступ на запись.

По умолчанию каталоги доступны для записи их владельцем (пользователем), но не группой этого пользователя, что заставляет вас либо:

  1. используйте пользователя nginx для обновления веб-контента
  2. добавить доступ на запись в группу www-data и добавить пользователя, управляющего контентом в эту группу

Для меня оба предыдущих решения не идеальны.

Что бы я сделал, чтобы это дерево каталогов принадлежало пользователю, управляющему контентом, использовало user nginx www-data; сделать рабочих nginx пользователями, принадлежащими к группе www-данных, и позволить пользователю читать / писать, группировать, читать и прочее ничего (таким образом, битовая 0640 для файлов и битовая маска 0750 для каталогов, позволяющая обходить пользователя и группу).

Чтобы пойти еще дальше, я бы добавил бит setgid для каталогов, чтобы гарантировать, что правильная группа автоматически применяется к любому каталогу / файлу, созданному в дереве. Таким образом, я бы использовал 2640 битовую маску для файлов и 2750 для каталогов.

Вы можете изменить битовую маску по умолчанию для определенного раздела на уровне операционной системы ... или вы можете придерживаться значений по умолчанию, которые немного менее строгие, но работают безупречно, просто меняя владельца и добавляя флаг setgid.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .