Разрешения папки Apache - PullRequest
       11

Разрешения папки Apache

1 голос
/ 15 сентября 2010

Когда я создаю каталог с PHP mkdir(), владельцем папок является «apache». Когда я создаю каталог по FTP, его владельцем является «ftpadmin».

По какой-то странной причине, с помощью функции PHP rename() я не могу переместить какие-либо файлы в каталог, принадлежащий apache. У меня есть chmod() и файл, и каталог для 777 и 0777, но «apache» отказывается перемещать любые файлы в созданные им каталоги. Я могу сделать так, чтобы apache перемещал файлы в каталог ftpadmin. Я пробовал chmod() и mkdir() с 777, 0777, 755, 0755, 1777, 01777 и более.

Мой клиент должен динамически генерировать каталоги, а файлы нужно перемещать и выводить.

Сервер - это выделенный виртуальный сервер, к которому я могу подключиться по ssh и иметь права администратора.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Возможности безопасного режима?http://www.php.net/manual/en/features.safe-mode.functions.php

rename () Проверяет, имеют ли файлы или каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.Проверяет, имеет ли каталог, в котором работает сценарий, такой же UID (владелец), что и выполняемый сценарий.

Если включен безопасный режим, включите его и определите функции, которые он предоставляетна должном уровне.Если это не проблема, показ фактической ошибки, которую php, несомненно, испускает, может нам сильно помочь.

0 голосов
/ 15 сентября 2010

PHP работает как пользователь Apache.Ваша учетная запись FTP работает как пользователь 'fpadmin'.Вот почему владельцы разные.Вы пробовали функцию php chown () (http://php.net/manual/en/function.chown.php)? Это изменит владельца файла / каталога.

Приветствия


Тьфу, мой первый отрицательный голос.жало .. Это был глупый ответ, хотя ..

Хорошо, поэтому я пытаюсь понять ваш вопрос / повторить вашу ошибку. Вот то, что я пробовал, и вот мои результаты. Надеюсь, по крайней мере, это будетбыть полезным для вас.

У меня есть следующая структура каталогов:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/ftp_owned.file (chmod = 644 (default), owned by 'ftpuser')

Затем в файле index.php у меня есть следующий код:

mkdir("./downvoted");
chmod("./downvoted", 0777);
$h = fopen("./i_am_so.sad", "x+");
fwrite($h, "attempting to redeem myself");
fclose($h);
rename("./i_am_so.sad", "./downvoted/i_am_so.sad");
rename("./ftp_owned.file", "./downvoted/ftp_owned.file");

В результате получается новая структура каталогов:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/downvoted (chmod = 0777 via PHP, owned by 'apache')
/var/www/public_html/test/downvoted/i_am_so.sad (permissions = 644 (default), owned by 'apache')
/var/www/public_html/test/downvoted/ftp_owned.file (permissions = 644 (default), owned by 'ftpuser')

Все еще грустно, поскольку я не смог ни воспроизвести ошибку, ни выкупить себя. Надеюсь, вы можете опубликовать полученную ошибку (разрешение отклонено?) Или указатьчем мой эксперимент отличается от вашего приложения.

...