Поиск по сайту:

Как настроить безопасные обновления и установки в WordPress на Ubuntu


Статус: устарело

В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:

  • Обновите Ubuntu до версии 14.04.
  • Обновление Ubuntu 14.04 до Ubuntu 16.04
  • Перенесите данные сервера в поддерживаемую версию.

Причина:

Смотрите вместо этого:

Введение

WordPress — самая популярная CMS (система управления контентом), используемая сегодня в Интернете. Хотя многие люди используют его, потому что он мощный и простой, иногда люди идут на компромисс ради удобства в ущерб безопасности.

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

В этом руководстве мы предполагаем, что вы выполнили установку стека LAMP на свой VPS.

Мы также предполагаем, что вы установили WordPress на Ubuntu 12.04. Вы можете следовать нашему руководству по установке WordPress на Ubuntu 12.04 здесь.

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

Настройте безопасные обновления с помощью SSH

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

Он попросит вас предоставить учетные данные FTP, такие как имя хоста, имя пользователя FTP и пароль FTP:

FTP по своей сути является небезопасным протоколом, поэтому мы не рекомендуем вам использовать его в большинстве случаев. Мы будем настраивать нашу установку для использования безопасной альтернативы.

Изменение разрешений

Если вы следовали приведенному выше руководству по установке WordPress, вы заметите, что вы дали разрешение веб-каталога веб-пользователю Apache. Это очень быстрый способ начать работу, но потенциально он может представлять угрозу безопасности. В идеальной ситуации вы бы отделили владельца контента от веб-процесса. Мы сделаем это в рамках нашей подготовки к разрешению обновлений SSH.

Мы создадим пользователя с именем wp-user, которому будет принадлежать наша установка WordPress.

sudo adduser wp-user

Вам будет задано много вопросов, включая пароль, который вы хотите установить. Мы не хотим устанавливать пароль, поэтому нажимайте \ENTER во всех подсказках, включая повторяющиеся вопросы пароля.

Затем перейдите в каталог /var/www/html, где хранятся наши файлы WordPress.

cd /var/www/html

Мы передадим нашему новому пользователю право собственности на все в этом каталоге, изменив его с веб-пользователя www-data Apache, которого мы настроили во время установки.

sudo chown -R wp-user:wp-user /var/www/html

Создание ключей SSH для WordPress

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

sudo su - wp-user

Мы создадим пару ключей с помощью команды ssh-keygen:

ssh-keygen -t rsa -b 4096

Вас спросят, где хранить ключи и как их называть. Выберите /home/wp-user/wp_rsa. Вам также будет предложено выбрать парольную фразу. Нажмите \ENTER через приглашение, чтобы создать ключ без аутентификации по паролю.

Выйдите в свою обычную учетную запись пользователя:

exit

Нам нужно выполнить некоторое обслуживание, чтобы обеспечить безопасность разрешений. Мы хотим предоставить право собственности пользователю WordPress, но установить группу www-data в качестве владельца группы. Затем мы хотим заблокировать другой доступ:

sudo chown wp-user:www-data /home/wp-user/wp_rsa*
sudo chmod 0640 /home/wp-user/wp_rsa*

Вам необходимо создать каталог ~/.ssh и предоставить ему соответствующие разрешения и владельца, чтобы веб-процесс мог войти в систему.

sudo mkdir /home/wp-user/.ssh
sudo chown wp-user:wp-user /home/wp-user/.ssh/
sudo chmod 0700 /home/wp-user/.ssh/

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

sudo cp /home/wp-user/wp_rsa.pub /home/wp-user/.ssh/authorized_keys

Опять же, нам нужно настроить права доступа и владельца этих файлов, чтобы обеспечить доступ к ним, сохраняя при этом безопасность:

sudo chown wp-user:wp-user /home/wp-user/.ssh/authorized_keys
sudo chmod 0644 /home/wp-user/.ssh/authorized_keys

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

sudo nano /home/wp-user/.ssh/authorized_keys

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

<пред>

Сохраните и закройте файл.

Настройте конфигурацию WordPress для использования ключей

Теперь мы можем установить пакеты, необходимые WordPress для аутентификации входа по SSH:

sudo apt-get update
sudo apt-get install php5-dev libssh2-1-dev libssh2-php

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

sudo nano /var/www/html/wp-config.php

Ближе к концу файла добавьте следующие строки:

define('FTP_PUBKEY','/home/wp-user/wp_rsa.pub');
define('FTP_PRIKEY','/home/wp-user/wp_rsa');
define('FTP_USER','wp-user');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');

Сохраните и закройте файл.

Теперь мы должны перезапустить Apache, чтобы воспользоваться нашими новыми процедурами обновления:

sudo service apache2 restart

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

Теперь мы можем проверить правильность нашей конфигурации. Войдите на свой сайт WordPress в качестве администратора, посетив свой сайт в браузере по следующему URL-адресу:

<пред>

Мы можем проверить, правильно ли настроены наши настройки, попытавшись установить новую тему. Нажмите «Внешний вид», а затем «Темы».

Вверху нажмите «Установить темы»:

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

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

Общие проблемы

Есть некоторые проблемы, с которыми вы можете столкнуться, если неправильно настроили ключи SSH.

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

<пред>

Эта ошибка удручающе неспецифична. Это может быть вызвано различными причинами, некоторые из которых:

  • Неправильные разрешения для открытого ключа, закрытого ключа и каталогов, которые их содержат. Веб-процесс должен иметь возможность читать каждый из этих файлов, поэтому, если группа веб-сервера является владельцем, то каждый файл должен иметь как минимум 640 разрешений. С другой стороны, каталог ~.ssh должен быть доступен только пользователю, который будет входить в систему. В нашем примере это означает пользователя wp-user. Содержимое каталога должно также принадлежать этому пользователю и быть недоступным для записи кем-либо еще.
  • Неверное владение файлом. Эти же ключи должны принадлежать правильным сторонам. Между владельцем и владельцем группы это часто представляет собой смесь пользователя, вошедшего в систему, и пользователя веб-процесса. В нашем примере wp-user владеет как закрытым, так и открытым ключами, а группа www-data является владельцем группы. Это позволяет нам связать их с правильным пользователем, позволяя серверу читать файлы.
  • Неправильное форматирование файла. Если ваш открытый или закрытый ключ имеет проблемы с форматированием, WordPress отклонит ключ и откажется его использовать. То же самое касается файла ~/.ssh/authorized_keys. Часть, которую вы добавили в файл author_keys, from=127.0.0.1 ... не должна существовать в открытом ключе. Несмотря на то, что SSH сочтет его действительным файлом, WordPress отклонит его как недействительный еще до того, как отправит попытку демону SSH.

Еще одна распространенная ошибка в процессе обновления или установки тем и плагинов:

Could not create directory...

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

Это означает, что вам необходимо передать файлы и папки в каталоге /var/www/html учетной записи wp-user. Если вы выполнили приведенные выше инструкции, но проблемы по-прежнему возникают, убедитесь, что вы передали параметр -R команде chown.

Еще одна вещь, которую нужно проверить, это то, что каталоги загрузки имеют права на запись для пользователя WordPress. Перейдите в корень документа:

cd /var/www/html

Если мы проверим разрешения файлов в этой папке, мы должны увидеть права на запись для владельца (первая колонка), но не для второй или третьей колонок:

ls -l
total 180
-rw-r--r--  1 wp-user wp-user   177 Nov 18 15:21 index.html
-rw-r--r--  1 wp-user wp-user   418 Sep 24 20:18 index.php
-rw-r--r--  1 wp-user wp-user    20 Nov 18 15:24 info.php
-rw-r--r--  1 wp-user wp-user 19929 Jan 18  2013 license.txt
-rw-r--r--  1 wp-user wp-user  7128 Oct 23 16:08 readme.html
-rw-r--r--  1 wp-user wp-user  4892 Oct  4 10:12 wp-activate.php
drwxr-xr-x  9 wp-user wp-user  4096 Oct 29 16:08 wp-admin/
-rw-r--r--  1 wp-user wp-user   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 wp-user wp-user  4795 Sep  5 21:38 wp-comments-post.php
-rw-r--r--  1 wp-user wp-user  3350 Nov 19 12:23 wp-config.php
-rw-r--r--  1 wp-user wp-user  3177 Nov  1  2010 wp-config-sample.php
drwxr-xr-x  5 wp-user wp-user  4096 Nov 19 12:25 wp-content/
. . .

Как видите, права доступа к файлу, которые читаются как -rw-r--r--, и права доступа к каталогу, которые читаются как drwxr-xr-x, указывают на то, что wp-user, которому принадлежат файлы и каталоги, имеет права на запись, а другие — нет.

Аналогичная проверка в каталоге wp-content, который содержит темы, плагины и т. д., покажет нам, принадлежат ли эти каталоги пользователю wp-user и доступны ли для записи.

cd /var/www/html/wp-content
ls -l
total 16
-rw-r--r-- 1 wp-user wp-user   28 Jan  8  2012 index.php
drwxr-xr-x 3 wp-user wp-user 4096 Oct 29 16:08 plugins
drwxr-xr-x 6 wp-user wp-user 4096 Nov 19 13:10 themes
drwxr-xr-x 2 wp-user wp-user 4096 Nov 19 13:10 upgrade

Эти каталоги настроены правильно.

Заключение

Хотя WordPress удобен и относительно легко настраивается и управляется, это не означает, что безопасность не должна быть главной заботой вашего сайта.

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

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

Джастин Эллингвуд