Подтвердить что ты не робот

Как отслеживать, где настройки 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 в .profile в дом пользователя fpm

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

EDIT (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.

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

  • Я смог реплицировать проблему, используя nginx и php5-fpm (используя Unix-сокеты, установленные в режиме прослушивания '0666').
  • Я хотел бы проследить, откуда идет umask, но я бы решил каким-то образом заставить его к тому, что я хочу.
  • Я должен добавить, что первый тест был сделан на изображении 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 или при перезагрузке.

4b9b3361

Ответ 1

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

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

# php5-fpm - The PHP FastCGI Process Manager

description "The PHP FastCGI Process Manager"
author "Ondřej Surý <[email protected]>"

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 upstart дает довольно четкие инструкции. В частности, вы можете проверить кулинарную книгу с выскочкой для конкретной специфики.

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

Ответ 2

Аддон с 2016 года:
если вы используете systemd, а затем отредактируйте /lib/systemd/system/php5-fpm.service
И отредактируйте главу "Сервис":

[Service]
UMask=0002

Ответ 3

лучше скопировать systemd script перед редактированием 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/

Ответ 4

okey, но это относится ко всем пулам. Было бы удобно установить его с помощью чего-то вроде

env [umask] = 0002 (нет возможности для этого)

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