Настройка безопасных обновлений и установок для WordPress в Ubuntu
Ubuntu | Комментировать запись
WordPress – одна из самых популярных систем управления контентом (CMS). В целом система WordPress является мощной, производительной и простой, но иногда пользователям приходится выбирать между удобством работы и безопасностью. К примеру, ущерб безопасности можно нанести при передаче прав и обновлении программ. Существует множество различных способов выполнить эти операции, среди которых есть и относительно безопасные способы обновления и установки тем и плагинов.
Требования
Для выполнения руководства нужен предварительно настроенный сервер Ubuntu; инструкции по начальной настройке можно найти в этой статье. Также нужно установить LAMP stack; подробная информация по установке этой группы программ – здесь.
Кроме того, нужно установить WordPress; для этого следуйте инструкциям этого руководства.
Настройка безопасных обновлений через SSH
Если на сервере не настроены обновления и установки на основе ключей, при попытке выполнить какую-либо из этих задач на экране появится запрос информации о подключении. Программа предложит предоставить учётные данные 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 -t rsa -b 4096
Программа спросит, где хранить ключи и как назвать их. Выберите каталог /home/wp-user/wp_rsa. Также программа предложит защитить ключи паролем. Чтобы пропустить это действие, просто нажмите Enter.
Вернитесь в учётную запись стандартного пользователя:
exit
Чтобы защитить права, нужно сделать пользователя wp-user владельцем WordPress, а также передать права на 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/
Теперь введите открытый ключ в файл authorized_keys, чтобы пользователь мог входить при помощи этих учётных данных. Скопируйте открытый ключ:
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
В самом начале файла добавьте выделенную красным строку, которая разрешит доступ к ключам только локальной машине.
from="127.0.0.1" ssh-rsa...
Сохраните и закройте файл.
Настройка 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, чтобы обновить настройки.
Тестирование результатов
Протестируйте настройки; для этого нужно войти на сайт WordPress как администратор:
your_domain.com/wp-admin
Для проверки попробуйте установить новую тему. Кликните Appearance, а затем Themes. Нажмите Install Themes.
Выберите тему и кликните Install, чтобы установить её на сайт. WordPress должен успешно загрузить и установить пакет при помощи ключей.
Чтобы использовать новую тему, нажмите Activate. Чтобы просмотреть результаты, выберите visit site.
Общие проблемы
Во время настройки ключей SSH могут возникнуть некоторые проблемы.
Одна из распространенных ошибок может возникнуть при передаче изменений через веб-интерфейс:
Public and Private keys incorrect for user
Эта ошибка крайне неконкретна, она может быть вызвана множеством причин, вот некоторые из них:
Неправильные права на открытый ключ, закрытый ключ и каталоги, которые содержат их. Веб-сервер должен иметь возможность читать каждый из этих файлов; следовательно, если файлы принадлежат группе веб-сервера, то каждый файл должен иметь права 640.
С другой стороны, каталог ~.ssh должен быть доступен только пользователю, который будет проходить авторизацию (например, wp-user). Содержимое каталога должно принадлежать этому пользователю и быть закрытым для изменения другими пользователями.
Неправильно установленный владелец файла. Эти ключи должны принадлежать определённым пользователям. Во время настройки пользователя и группы, которым принадлежат файлы, можно спутать пользователя WordPress и пользователя веб-сервера.
В данном примере оба ключа принадлежат пользователю wp-user и группе www-data. Это позволяет открыть веб-серверу доступ к файлам, но при этом передать их отдельному пользователю.
Неправильное форматирование файла. Если открытый или закрытый ключ содержит ошибки, WordPress откажется использовать его. То же самое касается файла ~ / .ssh / authorized_keys.
Ранее в файл authorized_keys была добавлена строка from=”127.0.0.1″ … Открытый ключ не должен содержать этой строки. Даже если SSH примет его как правильный файл, WordPress будет считать его недействительным и даже не станет отправлять его SSH-демону.
Следующая распространённая ошибка:
Could not create directory...
Как правило, эта ошибка связана с неправильно настроенным владельцем каталога. Чтобы обновлять файлы при помощи аккаунта wp-user, нужно предоставить этому пользователю все права доступа и собственности на каталоги загрузки.
Это значит, что все каталоги и файлы, хранящиеся в /var/www/html, нужно передать пользователю wp-user. Если вы следовали инструкциям этого руководства, но ошибка появилась, убедитесь, что команда chown была запущена с параметром –R.
Также нужно проверить, имеет ли пользователь WordPress права на запись в каталогах загрузки. Откройте document root:
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, который хранит темы, плагины и т.п.
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 довольно проста в настройке и поддержке, однако иногда она подвергается опасности из-за простых настроек.
Рекомендуется вовремя устанавливать обновления, содержащие поправки и исправления безопасности системы. При этом не следует использовать небезопасные протоколы или права на каталоги.
Обеспечение безопасности процедуры обновления и правильная настройка прав на каталоги – довольно простой шаг, который может предотвратить серьёзную для сайта угрозу.
Tags: CMS, FTP, LAMP stack, SSH, Ubuntu 12.04, WordPress