В соответствии с документами PHP в безопасном режиме на safe_mode_gid:
По умолчанию безопасный режим выполняет сравнение UID при открытии файлов. Если вы хотите уменьшить сравнение GID, включите safe_mode_gid. Использовать ли проверку UID (FALSE) или GID (TRUE) при доступе к файлу.
Для сценария PHP, выполняющегося на веб-сервере, в чем разница между проверкой UID (идентификатора пользователя) и проверкой GID (идентификатора группы)?
Проверка UID в безопасном режиме используется для предотвращения доступа пользователей к файлам других людей. GID используется для предотвращения доступа ГРУППЫ пользователей к другим файлам ГРУПП.
Это только позволит вам немного больше гибкости в настройке вашего веб-сервера. Используя safe_mode_gid, вы должны иметь возможность запускать отдельные процессы PHP / httpd для каждого пользователя в вашей системе, но дать каждому процессу возможность читать некоторые общие файлы, если они все выполняются как одна группа (GID) и общие файлы. принадлежат этой группе.
Например, имя пользователя и группа веб-сервера apache: www ,
если вы установите для проверки UID, процесс php будет иметь доступ только к любому файлу, принадлежащему пользователю apache . Поэтому, если в вашей системе работает другой веб-сервер, например, tomcat с именем пользователя и группой tomcat: www , любые файлы, созданные процессом tomcat, не будут доступны php, поскольку они принадлежат пользователю tomcat .
Но если вместо этого вы используете проверку GID, файлы, созданные процессом tomcat, будут доступны для чтения процессу php, поскольку они принадлежат одной и той же группе www.
Большинство ответов не совсем точные или подробные ... Не забудьте safe_mode
проверить, совпадает ли владелец сценария с владельцем файла, к которому вы хотите получить доступ. Это не имеет ничего общего с httpd user: 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
значения, чтобы избежать этого.
НТН