Я был бы очень признателен за любую помощь в отслеживании и диагностике проблемы с 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
- Апач: 2.4.6
- Убунту: 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):
- настройка umask для всей системы с помощью
/etc/login.defs
(см. Как установить umask для всей системы?) влияет на umask в другом месте (например, команды черезsudo
теперь имеют umask 0002), но php-fpm по-прежнему создает файлы с umask 0022. Обратите внимание, что я проверил, чтоsession optional pam_umask.so
также присутствует в/etc/pam.d/common-session-noninteractive
, и я протестировал umask. 002 и 0002.
ИЗМЕНИТЬ (2):
- Мне удалось воспроизвести проблему, используя
nginx
иphp5-fpm
(используя сокеты unix, настроенные на режим прослушивания «0666»). - Я хотел бы проследить, откуда берется umask, но я бы согласился на какой-то способ заставить его делать то, что я хочу.
- Должен добавить, что первый тест был проведен на образе Amazon Ubuntu 13.10. Мои тесты в «редактировании 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
или при перезагрузке.