PHP mkdir и apache владение - PullRequest
       46

PHP mkdir и apache владение

6 голосов
/ 01 апреля 2010

Есть ли способ настроить php, работающий под apache, для создания папок с папкой, принадлежащей владельцу программы, которая ее создает, а не принадлежащей apache?

При использовании word press он создает новые папки для загрузки, но они принадлежат apache.apache, а не сайту, на котором они работают. Это также происходит с использованием Ostickets. На данный момент нам нужно подключиться к серверу по SSH и выполнить команду chmod, но может показаться, что где-то будет параметр, позволяющий переопределить владение вне любой программы, которая это делает.

Ответы [ 4 ]

2 голосов
/ 07 апреля 2010

Safe_mode включено на вашем сервере. Функция mkdir() создает папку с владельцем («apache», «none», ..), которая отличается от текущего владельца скрипта. И сценарии не могут загружать (перемещать, копировать) файлы в эту папку с другим владельцем (это не похоже на текущего владельца сценария).

Отключить safe_mode, и это будет работать.

Подробнее см. http://php.net/manual/en/features.safe-mode.php.

P.S. При включении safe_mode вы не можете использовать функцию chmod() в php.

2 голосов
/ 01 апреля 2010

Другой способ - поместить пользователя apache и «пользователей-клиентов» в новую группу. Дополнительно каталог должен использовать закрепленный бит SGID, чтобы каждый новый файл получал назначение группы для этой новой группы. Таким образом, веб-сервер и «пользователи-клиенты» могут без проблем работать с файлами

[17:57] progman@proglap /tmp/test $ ls -al /tmp/test
total 9
drwxrwsr-x  2 root users   48 Apr  1 17:55 .
drwxrwxrwt 36 root root  9264 Apr  1 17:53 ..

Как вы видите, каталог получил бит SGID, а владельцем является группа "users", в которой я (progman). Нет, если другой пользователь добавляет файл, группе автоматически присваивается эта группа

[17:55] proglap ~ # touch /tmp/test/x

Это выполняется от пользователя root. Теперь мы получаем:

[17:57] progman@proglap /tmp/test $ ls -la /tmp/test
total 9
drwxrwsr-x  2 root users   72 Apr  1 17:59 .
drwxrwxrwt 36 root root  9264 Apr  1 17:53 ..
-rw-r--r--  1 root users    0 Apr  1 17:59 x

Как видите, добавленный файл от root, но для группы установлено значение users, и таким образом I может удалить его

[18:00] progman@proglap /tmp/test $ rm x
rm: remove write-protected regular empty file `x'? y
[18:01] progman@proglap /tmp/test $ ls -la /tmp/test
total 9
drwxrwsr-x  2 root users   48 Apr  1 18:01 .
drwxrwxrwt 36 root root  9264 Apr  1 17:53 ..

Имейте в виду, что вам все еще нужно изменить chmod, если вы хотите отредактировать файл как rw-r--r-- - это просто доступ для чтения группы . Но изменение chmod, возможно, даже работа с umask, лучше, чем работа с root-доступом и использование chown.

1 голос
/ 01 апреля 2010

Не напрямую, нет. Вы не можете "передать" право собственности на файл другому пользователю, если вы не являетесь пользователем root. Вы можете исследовать, используя директиву apache « AssignUserID », чтобы заставить этот конкретный vhost работать как конкретный пользователь / группа. При этом Apache / PHP будет создавать любые файлы с соответствующим владельцем

0 голосов
/ 01 апреля 2010

Проверьте PHP chown () функция

...