2014-01-21 7 views
13

Я бы очень признателен за любую помощь в поимке и диагностировать проблему UMASK на Ubuntu:Как отследить, где настройки UMASK php5-FPM приходят от на убунту

Я бегу 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?

РЕД (1):

  • регулировка общесистемных бит полномочий через /etc/login.defs (см How to set system wide umask?) влияет на биты полномочий в другом месте (например, comannds через sudo теперь имеет биты полномочий в 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):

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

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

    b. В оболочке, выполните следующие действия с любым 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не удается для настройки при запуске бит полномочий sudo service php5-fpm stop; sudo service php5-fpm start или при перезагрузке.

ответ

15

Не подхожу для обобщенно трассировки, где настройки UMASK поступают из на убунте (единственный способом я нашел до сих пор является хорошим старым жестким подходом к работе тиражирования вопроса, пытаясь изолировать его в сценарий или функцию, затем отступать через каждый скрипт/функцию, которая называется рекурсивно), но решение для проблемы с umask php5-fpm. Я нашел много хитов в 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 дает довольно четкие инструкции. В частности, вы можете проверить upstart cookbook на предмет специфики, в которой вы нуждаетесь.

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

+0

Не проблема, которую я пытался решить, но мне понравился хорошо документированный вопрос и ответ. – berbt

+1

Я борюсь с той же проблемой для Debian 8, однако она не использует выскочку. Любые подсказки для установки umask для php-fpm на Debian? – SiliconMind

+0

@SiliconMind То же самое здесь. Вы нашли решение еще? – balu

0

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

окр [Umask] = 0002 (никаких шансов для этого не работать)

был прибегая к помощи, но, кажется, не быть способ сделать это на основе каждого узла.

7

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

[Service] 
UMask=0002 
+1

Следует отметить, что все директивы чувствительны к регистру: U ** m ** ask не работает. – DoubleThink

+1

Он работал как прелесть в PHP 7 FPM тоже (конечно, файл, который нужно отредактировать, это '/ lib/systemd/system/php7.0-fpm.service' – lucaferrario

1

лучше копия 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/

+0

Это правильно для систем на базе системы, например Ubuntu 16.04. более старые версии Ubuntu, такие как 14.04 Upstart - это система init по умолчанию. Несмотря на то, что вышеприведенные файлы иногда присутствуют на диске, они фактически не используются. –

 Смежные вопросы

  • Нет связанных вопросов^_^