Я бы очень признателен за помощь в отслеживании и диагностике проблемы с 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или при перезагрузке.