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

я был бы очень признателен за любую помощь в отслеживании и диагностике проблемы umask на Ubuntu:

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

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
  • Ubuntu: 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 to .profile в доме fpm пользователей

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

изменить (1):

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

EDIT (2):

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

EDIT (3):

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

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

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

     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
    
  • этой точно та же команда в не для настройки umask при запуске sudo service php5-fpm stop; sudo service php5-fpm start или при перезагрузке.

4 ответов


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

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

# 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

объяснение

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

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

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


если вы используете 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.сервис, "выпадающий" каталог foo.услуга.д/ могут существовать. Все файлы с суффиксом ".conf " из этого каталога будет проанализирован после анализа самого файла. Это полезно для изменения или добавления параметров конфигурации устройства без необходимости изменения файлов устройства. Каждый файл drop-in должен иметь соответствующие заголовки разделов. Обратите внимание, что для инстанцированные единицы, эта логика сначала будет искать экземпляр".d / " подкаталог и читать его ".conf "файлы, за которыми следует шаблон".d / "подкаталог и".конф" файлы.

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


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

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 (нет шансов, чтобы это сработало)

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