Debian.pro

Блог для пользователей и администраторов Debian


Debian. Выдаем «правильные» права для файлов и каталогов нашего сайта.

Я уже поднимал тему безопасности безопасности как сайта на нашем сервере, так и соседних сайтов на этом сервере.

Сейчас я бы хотел поговорить о безопасности самого сервера. Мера незначительная и мне придётся очень долго рассказывать о том, от чего она защищает. Просто имейте в виду, что если вам не в лом — примените данные меры к файлам и каталогам вашего сайта.

У нас есть 2 возможных ситуации:
1) скрипты php выполняются от пользователя сервера (cgi, некоторые конфигурации fast-cgi)
2) скрипты php выполняются от специального пользователя www-data (mod_php по умолчанию в Debian. Во FreeBSD — это www, например).

Сайт в обоих случаях размещается у нас в каталоге /var/www/example.ru. Пользователь — web.

Общая концепция данной меры. Нехрена выдавать права на выполнение файлам, которые выполнять никому ненадо. PHP компиляторы сами разберутся, даже если у файла нет бита на выполнение.

Ситуация номер раз. Скрипты .php (если у вас всякие .phtml, .php5 и прочее — сами догадаетесь, что делать) работают от пользователя, статические файлы отдаются веб-сервером от имени пользователя www-data. Начнёмс.
Выдадим «правильные» права каталогам:
web@server:~$ find /var/www/example.ru -type d -exec chown web:www-data {} \; -print
web@server:~$ find /var/www/example.ru -type f -exec chmod -R 750 {} \; -print
Файлам:
web@server:~$ find /var/www/example.ru -type f -exec chown web:www-data {} \; -print
web@server:~$ find /var/www/example.ru -type f -exec chmod -R 640 {} \; -print
И файлам .php (учтите, что веб сервер к ним не будет иметь к ним доступа, если вы так сделаете. Не делайте так, если юзеру www-data нужен доступ к этим файлам).
web@server:~$ find /var/www/example.ru -type f \( -name "*.php" -o -name "*.php5" \) -exec chmod -R 600 {} \; -print
Ну и выдадим права для каталога upload нашего сайта (ну представим, что наша CMS именно туда записывает всякие файлы):
web@server:~$ find /var/www/example.ru/upload -type f -exec chmod -R 770 {} \; -print
web@server:~$ find /var/www/example.ru/upload -type f -exec chmod -R 660 {} \; -print

Во втором случае (с mod_php) нам не нужно «отбирать» права на доступ к файлам php у пользователя www-data.

Ну и напоследок - существует прекрасный конструктор для команды find. Рекомендую.


Комментарии (7):

  1. Alex :

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

  2. Alex :

    Кстати было бы хорошо, чтобы стояла галка о уведомлениях о комментариях на почту.

  3. В новой версии сайта сделаю галочку.
    По вашему вопросу — не влияет.

  4. ayambit :

    Конструктор команды find стырили отсюда: http://find.unixpin.com/

  5. Ну зато перевели)

  6. Ivan :

    >Выдадим «правильные» права каталогам:
    >web@server:~$ find /var/www/example.ru -type d -exec chown web:www-data {} \; -print
    >web@server:~$ find /var/www/example.ru -type f -exec chmod -R 750 {} \; -print
    Опечатка?
    web@server:~$ find /var/www/example.ru -type d -exec chmod -R 750 {} \; -print

Написать комментарий