Как отследить, откуда на Ubuntu поступают настройки umask для php5-fpm

Я бы очень признателен за помощь в поиске и диагностике проблем с Umasnt в Ubuntu:

я бегу php5-fpm с помощью Apache через proxy_fcgi, Процесс выполняется с umask 0022 (подтверждается тем, что PHP отправляет результаты umask() в файл [результат "18" == 0022]). Я хотел бы изменить это на 0002, но не могу отследить, откуда исходит маска.

Apache установлен с umask 0002, и в качестве теста, если я отключу proxy_fcgi и запустив мой тест выше, я получаю файл с u + g, имеющий доступ rw (и содержимое файла подтверждает umask как '2' == 0002).

Если я sudo -iu fpmuser и беги umask результаты 0002.

Системная информация:

  • PHP: 5.5.3-1ubuntu2.1
  • Apache: 2.4.6
  • Убунту: 13.10
  • PHP-PFM выводит список с использованием портов TCP (поскольку порты Unix еще не работают / не поддерживают)

До сих пор я пробовал следующее (каждый сопровождается перезапуском системы и повторным тестированием):

  • добавление umask 0002 к началу /etc/init.d/php5-fpm
  • добавление --umask 0002 в start-stop-daemon звонит в /etc/init.d/php5-fpm
  • добавление umask 0002 в .profile в доме fpm пользователь

Что-то явно настраивает umask процесса php-fpm - так, как я могу начать отслеживать то, что заставляет umask 0022 влиять на процесс php-fpm?

РЕДАКТИРОВАТЬ (1):

  • Настройка системы Umask через /etc/login.defs (см. Как установить umask для всей системы?) влияет на umask в другом месте (например, через команды sudo теперь имеет umask 0002), но php-fpm создает файлы с umask 0022. Обратите внимание, что я проверил, что session optional pam_umask.so также присутствовал в /etc/pam.d/common-session-noninteractive и я проверил umasks 002 и 0002.

РЕДАКТИРОВАТЬ (2):

  • Я смог повторить проблему, используя nginx а также php5-fpm (с использованием сокетов unix, установленных в режим прослушивания '0666').
  • Я хотел бы проследить, откуда исходит маска, но я бы согласился найти способ заставить его достичь того, чего я хочу.
  • Я должен добавить, что первый тест был сделан на образе Amazon Ubuntu 13.10. Мои тесты в "edit 2" были завершены с использованием копии ISO-установки сервера Ubuntu13.10 с нуля на виртуальной машине. Все установки были завершены с помощью apt-get, а не путем загрузки исходного кода и сборки.

РЕДАКТИРОВАТЬ (3):

  • Я подтвердил, что могу манипулировать umask вручную одним из следующих способов (проверено проверкой разрешений созданного тестового файла):

    а. В оболочке установите umask и запустите /usr/sbin/php-fpm из скорлупы

    б. В оболочке запустите следующее с любым значением umask, которое мне нравится:

     start-stop-daemon --start --quiet --umask 0002 --pidfile /var/run/php5-fpm.pid --exec /usr/sbin/php5-fpm -- --daemonize --fpm-config /etc/php5/fpm/php-fpm.conf
    
  • Однако эта точно такая же команда в /etc/init.d/php5-fpm файл не может настроить umask при запуске sudo service php5-fpm stop; sudo service php5-fpm start или при перезагрузке.

4 ответа

Решение

Не решение для общего отслеживания того, откуда исходят настройки umask в ubuntu (единственный способ, который я нашел до сих пор, - это старый добрый трудоемкий подход к репликации проблемы, попытке изолировать ее от сценария или функции, а затем отступить через каждый скрипт / функцию, которая вызывается рекурсивно), но решение проблемы с php5-fpm umask. Я нашел много обращений в Google, Stackru и других местах для решения этой проблемы, но пока нет решения. Надеюсь, это полезно для людей.

редактировать /etc/init/php-fpm.conf включить строку umask 0002 (или любой другой, по вашему желанию). Моя версия файла теперь выглядит так:

# php5-fpm - The PHP FastCGI Process Manager

description "The PHP FastCGI Process Manager"
author "Ondřej Surý <ondrej@debian.org>"

start on runlevel [2345]
stop on runlevel [016]

### my edit - change umask setting
umask 0002

pre-start exec /usr/lib/php5/php5-fpm-checkconf

respawn
exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf

объяснение

Проследив через service команда, которая запускает php5-fpm при запуске он выполняет некоторые проверки (строка 118 на моей копии) для /etc/init/${SERVICE}.conf вместе с проверкой initctl присутствует и может сообщить о своей версии. Если эти тесты пройдены, то upstart который используется в случае php5-fpm использует /etc/init/php-fpm.conf файл.

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

Насколько я могу понять, это означает, что поэтому команда 'service' фактически никогда не выполняла start-stop-daemon … команды найдены в /etc/init.d/php5-fpm вот почему мои предыдущие правки не имели никакого эффекта. Вместо этого это проходит в upstart (на самом деле initctl) когда вы используете что-то вроде service php5-fpm start, так далее.

Если вы используете systemd, в /etc/systemd/system каталог, создайте новый каталог с именем php7.2-fpm.service.d, Название этого каталога будет зависеть от вашего дистрибутива и версии PHP. Бежать systemctl list-units --type=service | grep --ignore-case php чтобы узнать, как это назвать. Внутри этого каталога поместите файл с именем umask.conf с содержанием:

# /etc/systemd/system/php7.2-fpm.service.d/umask.conf
[Service]
UMask=0002

Чтобы изменения вступили в силу, запустите:

systemctl daemon-reload && systemctl restart php7.2-fpm

Преимущество этого решения заключается в том, что ваши настройки не теряются при обновлении пакетов.

Объяснение того, как это работает, из руководства по systemd:

Наряду с модульным файлом foo.service может существовать "раскрывающийся" каталог foo.service.d /. Все файлы с суффиксом ".conf" из этого каталога будут проанализированы после анализа самого файла. Это полезно для изменения или добавления параметров конфигурации для устройства без необходимости изменения файлов модуля. Каждый файл должен иметь соответствующие заголовки разделов. Обратите внимание, что для созданных экземпляров модулей эта логика сначала ищет экземпляр подкаталога ".d /" и считывает его файлы ".conf", затем следует подкаталог шаблона ".d /" и файлы ".conf".

В дополнение к / etc / systemd / system раскрывающиеся каталоги ".d" для системных служб можно поместить в каталоги / usr / lib / systemd / system или / run / systemd / system. Добавленные в / etc файлы имеют приоритет над файлами в / run, которые, в свою очередь, имеют приоритет над файлами в / usr / lib. Вложенные файлы в любом из этих каталогов имеют приоритет над единичными файлами, где бы они ни находились. Несколько раскрывающихся файлов с разными именами применяются в лексикографическом порядке, независимо от того, в каких каталогах они находятся.

Лучше скопируйте скрипт systemd перед редактированием php5-fpm.service, иначе он будет перезаписан при следующем обновлении:

cp /lib/systemd/system/php5-fpm.service /etc/systemd/system/
vi /etc/systemd/system/php5-fpm.service
Add: UMask=0002 in [Service] section.
systemctl daemon-reload
systemctl restart php5-fpm

Источник: https://ispire.me/running-php-fpm-with-different-user-group-using-umask/

Хорошо, но это относится ко всем бассейнам. Было бы удобно иметь возможность установить что-то вроде

env[umask] = 0002 (шансов для этого нет)

гуглил, но не похоже на способ сделать это для каждого хоста.

Другие вопросы по тегам