umask для пользователя www-data, работающего с PHP на Ubuntu

Вопрос или проблема

Настройка нового веб-сервера на 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, которые четко указаны:

  1. Установили umask в /etc/pam.d/common-session.
  2. Установили umask в /etc/pam.d/common-session-noninteractive.
  3. Установили umask в /etc/profile.
  4. Установили umask в /etc/apache2/envvars.
  5. Установили umask в /etc/login.defs.
  6. Установили umask для www-data в /etc/passwd.

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

Причина проблемы

Основная причина, по которой вы не видите изменений, заключается в том, что файлы, которые создает PHP, на самом деле создаются через PHP-FPM (FastCGI Process Manager), а не через Apache. Это означает, что изменения, внесенные в конфигурации Apache, не повлияют на процессы PHP-FPM.

Решение проблемы с PHP-FPM

Чтобы установить корректный umask для PHP-FPM, сделайте следующее:

  1. Создайте файл конфигурации для умаски 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
  2. Вставьте в файл следующую конфигурацию:

    [Service]
    UMask=0002
  3. Сохраните файл и выйдите из редактора.

  4. Перезапустите службу PHP-FPM:

    sudo systemctl daemon-reload
    sudo systemctl restart php7.1-fpm

Дополнительные рекомендации

  1. Использование ACL (Access Control Lists):
    Вы можете настроить ACL для ваших директорий, чтобы обеспечить более гибкое управление правами доступа. Это позволит новым файлам автоматически наследовать права группы.

    Чтобы сделать это, выполните следующие команды:

    chmod g+s ваш_каталог
    setfacl --default --modify group:rwx ваш_каталог

    Это установит флаг setgid, который заставит новые файлы наследовать группу директории.

  2. Проверяйте права:
    После внесения изменений не забудьте проверить, имеется ли у новых файлов правильный umask и правильные права доступа.

    getfacl ваш_каталог
  3. Проверка работоспособности:
    Создайте тестовый файл с помощью PHP и проверьте его права:

    <?php
    file_put_contents('testfile.txt', 'Hello, World!');
    ?>

Заключение

Настройка umask для пользователя www-data в контексте работы с PHP на Ubuntu может быть вызовом, особенно когда работаете с PHP-FPM. Приведенные выше шаги должны помочь вам добиться нужных прав доступа для файлов, создаваемых PHP. Если у вас возникают дополнительные вопросы или проблемы, подумайте о том, чтобы обратиться к документации или сообществу, чтобы получить помощь. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...