Назад | Перейти на главную страницу

Все еще смущает разрешения - linux, nginx, php-fpm

Я прочитал канонический ответ на Какие разрешения должны иметь файлы / папки моего веб-сайта на веб-сервере Linux?

Однако я все еще застрял. Моя установка:

Я создал webadmin group и добавил к ней и ade, и nginx:

$ groups ade
ade : ade webadmin

$ groups nginx
nginx : nginx webadmin

Я установил владельцем всего сайта я и группу веб-админов: chown ade:webadmin *

...как вы видете:

drwxrwxr-x 2 ade webadmin 4096 Jul  3 13:58 logs
drwxrwxr-x 5 ade webadmin 4096 Jul  4 08:35 public
drwxrwxr-x 4 ade webadmin 4096 Jul  3 16:18 system
drwxrwsr-x 2 ade webadmin 4096 Jul  9 16:13 uploads

Однако, несмотря на то, что разрешения на загрузку равны 775 (rwx для пользователя и группы), nginx и php не могут записывать в папку. Только если я установлю 777, он сможет загружать в него изображения.

Я видел совет по использованию chmod u+w в приведенном выше каноническом ответе, но не понимаю, почему это необходимо.

Решено:

php-fpm, конечно же, не запускается от имени пользователя nginx. Его можно настроить (в CentOS) в файле /etc/php-fpm.d/www.conf. Я отредактировал его конфигурацию, добавив строку 45:

44  ;group = nobody
45  group = webadmin

Затем перезапустил:

sudo /etc/init.d/php-fpm restart

Самый разумный подход, который я придумал, заключался в следующем:

Посмотрите /etc/php-fpm.d/www.conf, какого пользователя использует FPM. В моем случае это был «апач». Затем я добавил этого пользователя в группу nginx.

И теперь я могу управлять разрешениями согласованным образом - пользователь - это я, и у меня есть полное разрешение, группа - это nginx, которая прочитала (и r + x для dirs), и она согласована, поэтому оба веб-контента (доступ к nginx) а PHP (доступный через php-fpm) устанавливается группой nginx.

Еще одна веская причина не менять пользователя или группу в конфигурации php-fpm - избежать проблем с разрешениями - php-fpm создавал различные папки / файлы, используя своего предыдущего пользователя. И теперь он не может получить к ним доступ, поскольку больше не использует того же пользователя. Например, данные сеанса PHP (см. / Var / lib / php / session).

Надеюсь, это поможет!