Большинство ответов не совсем точные или подробные ... Не забудьте safe_mode
проверяет, совпадает ли владелец сценария с владельцем файла, к которому вы хотите получить доступ. Это не имеет ничего общего с пользователем httpd: group.
Например, ваш httpd может работать как apache:daemon
, ваш скрипт принадлежит some_user:users
и файл, который вы хотите записать в some_other_user:users
.
Если вы не активируете safe_mode_gid
, скрипт не сможет получить доступ к файлу, поскольку пользователи не совпадают.
Это обычное явление, когда скрипт создает папку, а затем пытается создать файлы внутри этой папки.
Создание папки успешно выполнено, поскольку родительская папка принадлежит тому же пользователю, что и сценарий, ее создавший (скорее всего, она была загружена "some_user").
НО, созданная папка теперь принадлежит пользователю httpd, скажем apache:daemon
Если активен safe_mode
, вы не сможете создать файл внутри этой папки, поскольку владелец скрипта (some_user
) не соответствует владельцу папки (apache
).
Даже если вы активируете safe_mode_gid
, он не будет работать, поскольку группа сценариев - «пользователи», а группа папок - «демон».
Лучшее решение - установить одну и ту же группу для пользователей ftp и httpd.
Не забывайте, что вы также должны разрешить доступ на запись для группы в «доступной для записи» папке, и это менее безопасно, поскольку, поскольку все ваши пользователи находятся в одной группе, процесс httpd может получить доступ к файлам других пользователей, так как вы активируете safe_mode_gid
.
На самом деле вы должны объединить safe_mode_gid
+ open_basedir
и установить дом пользователя как open_basedire
, чтобы избежать этого.
НТН