Как проследить, где настройки 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 (нет шансов, чтобы это сработало)
гуглил, но, похоже, это не способ сделать это на основе каждого хоста.