Права доступа к файлам на сервере

Права доступа к файлам на сервере

Почти каждый, кто сталкивался с ошибкой «Не удалось создать каталог» при обновлении плагина, находил в интернете совет «поставьте права 777 на всё». Ошибка исчезает, обновление проходит, и человек забывает об этом. А через несколько месяцев на сайте появляется вредоносный код, причём злоумышленнику даже не пришлось взламывать админку: ему хватило того, что любой процесс на сервере мог записывать в любой файл сайта. Права доступа — одна из тех тем, которые кажутся сугубо техническими, но напрямую влияют на безопасность. Разберёмся, как они устроены и какие значения правильные.

Как устроены права в Linux

Подавляющее большинство сайтов работает на серверах под управлением Linux. Здесь у каждого файла и каталога есть владелец, группа и набор разрешений для трёх категорий: владельца, участников группы и всех остальных. Для каждой категории определены три действия:

  • чтение — для файла это возможность увидеть содержимое, для каталога — получить список файлов в нём;
  • запись — изменение файла или создание и удаление файлов в каталоге;
  • выполнение — запуск файла как программы, а для каталога — возможность в него войти.

В числовой записи каждое действие имеет вес: чтение — 4, запись — 2, выполнение — 1. Сумма весов даёт цифру для категории, а три цифры подряд — полную запись прав. Так, 6 означает чтение и запись, 5 — чтение и выполнение, 7 — всё сразу. Запись 644 расшифровывается так: владелец читает и пишет, группа и все остальные только читают.

Какие права нужны файлам сайта

Для типичного сайта на PHP, в том числе на WordPress, базовая схема выглядит так:

ОбъектРекомендуемые праваСмысл
Обычные файлы (PHP, CSS, JS, изображения)644Владелец может изменять, веб-сервер — читать
Каталоги755Владелец может создавать файлы, остальные — входить и читать список
Файл конфигурации с паролем от базы данных600 или 640Читать может только владелец или владелец и группа веб-сервера
Каталог загрузок755, владелец — пользователь, от имени которого работает PHPCMS может сохранять загруженные изображения
Файлы конфигурации веб-сервера в каталоге сайта644Веб-сервер читает, изменения — только владельцем

Эти значения — отправная точка, а не догма. Точная настройка зависит от того, от имени какого пользователя работают веб-сервер и PHP на конкретном хостинге. Именно здесь возникает больше всего путаницы.

Владелец важнее цифр

Права 644 означают, что писать в файл может только владелец. Но кто этот владелец? На хорошо настроенном виртуальном хостинге PHP работает от имени вашего пользователя, и тогда всё просто: файлы принадлежат вам, CMS может их обновлять, соседи по серверу доступа не имеют. На VPS, который настраивали вручную, бывает иначе: файлы загружены по SFTP от имени одного пользователя, а PHP работает от имени другого. В итоге CMS не может обновиться, и возникает соблазн «решить» проблему правами 777.

Правильное решение — не расширять права, а привести в порядок владельцев. Есть два распространённых подхода:

  1. PHP работает от имени владельца сайта. Для каждого сайта на сервере создаётся отдельный пользователь, и процессы PHP запускаются от его имени. Это удобно: обновления работают из админки, а сайты изолированы друг от друга.
  2. Строгое разделение. Файлы принадлежат одному пользователю, PHP работает от другого и имеет право записи только в каталог загрузок и кеша. Обновления выполняются не из админки, а через командную строку или систему развёртывания. Это безопаснее: даже если злоумышленник найдёт уязвимость в плагине, он не сможет изменить код сайта.
Для большинства небольших сайтов компаний мы рекомендуем первый вариант с изоляцией каждого сайта под отдельным пользователем. Второй подход хорош для проектов, где обновления выполняет разработчик по регламенту и никто не устанавливает плагины из админки.

Особые случаи: кеш, логи и временные файлы

Некоторым каталогам действительно нужна запись со стороны CMS: кеш страниц, миниатюры изображений, журналы ошибок, временные файлы при импорте товаров. Это нормально, но доступ на запись стоит давать именно этим каталогам, а не всему сайту. Хорошая практика — сразу после установки плагина кеширования или импорта проверить, какие папки он создал и с какими правами. Некоторые расширения при установке выставляют избыточные права «для надёжности», и их приходится исправлять вручную. Если каталог нужен только для записи и чтения служебных данных, в нём тоже стоит запретить выполнение скриптов.

Почему 777 — это плохо

Права 777 означают, что любой пользователь системы может читать, изменять и выполнять файл. На виртуальном хостинге, где на одном сервере размещаются сотни сайтов, это может означать, что взломанный сайт соседа способен записать код в ваш. Даже на выделенном сервере любой процесс, включая заражённый скрипт, получает возможность модифицировать все файлы сайта. Многие хостинги вообще запрещают исполнение PHP-файлов с такими правами и выдают ошибку — и это правильно.

Если вы видите на своём сайте каталоги или файлы с правами 777, это повод для проверки. Нередко именно через такие каталоги — кеш, загрузки, временные папки — злоумышленники размещают бэкдоры.

Дополнительные меры защиты

Права доступа — только часть картины. Несколько смежных настроек заметно усиливают защиту:

  • Запретите выполнение PHP в каталоге загрузок средствами веб-сервера. Там должны лежать изображения и документы, и любой PHP-скрипт в этой папке — почти наверняка вредонос.
  • Закройте прямой доступ из браузера к служебным файлам: конфигурации, журналам, резервным копиям, файлам системы контроля версий.
  • Не храните резервные копии и дампы базы данных в публичном каталоге сайта: их могут скачать.
  • Отключите в CMS встроенный редактор файлов, чтобы изменения кода нельзя было внести из панели администратора.
  • Используйте SFTP или SSH вместо обычного FTP, который передаёт пароль открытым текстом.

Как проверить права на своём сайте

Если у вас есть доступ по SSH, специалист проверит права всех файлов за пару минут одной командой поиска с фильтром по правам. В панели хостинга права можно увидеть в файловом менеджере — обычно они отображаются в отдельной колонке. Обратите внимание на файлы с правами записи для группы или всех, на каталоги с правами 777, на конфигурационный файл CMS и на необычных владельцев отдельных файлов.

Будьте осторожны с массовым изменением прав. Неаккуратная команда, применённая ко всем файлам рекурсивно, может сломать работу сайта: например, если выставить каталогам права 644, веб-сервер не сможет в них войти, и сайт перестанет открываться. Перед любыми массовыми изменениями сделайте резервную копию.

Типичные ошибки, которые мы встречаем

Принимая сайты на обслуживание, мы раз за разом видим одни и те же проблемы: весь сайт с правами 777 «чтобы работали обновления», файл конфигурации, доступный на чтение всем пользователям сервера, архив с полной копией сайта прямо в корне, доступный для скачивания по прямой ссылке, и каталог загрузок, в котором спокойно выполняются PHP-скрипты. Каждая из этих ошибок по отдельности может стать причиной взлома.

Вывод

Правильные права доступа — недорогая, но очень эффективная мера защиты. Обычным файлам достаточно 644, каталогам — 755, файлу конфигурации — ещё более строгих значений. Важнее самих цифр — правильные владельцы файлов и изоляция сайтов друг от друга. Никогда не решайте проблемы с обновлениями правами 777, запретите выполнение скриптов в каталоге загрузок и не храните копии в публичной папке. Если вы не уверены, как настроен ваш сервер, наши специалисты проведут аудит и настройку в рамках администрирования, а при переезде на новый хостинг всё будет выставлено правильно сразу — подробнее в разделе о переносе сайтов.

Читайте также

Ещё несколько материалов из рубрики «Безопасность сайтов»

DDoS-атаки и небольшие сайты
Безопасность сайтов

DDoS-атаки и небольшие сайты

Многие владельцы небольших сайтов уверены, что DDoS — проблема банков и крупных магазинов. На практике сайт малого бизнеса тоже может лечь от потока запросов. Объясняем, как это бывает, как отличить атаку от обычной перегрузки и что делать.

Время чтения: 7 мин
Безопасная передача доступов подрядчикам
Безопасность сайтов

Безопасная передача доступов подрядчикам

Фрилансер, SEO-агентство, разработчик на разовую задачу — каждому нужен доступ к сайту. Рассказываем, как выдавать его так, чтобы не потерять контроль над проектом, и что обязательно сделать, когда работа закончена.

Время чтения: 7 мин
Защита административной панели сайта
Безопасность сайтов

Защита административной панели сайта

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

Время чтения: 7 мин

Остались вопросы?

Опишите задачу — специалисты студии ответят на почту и предложат решение для вашего сайта.

Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности сайта