Почесывая голову на этом, кажется таким простым.
У меня есть система управления контентом на основе PHP для нашего сайта, написанная подрядчиком. Одной из функций является возможность загрузки изображений для отображения в различных местах на сайте (например, в галерее продуктов). Все такие загруженные изображения хранятся в определенном каталоге, называемом «вложения».
drwxrwsr-x 4 www ftpusers 4096 10.10 14:47 приложения
Как вы можете видеть, у меня установлен бит setgid для этого каталога, так что любые записанные файлы будут иметь группу, которую пользователи (например, пользователь FTP), которым необходим доступ к этим файлам, смогут их изменять / перезаписывать. Я установил маску для Apache, чтобы он записывал файлы как доступные для записи группой.
Когда я пытаюсь сделать это с ЛЮБЫМ пользователем в системе, создав новый файл в этом каталоге, он правильно наследует группу родителя. Когда новый файл создается с помощью PHP, работающего в Apache, он всегда является владельцем apache.apache. Apache, кажется, игнорирует бит setgid, что я не думаю, что это может сделать, как это было сделано файловой системой. Вот один файл, который я загрузил:
-rw-rw-r-- 1 apache apache 30536 10 октября 14:43 209
Я не могу напрямую тестировать пользователя apache, так как для него не задана оболочка входа (по понятным причинам безопасности).
Я могу получить такую же возможность разрешений, добавив группу ftpusers в группу apache, но это не кажется разумным с точки зрения безопасности.
Я обнаружил одну вещь, которая, похоже, может быть связана - безопасный режим php, который, как я убедился, отключен в /etc/php.ini, хотя я не уверен, что нашел файл php.ini, который mod_php в Apache используется. Сценарий php использует move_uploaded_file (); Насколько я могу судить, в коде php ничего особенного с разрешениями не делается.
Мое лучшее предположение могло бы состоять в том, что это преднамеренные ограничения для безопасности, но я не могу найти ничего, что, кажется, указывает на то, что это так.
Запуск CentOS 5.6 с Apache 2.2.17 и php 5.2.16.
У кого-нибудь есть подсказка?