Сбой веб-приложения при перемещении в производственную среду. Какие разрешения сервера мне нужны? - PullRequest
3 голосов
/ 10 июня 2010

Я разработал небольшое веб-приложение.

Это приложение позволяет пользователям загружать изображения. Он также создает текстовые файлы с именами этих изображений (имена сохраняются и извлекаются в / из базы данных MySQL.)

Я разработал это приложение, используя MAMP. Для создания загруженных файлов изображений я использую функцию PHP

imagejpeg('my/path/name.jpg')

и для удаления файлов я использую функцию PHP

unlink('folder1/folder2/name.jpg')

для записи в текстовый документ я использую функцию

fopen('folder1/folder2/name.txt', 'w')

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

Почему это? и какие разрешения мне нужно установить для folder1 и folder2 папки?

Я знаю, что разрешение 777 обычно плохое, потому что оно открывает ваш сервер для публики. Однако я обнаружил, что функции не работают , если Я не использую 777 для папок. Кто-нибудь может пролить свет на мою дилемму?

Ответы [ 3 ]

1 голос
/ 10 июня 2010

Есть решение, которое я нахожу элегантным, но, возможно, я единственный :) Измените владельца группы ваших каталогов на www-data и установите права на 775.

chown -R :www-data folder1
chmod -R 775 folder1
1 голос
/ 10 июня 2010

Не устанавливайте для вслепую права доступа к папке 777, что позволяет читать, записывать и выполнять биты каждому пользователю в системе.

Вы должны всегда предоставлять минимальное количество привилегий , необходимое для запуска приложения в качестве общей меры безопасности.

Я не знаю много о требованиях вашего приложения из вашего вопроса выше, но кажется, что каталоги преступника должны иметь только разрешения на чтение / запись / выполнение для вас и пользователя, от имени которого работает веб-сервер. Вы можете просто предоставить их веб-пользователю, а затем использовать sudo для доступа к ним самостоятельно.

читать - чтобы вы могли получить список каталогов.
написать - создать новые или удалить существующие файлы в каталоге или переименовать файлы. (например: использование функции unlink ())
выполнить - так что вы можете перейти в каталог и получить к нему доступ.

В вашем случае нормально должно работать следующее:

chown -R www-data: folder1/
chmod 700 folder1/ folder1/folder2/

Предполагается, что ваш веб-сервер работает как пользователь www-data. Если вы хотите иметь доступ к каталогам и их соответствующим файлам через FTP или оболочку bash без использования sudo, вам необходимо создать группу, например wwwusers, и добавить всех, кому нужен доступ к этим каталогам в этой группе. Затем сделайте что-то вроде:

chown -R www-data:wwwusers folder1/
chmod 770 folder1/ folder1/folder2/

Кстати, мой ответ наивен, так как я предполагаю, что у вас есть root на сервере, и что нет ничего похожего на POSIX ACL или что-то вроде grsecurity. С ACL вам нужно будет сделать что-то вроде setfacl -mu:www-data:rwx /path/to/dir. В этом случае вам, скорее всего, потребуется обратиться за помощью к вашему хостинг-провайдеру.

Вы действительно должны понимать основы работы разрешений для каталогов и файлов в Unix или Unix-подобной файловой системе. Убедитесь, что вы запускаете man chmod, man chown. Вы также можете узнать больше здесь о разрешениях UNIX и здесь .

0 голосов
/ 10 июня 2010

Вместо того, чтобы просто менять разрешения, вы смотрели на владение папками?Веб-сервер работает от имени другого пользователя, который разрабатывает и развертывает сценарии и папки.Простым исправлением может быть изменение владельца папки на пользователя веб-сервера.

...