Вопрос или проблема
Настройка нового веб-сервера на Ubuntu 14.04 и попытка разобраться с разрешениями файлов для файлов, созданных PHP.
По умолчанию все директории и файлы в /var/www
принадлежат группе www-admin. Разрешения для директорий — rwxrwsr-x
, а для файлов — rw-rw-r--
.
Мы затем установили группу для ограниченного числа директорий на www-data — это необходимо для того, чтобы PHP (через Apache) мог записывать файлы логов и кэша в этом месте.
Однако я не могу заставить PHP подчиняться umask 0002
, и, следовательно, файлы, созданные PHP, доступны для записи только пользователю www-data. Это проблема, поскольку мы используем непрерывную интеграцию и некоторые другие процессы очистки.
На данный момент я:
- Установил umask на 0002 в
/etc/pam.d/common-session
- Установил umask на 0002 в
/etc/pam.d/common-session-noninteractive
- Установил umask на 0002 в
/etc/profile
- Установил umask на 0002 в
/etc/apache2/envvars
- Установил umask на 0002 в
/etc/login.defs
- Установил umask на 0002 для
www-data
в/etc/passwd
, используяsudo chfn -o "umask=002" имя_даэемона
И я все еще застрял.
Я остановил/запустил службу и даже перезагрузил компьютер — без успеха.
“umask 002” в /etc/apache2/envvars должно работать.
Обратите внимание, что Apache должен быть перезапущен командой “service apache2 stop; service apache2 start” для применения изменений, а не “service apache2 restart”!
Смотрите здесь, если вам нужен более детализированный пример: https://serverfault.com/a/384922/228027
Если вы запускаете несколько сайтов, вы можете установить права на группу по умолчанию, используя списки управления доступом (ACL) для каждой директории следующим образом:
Установите флаг setid
, чтобы заставить все новые файлы наследовать группу от директории:
root@sh1:/srv/www/php/fastwarren.ca# chmod g+s wordpress
Сделайте новые файлы имеющими права rw
для группы, например, чтобы www-data
мог записывать в файлы, переданные по SFTP пользователем загрузки:
root@sh1:/srv/www/php/fastwarren.ca# setfacl --default --modify group:rwx wordpress
Подтвердите, что ACL выглядит так:
root@sh1:/srv/www/php/fastwarren.ca# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Создайте файл, чтобы подтвердить, что это сработало:
root@sh1:/srv/www/php/fastwarren.ca# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test
Проблема в том, что файлы создаются PHP-FPM. Это родительский процесс — не apache2. Единственный способ, которым я мог решить это, — добавить umask в /etc/init/php7.1-fpm.conf. Затем перезапустите PHP-FPM.
Связанная тема: Настройка umask для Nginx/php-fpm.
Это тоже не сработало для меня, пока я не понял следующее: плагин драйвера PDO SQLite для WordPress создаст файл базы данных только с разрешением на чтение для группы.
Проверьте свою рассудительность, используя скрипт создания отсюда: Как установить umask по умолчанию в Apache на Debian?.
Для Ubuntu, я думаю, что лучший / более простой способ добавить это — создать файл по адресу /etc/systemd/system/php8.2-fpm.service.d/umask.conf
, это значит, что нам просто нужно скопировать файл, а не изменять системные.
[Service]
UMask=0002
Ответ или решение
Установка umask для пользователя www-data, работающего с PHP на Ubuntu
Если вы настроили новый веб-сервер на Ubuntu 14.04 и столкнулись с проблемой управления правами доступа к файлам, создаваемым PHP, вы не одиноки. Ваша ситуация, когда файлы, генерируемые PHP, имеют ограниченные права доступа только для пользователя www-data, может быть решена несколькими способами. Давайте разберем шаги, которые вы уже предприняли, и рассмотрим дополнительные рекомендации для успешной настройки umask.
Шаги, которые были предприняты
Вы уже выполнили несколько шагов для установки umask на 0002
, которые четко указаны:
- Установили umask в
/etc/pam.d/common-session
. - Установили umask в
/etc/pam.d/common-session-noninteractive
. - Установили umask в
/etc/profile
. - Установили umask в
/etc/apache2/envvars
. - Установили umask в
/etc/login.defs
. - Установили umask для www-data в
/etc/passwd
.
Эти действия должны были помочь установить права на создание файлов, но как вы уже заметили, они не сработали.
Причина проблемы
Основная причина, по которой вы не видите изменений, заключается в том, что файлы, которые создает PHP, на самом деле создаются через PHP-FPM (FastCGI Process Manager), а не через Apache. Это означает, что изменения, внесенные в конфигурации Apache, не повлияют на процессы PHP-FPM.
Решение проблемы с PHP-FPM
Чтобы установить корректный umask для PHP-FPM, сделайте следующее:
-
Создайте файл конфигурации для умаски
umask.conf
:sudo mkdir -p /etc/systemd/system/php7.1-fpm.service.d sudo nano /etc/systemd/system/php7.1-fpm.service.d/umask.conf
-
Вставьте в файл следующую конфигурацию:
[Service] UMask=0002
-
Сохраните файл и выйдите из редактора.
-
Перезапустите службу PHP-FPM:
sudo systemctl daemon-reload sudo systemctl restart php7.1-fpm
Дополнительные рекомендации
-
Использование ACL (Access Control Lists):
Вы можете настроить ACL для ваших директорий, чтобы обеспечить более гибкое управление правами доступа. Это позволит новым файлам автоматически наследовать права группы.Чтобы сделать это, выполните следующие команды:
chmod g+s ваш_каталог setfacl --default --modify group:rwx ваш_каталог
Это установит флаг
setgid
, который заставит новые файлы наследовать группу директории. -
Проверяйте права:
После внесения изменений не забудьте проверить, имеется ли у новых файлов правильный umask и правильные права доступа.getfacl ваш_каталог
-
Проверка работоспособности:
Создайте тестовый файл с помощью PHP и проверьте его права:<?php file_put_contents('testfile.txt', 'Hello, World!'); ?>
Заключение
Настройка umask для пользователя www-data в контексте работы с PHP на Ubuntu может быть вызовом, особенно когда работаете с PHP-FPM. Приведенные выше шаги должны помочь вам добиться нужных прав доступа для файлов, создаваемых PHP. Если у вас возникают дополнительные вопросы или проблемы, подумайте о том, чтобы обратиться к документации или сообществу, чтобы получить помощь. Удачи в вашем проекте!