Корректные права доступа и параметры владения для файлов в WordPress

Когда люди говорят о безопасности WordPress, права доступа к файлам и владение файлами обычно являются самой последней вещью, о которой они думают. Установка плагинов безопасности является хорошей практикой, важной для каждого WordPress-сайта. Однако если ваши права доступа к файловой системе настроены некорректно, то большая часть ваших мер безопасности может быть легко обойдена злоумышленниками.

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

Помимо проблем безопасности, наличие неправильного набора прав доступа может привести и к другим проблемам. Сталкивались ли вы когда-либо с белым экраном при первой попытке загрузить веб-сайт? Получали ли вы когда-либо сообщения об ошибке при попытке загрузить изображения в медиа-загрузчике? Корректировка прав доступа и владения файлами и папками зачастую устраняет все эти проблемы.

В данной статье мы расскажем вам все о правах доступа для файловой системы WordPress: что они собой представляют, почему они важны, а также как их задать. Также мы рассмотрим несколько основных принципов, которым я следую, чтобы поддержать мою файловую систему в целости и сохранности. Помимо этого, мы раскроем две самых популярных конфигурации сервера WordPress. Мы объясним, чем они отличаются, и, что более важно, как задать соответствующие права доступа для каждой из них.

Терминал против FTP-клиента

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

Чтобы выполнить команды, перечисленные в данной статье, вам нужно будет войти на свой сервер, используя команду SSH. Если вы не знакомы с терминалом и SSH, вы можете прочитать об этом в статье: «Введение в команды Linux».

Пользователи и группы

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

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

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

Что представляют собой права доступа к файлам?

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

Режим доступа – это набор операторов «кто может делать что», в котором каждая цифра соответствует оператору «кто»:

  • Первая цифра. Что может делать пользователь — владелец данного файла.
  • Вторая цифра. Что могут делать другие пользователи из группы владельцев.
  • Третья цифра. Что могут делать все остальные пользователи (включая посетителей сайта).

Затем идет число, которое соответствует оператору «что», представляющее собой сумму любой комбинации следующих цифр:

  • 4. Считать файл, либо считать названия файлов в папке
  • 2. Записать или изменить файл, либо изменить контент в папке
  • 1. Выполнить или запустить файл, либо получить доступ к файлам в папке

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

Использование корректного режима доступа очень важно. Чтобы лучше проиллюстрировать это, давайте представим себе роли пользователей в WordPress. На сайте WordPress у участников и администраторов имеется разный набор возможностей. Участники могут создавать новые записи блога, однако они не могут добавлять плагины. Администраторы, с другой стороны, могут добавлять плагины и создавать записи в блоге. Администраторы могут даже изменить вид сайта, если они хотят. Цепочка полномочий разделяет то, что могут делать пользователи в разных ролях. То же самое применимо и к режимам доступа, за исключением того, что мы работаем не с записями блога и опциями темы, а с файлами и папками нашего сервера.

Изменение режимов доступа

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

permission-mode

Если у вас есть доступ к терминалу вашего сервера, вы можете также использовать команду chmod, чтобы изменить режим доступа к файлам или папкам:

sudo chmod 644 <file>

Чтобы изменить режим доступа для всех файлов или папок, используйте chmod в тандеме с командой find. К примеру, вы можете использовать ее для изменения прав доступа ко всем файлам на 644:

sudo find . -type f -exec chmod 644 {} +

Или использовать ее для изменения прав доступа ко всем вашим папкам на 755:

sudo find . -type d -exec chmod 755 {} +

Обратитесь к «Изменение прав доступа к файлам в WordPress», чтобы получить руководство по изменению режимов доступа.

Разница между 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 файлов и папок
  • Наш пользовательский аккаунт и пользовательский аккаунт веб-сервера принадлежат к одной и той же группе.

Чтобы узнать группы, к которым принадлежит ваш пользовательский аккаунт, вы можете использовать следующую команду в терминале вашего сервера:

groups

Затем, чтобы узнать группы, к которым принадлежит ваш сервер, вы можете временно вставить следующий PHP-фрагмент в один из ваших скриптов WordPress:

echo exec( 'groups' );

Если ваш пользователь и веб-сервер не принадлежат к одной и той же группе, то вы можете использовать следующую команду в терминале, чтобы добавить пользователя к одной из ваших групп сервера:

sudo usermod -a -G <a-common-group-name> myuser

Наконец, чтобы убедиться в том, что в нашей папке все принадлежит к нашему пользовательскому аккаунту и имеет общую группу, которую мы только что добавили, мы можем выполнить следующую команду в своей папке WordPress:

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, чтобы быстро настроить права доступа для всех ваших файлов и папок:

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, чтобы быстро изменить права доступа ко всем вашим файлам и папкам:

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

Блог про WordPress
Комментарии: 13
  1. Дуо

    «WordPress может создавать, изменять и удалять файлы и папки.»
    Не совсем Вордпресс. Это делает Апач, а работает Апач под юзером apache из группы apache. И у меня, соответственно, вопрос к специалистам — самое простое решение, на мой взгляд — это засунуть своего пользователя в группу apache, чтоб не бодаться с ним регулярно на уровне прав, есть ли в этом решении минусы?

  2. dostrog

    Если быть более точным, то ведь wordpress может быть установлен на сервере где используется не Apache. Да и в случае c apache пользователь и группа под которыми запускаются php-скрипты регулируется параметрами конфигурации и/или использованием такими расширениями как SuExec и им подобным.

    В общем случае, «засовывание» пользователя в общую группу с веб-сервером вполне безопасно. Но всё же решение с SuExec более верно.

  3. Виктор

    Надёжность повышает в разы. Спасибо за статью, обязательно внедрю себе на сайт.

  4. Дима

    Все файлы должны быть 664.
    Все папки должны быть 775.

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

    1. Дмитрий (автор)

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

  5. Маска

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

  6. Олег

    Очень грамотная и подробная статья!
    Я бы ещё добавил один такой момент. У многих пользователей после установки не получается загрузить файлы, установить плагины, или обновить WordPress. Часто при этих действиях движок запрашивает адрес, логин и пароль FTP, либо появляется примерно такое сообщение (при загрузке файлов, например):

    Ошибка HTTP
    Файл «main.jpg» загрузить не удалось.
    Не могу создать директорию wp-content/uploads/2016/08. Проверьте, доступна ли родительская директория для записи.

    Лечится это следующим образом — открываем wp-config.php и последней строчкой прописываем:

    define(‘FS_METHOD’,’direct’);

    После этого Вордпресс не будет спрашивать доступ к ФТП и будет напрямую работать с файлами и обновляться.

    1. Дмитрий (автор)

      Спасибо!

  7. Andy_T

    Если ВСЕ ФАЙЛЫ имеют права 644, то НИ ОДИН из них не может быть ВЫПОЛНЕН, не правда ли?

    1. Дмитрий (автор)

      644 — Владелец может только читать и записывать, остальные только читать

  8. ed

    все команды приведенные выше изменят уровни доступа на все паки в линуксе и все файлы во всей системе. Вы дополните статью как правильно выставить права только в папке с wordpress

    1. Eddy

      Хм! Вот это поворот… Это правда?

  9. Виталий

    Статья ни о чем. Пошел дальше гуглить.

Добавить комментарий для Виталий Отменить ответ

Получать новые комментарии по электронной почте.