Назад | Перейти на главную страницу

Разрешения Apache www для скрипта php

У меня есть скрипт php, который запускает частную социальную сеть. Он работает на Ubuntu 16.04.03 с конфигурацией mariadb и apache 2 и php7.

Я создал новую папку в / var / www / myscript и скопировал все файлы в эту папку.

Теперь у меня вопрос, какие разрешения необходимы, чтобы конфигурация была безопасной. Безопасно ли устанавливать для всех файлов значение 640, а для всех папок - 750, а для владельца и пользователя - www-data?

Я нашел этот учебник, http://fideloper.com/user-group-permissions-chmod-apache Разрешения выглядят по-другому, эти разрешения тоже хороши?

Было бы здорово, если бы кто-нибудь мне помог. Большое спасибо. С уважением

Это очень сильно зависит от вашей CMS.

На самом деле мне действительно не нравятся 99% доступных CMS. Все их файлы PHP входят в общедоступное дерево Apache, что означает, что клиенты имеют к ним доступ. Это небезопасно. Они должны быть в месте, где клиент не может получить к ним доступ. При этом index.php должны быть общедоступными (очевидно?) и несколько других файлов, в зависимости от вашей CMS. Все остальное может находиться в папке, к которой Apache не предоставляет доступ клиенту. Тогда с разрешениями проблем станет намного меньше.

Скажем, у вас есть папка с именем public_html где Apache как доступ, у вас может быть структура, которая выглядит так:

/var/www/example.com
/var/www/example.com/php  -- put your PHP scripts here
/var/www/example.com/data  -- whatever data files (XML, templates, non-public)
/var/www/example.com/public_html  -- only folder accessible by Apache
/var/www/example.com/public_html/index.php  -- the PHP that handles the CMS

Теперь ... Право собственности, если вы не используете CMS, такую ​​как WordPress, которая хочет автоматически обновлять себя, файлы должны быть доступны для записи пользователю Apache2 (www-data для Ubuntu). Во всех остальных случаях вы должны установить пользователя и группу на другого пользователя, чем www-data и убедитесь, что у Apache НЕТ разрешения на изменение этих файлов. Убедитесь, что он может их прочитать (возможно, у другого есть 'r' для файлов (644) и 'r-x' для каталогов (755).)

Скажите, что вы используете rsync делать ваши обновления и давать rsync разрешение на запись файлов как пользователь www. Теперь вы можете сделать все эти файлы владельцем www и нет www-data и обновление будет работать нормально.

Очевидно, что если у вас есть функция загрузки, которая сохраняет файлы на ваш веб-сервер, тогда этот каталог должен быть доступен для записи www-data. Также эти файлы должны быть зарезервированы (как и ваша база данных), поскольку они доступны (читаются как: можно взломать) для клиентов. Поскольку у вас есть интрасеть, это может не вызывать беспокойства, хотя большинство крупных предприятий сообщают, что большая часть их данных потеряна из-за персонала, работающего там, а не из-за хакеров со стороны. Что нужно иметь в виду.

Примерно так работает работа с такими файлами:

mkdir /var/www/example.com/public_html/download
chown www-data:www-data /var/www/example.com/public_html/download
chmod 775 /var/www/example.com/public_html/download

Путь к этим файлам может быть другим по усмотрению CMS, хотя фактические файлы могут находиться в одном большом каталоге (это быстро, независимо от количества файлов).

Спасибо большое за помощь.

Если я правильно понимаю все советы, я должен сделать следующее:

владелец / var / www / mysite и всех файлов и подпапок не должен иметь www-data (можно ли установить значение root?) Группа / var / www / mysite и все файлы и подпапки должны быть www-data

Все файлы должны быть 644 или лучше 640, а каталоги 755 или 750? Если пользователь загружает файлы с веб-сайта, у меня есть папка / var / www / mysite / uploads, и в этой папке я устанавливаю www-data как владельца и группу и устанавливаю разрешение на 775.

На данный момент моя папка выглядит так:

/ var / www / mysite -> root: файлы www-data (для всех файлов и папок) имеют 640 разрешений, папки имеют 750 разрешений

Это конфигурация, которая выглядит нормально и безопасно, или мне следует изменить пользователя с root на пользователя, которого я использую для обслуживания сервера?

Еще раз спасибо за вашу помощь.

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