Корректные права доступа и параметры владения для файлов в WordPress
Когда люди говорят о безопасности WordPress, права доступа к файлам и владение файлами обычно являются самой последней вещью, о которой они думают. Установка плагинов безопасности является хорошей практикой, важной для каждого WordPress-сайта. Однако если ваши права доступа к файловой системе настроены некорректно, то большая часть ваших мер безопасности может быть легко обойдена злоумышленниками.
Права доступа и владения очень важны в сборках WordPress. Корректная их настройка на вашем веб-сервере должна быть первым шагом, который вы сделаете после установки WordPress. Наличие неправильного набора прав доступа может вызвать фатальные ошибки, которые приведут к «смерти» вашего сайта. Некорректные права доступа также могут поставить под угрозу ваш сайт, сделать его открытым для атак.
Помимо проблем безопасности, наличие неправильного набора прав доступа может привести и к другим проблемам. Сталкивались ли вы когда-либо с белым экраном при первой попытке загрузить веб-сайт? Получали ли вы когда-либо сообщения об ошибке при попытке загрузить изображения в медиа-загрузчике? Корректировка прав доступа и владения файлами и папками зачастую устраняет все эти проблемы.
В данной статье мы расскажем вам все о правах доступа для файловой системы WordPress: что они собой представляют, почему они важны, а также как их задать. Также мы рассмотрим несколько основных принципов, которым я следую, чтобы поддержать мою файловую систему в целости и сохранности. Помимо этого, мы раскроем две самых популярных конфигурации сервера WordPress. Мы объясним, чем они отличаются, и, что более важно, как задать соответствующие права доступа для каждой из них.
- Терминал против FTP-клиента
- Пользователи и группы
- Что представляют собой права доступа к файлам?
- Изменение режимов доступа
- Разница между 644 и 777
- Конфигурации сервера WordPress
- Права доступа для стандартной конфигурации сервера WordPress
- Права доступа для SuEXEC конфигурации
- Распространенные ошибки
Терминал против FTP-клиента
На протяжении этой статьи мы будем использовать терминал, чтобы менять права доступа и владения. Почему бы не использовать вместо него FTP-клиент? Причина состоит в том, что FTP несколько ограничен для наших потребностей. FTP может использоваться в том случае, чтобы передавать файлы, а также менять права доступа к файлам и папкам, но он не может менять параметры владения.
Пользователи и группы
Перед тем, как начать, мы должны кратко рассказать о том, что представляют собой группы и пользователи, поскольку они идут рука об руку с определением прав доступа.
Чтобы лишний раз не усложнять, пользователь – это аккаунт, у которого есть доступ к компьютеру, а группа – это идентификатор для определенного списка пользователей. Это означает, что всякий раз, когда вы передаете файлы через FTP, вы используете аккаунт пользователя на своем сервере. В зависимости от того, как именно ваш хост настроил ваш аккаунт, вы (пользователь) можете принадлежать к одной или нескольким группам. Пользователи и группы аналогичны пользователям и ролям в WordPress. По своей задумке они практически те же самые, за исключением того, что первые используются на вашем сервере.
Пользователи и группы важны, поскольку они позволяют установить привилегии для всех ваших файлов и папок. Владельцы файла обычно имеют все полномочия по управлению этим файлом; другие пользователи, которые принадлежат к одной и той же группе, могут иметь меньше полномочий по управлению этим файлом; в то время как все остальные пользователи вообще могут не иметь полномочий. Эти привилегии (полномочия) обычно называются правами доступа.
Что представляют собой права доступа к файлам?
Права доступа определяют, что именно пользователи могут сделать с файлом. Права доступа представляются в виде последовательности цифр, как, к примеру, 644 или 777, которая называется режим доступа. Если вы использовали ранее плагины в WordPress, то некоторые из них, скорее всего, просили вас изменить права доступа к файлам или папкам, поскольку плагин не может вести запись. Изменив права доступа к файлам, вы позволите веб-серверу получать доступ к этим файлам или папкам.
Режим доступа – это набор операторов «кто может делать что», в котором каждая цифра соответствует оператору «кто»:
- Первая цифра. Что может делать пользователь — владелец данного файла.
- Вторая цифра. Что могут делать другие пользователи из группы владельцев.
- Третья цифра. Что могут делать все остальные пользователи (включая посетителей сайта).
Затем идет число, которое соответствует оператору «что», представляющее собой сумму любой комбинации следующих цифр:
- 4. Считать файл, либо считать названия файлов в папке
- 2. Записать или изменить файл, либо изменить контент в папке
- 1. Выполнить или запустить файл, либо получить доступ к файлам в папке
Эти цифры называются привилегиями, которые связываются с определенными пользователями в режиме доступа. Обратите внимание, что привилегии различаются для файлов и папок.
Использование корректного режима доступа очень важно. Чтобы лучше проиллюстрировать это, давайте представим себе роли пользователей в WordPress. На сайте WordPress у участников и администраторов имеется разный набор возможностей. Участники могут создавать новые записи блога, однако они не могут добавлять плагины. Администраторы, с другой стороны, могут добавлять плагины и создавать записи в блоге. Администраторы могут даже изменить вид сайта, если они хотят. Цепочка полномочий разделяет то, что могут делать пользователи в разных ролях. То же самое применимо и к режимам доступа, за исключением того, что мы работаем не с записями блога и опциями темы, а с файлами и папками нашего сервера.
Изменение режимов доступа
FTP-клиенты обычно предлагают интерфейс, через который вы можете легко менять режим доступа для ваших файлов и папок. Вот скриншот интерфейса в моем FTP-клиенте:
Если у вас есть доступ к терминалу вашего сервера, вы можете также использовать команду chmod, чтобы изменить режим доступа к файлам или папкам:
01
|
sudo chmod 644 <file> |
Чтобы изменить режим доступа для всех файлов или папок, используйте chmod в тандеме с командой find. К примеру, вы можете использовать ее для изменения прав доступа ко всем файлам на 644:
01
|
sudo find . -type f - exec chmod 644 {} + |
Или использовать ее для изменения прав доступа ко всем вашим папкам на 755:
01
|
sudo find . -type d - exec chmod 755 {} + |
Разница между 644 и 777
Давайте посмотрим на некоторые режимы доступа, а также как именно они влияют на наш сайт.
Что будет означать PHP-скрипт с режимом доступа 644? После разъяснения выше, как работают режимы доступа, мы можем дешифровать то, что именно позволяет делать этот режим с нашим скриптом:
- Привилегии владельца равны «считать» (4) + «записать» (2) = 6
- Привилегии группы владельцев равны «считать» (4) = 4
- Привилегии всех остальных пользователей равны «считать» (4) = 4
Проще говоря, это означает, что:
- Если мы владельцы скрипта, то мы можем прочитать его и изменить;
- Все остальные пользователи могут только считать его.
Как мы можем видеть, 644 – это хороший режим доступа для нашего PHP-скрипта. Мы можем вносить в него изменения, а наш сервер может считать его.
Теперь давайте перейдем к папкам. Что будет, если мы владеем папкой, для которой режим доступа задан как 777? Этот режим можно расписать так:
- Привилегии владельца равны «считать» (4) + «записать» (2) + «выполнить» (1) = 7
- Привилегии группы владельцев равны «считать» (4) + «записать» (2) + «выполнить» (1) = 7
- Привилегии всех остальных пользователей равны «считать» (4) + «записать» (2) + «выполнить» (1) = 7
Это означает, что:
- Любой пользователь может получить список имен файлов в вашей папке
- Любой пользователь может создавать, изменять и удалять любой файл в вашей папке
- Любой пользователь может получить доступ к вашим файлам в этой папке
Очевидно, что 777 – плохой режим доступа для любых участков нашего WordPress-сайта, поскольку любой пользователь может добавлять файлы в нашу директорию или даже удалять скрипты. Что еще хуже, любой пользователь может выполнять вредоносный код, тем самым подвергнув опасности наш сайт.
Конфигурации сервера WordPress
Теперь мы знаем все о правах доступа и об их считывании. Но перед тем, как пойти дальше и изменить все наши права доступа, мы должны понять, как именно настроен наш сервер. Поскольку права доступа работают с пользовательскими аккаунтами и группами, мы должны узнать, как именно работает наш WordPress-сайт.
Существует много разных конфигураций сервера. Разные конфигурации требуют разных режимов доступа для корректной и безопасной работы WordPress. Мы рассмотрим две самых популярных конфигурации, а также корректные права доступа для них:
Стандартная конфигурация сервера:
- У вас есть пользовательский аккаунт
- Ваш сервер запущен как другой пользовательский аккаунт.
Общая конфигурация сервера или suEXEC конфигурация:
- У вас есть пользовательский аккаунт
- Другие люди, которые используют сервер, имеют пользовательские аккаунты и могут иметь ту же самую группу с вашим пользовательским аккаунтом
- Ваш сервер запущен как владелец ваших WordPress-файлов.
Основная разница между этими двумя конфигурациями – как именно запущен сервер.
Права доступа для стандартной конфигурации сервера WordPress
Стандартные конфигурации WordPress требуют чуть большей работы, нежели виртуальные конфигурации, поскольку веб-сервер не имеет связей с нашим пользовательским аккаунтом.
Владение файлами и папками в WordPress
Для начала мы должны скорректировать владение папками и файлами для наших WordPress-файлов. Мы должны будем убедиться в следующем:
- Наш пользовательский аккаунт является владельцем всех WordPress файлов и папок
- Наш пользовательский аккаунт и пользовательский аккаунт веб-сервера принадлежат к одной и той же группе.
Чтобы узнать группы, к которым принадлежит ваш пользовательский аккаунт, вы можете использовать следующую команду в терминале вашего сервера:
01
|
groups |
Затем, чтобы узнать группы, к которым принадлежит ваш сервер, вы можете временно вставить следующий PHP-фрагмент в один из ваших скриптов WordPress:
01
|
echo exec ( 'groups' ); |
Если ваш пользователь и веб-сервер не принадлежат к одной и той же группе, то вы можете использовать следующую команду в терминале, чтобы добавить пользователя к одной из ваших групп сервера:
01
|
sudo usermod -a -G <a-common-group-name> myuser |
Наконец, чтобы убедиться в том, что в нашей папке все принадлежит к нашему пользовательскому аккаунту и имеет общую группу, которую мы только что добавили, мы можем выполнить следующую команду в своей папке WordPress:
01
|
sudo find . - exec chown myuser:a-common-group-name {} + |
Права доступа для WordPress
Все наши папки и файлы должны теперь принадлежать корректным пользователям. Самое время настроить режимы доступа. Вам надо будет запомнить следующее:
- Все файлы должны быть 664.
- Все папки должны быть 775.
- wp-config.php должен быть 660.
Вот то, что мы хотим добиться данными режимами доступа:
- Наш пользовательский аккаунт может считывать и изменять наши файлы.
- WordPress (через наш сервер) может считывать и изменять наши скрипты.
- WordPress может создавать, изменять и удалять файлы и папки.
- Другие пользователи не увидят наши учетные данные для БД в wp-config.php.
Вы можете посчитать, что разрешение WordPress делать абсолютно все с нашими папками не является безопасным. Не беспокойтесь – мы делаем так, поскольку WordPress нуждается в определенных возможностях по созданию и изменению файлов. WordPress позволяет нам закачивать и удалять темы и плагины, редактировать скрипты и стили через бэкэнд администратора. Без данных прав доступа нам пришлось бы всегда вручную загружать темы и плагины через FTP.
Вы можете использовать ваш FTP-клиент, чтобы изменять режимы доступа, либо вы можете использовать следующие команды в вашей папке WordPress, чтобы быстро настроить права доступа для всех ваших файлов и папок:
01
02
03
|
sudo find . -type f - exec chmod 664 {} + sudo find . -type d - exec chmod 775 {} + sudo chmod 660 wp-config.php |
Обратите внимание, что некоторые веб-серверы в данном плане являются более строгими, чем остальные. Если ваш сервер является строгим, то настройка вашего wp-config.php в 660 может привести к тому, что ваш сайт перестанет работать. В таком случае просто оставьте 664.
Права доступа для SuEXEC конфигурации
Права доступа для общей конфигурации гораздо проще применить. Мы не будем в данном случае останавливаться на владении, поскольку веб-сервер запущен как владелец наших файлов и папок. Наш пользовательский аккаунт и веб-сервер используют те же самые права доступа (оба являются владельцами), поэтому мы можем перейти сразу к изменению режимов доступа:
- Все файлы должны быть 644.
- Все папки должны быть 755.
- wp-config.php должен быть 600.
Аналогично предыдущему случаю, права доступа можно расшифровать следующим образом:
- Наш пользовательский аккаунт может считывать и изменять наши файлы.
- WordPress (через наш сервер и аккаунт владельца) может считывать и изменять наши скрипты.
- WordPress может создавать, изменять и удалять файлы и папки.
- Другие пользователи не увидят наши учетные данные для БД в wp-config.php.
Опять же, вы можете использовать FTP-клиент для того, чтобы изменить режим доступа, либо вы можете использовать следующие команды в вашей папке WordPress, чтобы быстро изменить права доступа ко всем вашим файлам и папкам:
01
02
03
|
sudo find . -type f - exec chmod 644 {} + sudo find . -type d - exec chmod 755 {} + sudo chmod 600 wp-config.php |
Как и в случае со стандартной конфигурацией WordPress, ваш сервер может быть более строгим, нежели остальные, и поэтому файл wp-config.php не будет задан в 600. В таком случае вы можете поставить для него 640, либо, если и так не сработает, то 644.
Всегда следуйте данным инструкциям, и ваши файлы будут бережно сохранены от злоумышленников.
Распространенные ошибки
Частая ошибка, которую допускают люди, заключается в том, что папка загрузок ставится в 777. Некоторые делают так, потому что они получают ошибки при попытке загрузить изображение на свой сайт, а 777 быстро исправляет данную проблему. Никогда не давайте неограниченный доступ всем пользователям, иначе вы ваш сервер будет уязвимым для атак. Если вы следовали нашему руководству, то в таком случае у вас не должно быть проблем с загрузкой файлов на ваш сайт.
Иногда плагины могут запрашивать установку прав для какого-либо файла в 777. В таких ситуациях вы можете временно установить права в 777, однако убедитесь в том, что вы вернули права доступа обратно после того, как вы закончите работу с плагином.
Источник: www.smashingmagazine.com
Спасибо за статью!