Как настроить безопасные обновления и установки в 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 удобен и относительно легко настраивается и управляется, это не означает, что безопасность не должна быть главной заботой вашего сайта.
Что-то столь же простое, как обновление вашей установки, которое должно быть выполнено сразу после любого выпуска безопасности, должно быть простым. Это также не должно быть процедурой, которая вынуждает вас использовать небезопасные протоколы или устанавливать небезопасные разрешения каталога.
Защита процедуры обновления и правильных прав доступа к каталогам — это простая задача, которая может предотвратить довольно серьезную проблему безопасности.