Wordpress — это популярная, бесплатная и стабильная CMS, имеющая за своими плечами долгую историю и огромное сообщество, которое активно поддерживает её развитие.
В данной статье мы подробно рассмотрим как установить Wordpress на Debian 10 без использования популярных панелей управления. Это позволит понять как устроена CMS, какие зависимости она затрагивает, а так же сэкономить ресурсы сервера, если они ограничены.
Содержание
- Установка стека LAMP
- Создание базы данных MariaDB
- Настройка виртуального хоста Apache
- Тестирование настроек
- Установка и настройка Wordpress
- Настройка SSL для домена на Wordpress
- Рекомендации по обеспечению безопасности
- Если вы установили Wordpress на VPS из нашего шаблона
- Заключение
Существует два рекомендуемых способа установки, использовать Apache или Nginx. В данной статье мы рассмотрим первый вариант - Apache. В качестве бэкенда будем использовать MariaDB.
Требования WordPress версии 5.4 к серверу, по состоянию на апрель 2020, следующие:
PHP версии 7.3 или выше.
MySQL версии 5.6 или выше ИЛИ MariaDB версии 10.1 или выше.
Руководство рассчитано на то, что вы его используете на «чистом» сервере, без предустановленного программного обеспечения. Установка на уже существующий, без предварительного анализа предустановленных версий не рекомендуется. Будут затронуты зависимости, которые могут привести к неработоспособности уже существующих сервисов.
1. Установка стека LAMP
Стек LAMP это аббревиатура стека Linux Apache MySQL PHP. Первым делом обновим наш пакетный менеджер:
root@dedicated:~# apt-get update && apt-get upgrade -y
Установим Apache
root@dedicated:~# apt-get install apache2
Проверим, все ли работает. Для этого достаточно в адресной строке браузера ввести ip адрес вашего сервера:
http://your_ip
Аpache работает. Теперь установим и настроим систему управления базами данных MariaDB, которая обеспечит доступ к базам данным которые мы создадим позже. MariaDB является форком MySQL, в большинстве случаев рекомендуется устанавливать именно её. Почему так, это отдельная тема которая затрагивает вопросы лицензирования, разработки и истории MySQL.
root@dedicated:~# apt-get install mariadb-server
Проверим нашу версию MariaDB:
root@dedicated:~# mariadb --version mariadb Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Выполним первоначальную настройку безопасности. Для этого существует команда mysql_secure_installation, после ввода которой запустится скрипт, в котором нужно будет выполнить ряд действий:
root@dedicated:~# mysql_secure_installation # Вводим пароль пароль пользователя root (нажимаем Enter) Enter current password for root (enter for none): # Смена пароля суперпользователя root для MariaDB; Change the root password? [Y/n] n # Удаляем анонимного пользователя Remove anonymous users? [Y/n] Y # Запретим подключение к базе данных со сторонних серверов Disallow root login remotely? [Y/n] Y # Удалим тестовую базу данных Remove test database and access to it? [Y/n] Y # Активируем привелегии их перезагрузкой Reload privilege tables now? [Y/n] Y Thanks for using MariaDB!
Установим php и необходимые зависимости:
root@dedicated:~# apt-get install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
Проверим версию php, чтобы она соответствовала минимальным требованиям:
root@dedicated:~# php -v PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
Затем выполним небольшую правку. Для начала посмотрим, что у нас находится в обработчике:
root@dedicated:~# cat /etc/apache2/mods-enabled/dir.conf <IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule>
Как видим, первым делом Apache обслуживает index.html, и только четвертым будет обработка index.php. Хорошей практикой будет обработку php поставить первым. Для этого откройте dir.conf любым удобным редактором и приведите его к следующему виду:
root@dedicated:~# cat /etc/apache2/mods-enabled/dir.conf <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule>
Перезапустите Apache и проверьте его состояние:
root@dedicated:~# systemctl restart apache2.service root@dedicated:~# systemctl status apache2.service
2. Создание базы данных MariaDB
Для создания базы данных, пользователя и назначения привилегий в консоли достаточно ввести mariadb и перед вами откроется консоль управления СУБД:
root@dedicated:~# mariadb MariaDB [(none)]>
Создадим базу данных с названием mydatabase:
MariaDB [(none)]> CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Создадим пользователя secret_user для базы данных mydatabase. Вместо frEEHo$t78 придумайте сложный пароль, который включает в себя не менее 10 латинских символов в верхнем и нижнем регистрах, цифры и спецсимволы.
MariaDB [(none)]> GRANT ALL ON mydatabase.* TO 'secret_user'@'localhost' IDENTIFIED BY 'frEEHo$t78';
Обновите привилегии:
MariaDB [(none)]> FLUSH PRIVILEGES;
Проверьте результат:
MariaDB [(none)]> SHOW DATABASES;
Теперь можно завершить редактирование командой
MariaDB [(none)]> EXIT;
В будущем, для управления базами данных вы можете использовать phpMyAdmin. С инструкцией по установке вы можете ознакомиться по ссылке.
3. Настройка виртуального хоста Apache
По умолчанию у вас будет доступен только один дефолтный виртуалхост - /var/www/html. В нашем примере мы будем использовать тестовый домен dmt.co.ua (кстати, зарегистрировать домен Вы можете на нашем сайте). Создадим для него собственный виртуалхост. /var/www/html удалите, а так же закоментируйте все директивы в /etc/apache2/sites-available/000-default.conf, иначе при проверке синтаксиса apache, вы получите ошибку отсутствия каталога html
Первым делом, для него нам понадобится отдельный каталог. Создадим его:
root@dedicated:~# mkdir /var/www/dmt.co.ua
Создайте новый файл конфигурации описывающий ваш домен
root@dedicated:~# nano /etc/apache2/sites-available/dmt.co.ua.conf
Добавьте в него следующее содержимое:
<VirtualHost *:80> ServerName dmt.co.ua ServerAlias www.dmt.co.ua ServerAdmin admin@example.com DocumentRoot /var/www/dmt.co.ua <Directory /var/www/dmt.co.ua> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/dmt.co.ua-error.log CustomLog ${APACHE_LOG_DIR}/dmt.co.ua-access.log combined </VirtualHost>
Содержимым выше мы указали домену dmt.co.ua корневой каталог по пути /var/www/dmt.co.ua. Директивой AllowOverride в блоке <Directory … </Directory> мы разрешили использование .htaccess
Проверьте синтаксис:
root@dedicated:~# apache2ctl configtest Syntax OK
Включите поддержку rewrite:
root@dedicated:~# a2enmod rewrite
Активируйте виртуалхост командой a2ensite:
root@dedicated:~# a2ensite dmt.co.ua
Если все сделано правильно, вы должны увидеть следующее:
Enabling site dmt.co.ua. To activate the new configuration, you need to run: systemctl reload apache2
Команда a2ensite активировав виртуалхост создаст символическую ссылку в каталоге /etc/apache2/sites-enabled
Перезапустите Apache:
root@dedicated:~# systemctl restart apache2.service
4. Тестирование настроек
Прежде чем мы приступим к установке Wordpress давайте протестируем, все ли верно мы настроили. Для этого в корневой директории, которую мы определили для домена dmt.co.ua, создадим файл info.php со следующим содержимым:
root@dedicated:~# cat /var/www/dmt.co.ua/info.php <?php phpinfo();
В адресной строке браузера перейдем по ссылке:
http://dmt.co.ua/info.php
После тестирования обязательно удалите файл info.php, он не должен быть в открытом доступе.
5. Установка и настройка Wordpress
Если у вас не установлена утилита curl, установите её
root@dedicated:~# apt-get install curl
Затем перейдите в каталог /tmp, скачайте в него скачайте свежую версию Wordpress и извлеките с архива содержимое:
root@dedicated:~# cd /tmp root@dedicated:~# curl -O https://wordpress.org/latest.tar.gz root@dedicated:~# tar xzvf latest.tar.gz
Скопируйте содержимое в корневую директорию сайта, которую мы создали ранее:
root@dedicated:~# cp -a /tmp/wordpress/. /var/www/dmt.co.ua/
Дальнейшую настройку мы будем проводить относительно корневого каталога /var/www/dmt.co.ua/
Ранее мы включили поддержку .htaccess, создайте пустой файл, без содержимого.
root@dedicated:~# cd /var/www/dmt.co.ua/ root@dedicated:~# touch .htaccess
Создайте каталог upgrade. Этот каталог обычно создается при автоматическом обновлении Wordpress, но при его создании иногда бывают конфликты, которые можно исключить создав каталог вручную. При обновлении, Wordpress сначала скачивает архив в этот каталог, а уже из него будет происходить дальнейшее обновление.
root@dedicated:~# mkdir /var/www/dmt.co.ua/wp-content/upgrade
Скопируйте главный конфигурационный файл с именем wp-config.php
root@dedicated:~# cp /var/www/dmt.co.ua/wp-config-sample.php /var/www/dmt.co.ua/wp-config.php
Установите правильные права доступа на каталоги. Пользователь и группы должны быть www-data. Если вы что-то создаете в каталоге с сайтом wordpress от пользователя root, возьмите за привычку проверять права на каталоги.
root@dedicated:~# chown -R www-data:www-data /var/www/dmt.co.ua/
По правилам безопасности, права на каталоги должны быть 755, а на файлы 644. Необходимо избегать прав 777, это первая уязвимость сайта для несанкционированного доступа и внедрения вредоносного кода. Отредактируйте права следующими командами:
root@dedicated:~# find /var/www/dmt.co.ua/ -type d -exec chmod 755 {} \; root@dedicated:~# find /var/www/dmt.co.ua/ -type f -exec chmod 644 {} \;
Результат должен быть следующим:
root@dedicated:~# ls -la /var/www/dmt.co.ua/
Далее сгенерируем ключи безопасности. Это набор случайных значений, которые служат для шифрования информации которая хранится в Cookies. С использованием ключей безопасности повышается сложность взлома паролей.
Генерация секретных ключей происходит следующим образом:
root@dedicated:~# curl -s https://api.wordpress.org/secret-key/1.1/salt/
В терминале вы увидите автоматически сгенерированные ключи. Они уникальны.
Откройте удобным редактором wp-config.php
root@dedicated:~# nano /var/www/dmt.co.ua/wp-config.php
...и найдите следующие строки:
define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' );
Удалите эти строки, и на их место скопируйте те что мы сгенерировали.
Сдесь же, в wp-config.php, настроим подключение к базе данных, используя данные пользователя, которого мы создали в разделе «Создание базы данных MariaDB». Удалите значения по умолчанию заменив своими:
Сохраните wp-config.php. Теперь вы можете приступить к установке Wordpress через интерфейс в браузере. Выберите язык и нажмите «Продолжить». Далее заполните все поля и подтвердите нажатием «Установить Wordpress»
6. Настройка SSL для домена на Wordpress
SSL обязателен для шифрования трафика между сайтом и посетителем, особенно это важно, если через сайт проходят платежи и конфиденциальная информация, попадание которой к третьим лицам недопустимо. Так же SSL сертификат играет не последнюю роль в СЕО и продвижении сайта в интернете. Существуют бесплатные и платные сертификаты. Если вы уделяете должное внимание обеспечению безопасности и продвижению сайта, рекомендуются платные сертификаты. Например Comodo (ныне Sectigo), которые можно заказать, в том числе, и через компанию Freehost.UA. Если вы решаетесь, нужен ли вам платный сертификат, настоятельно рекомендуется установить бесплатный. От так же функционален и защитит ваш сайт.
Существует несколько способов получения бесплатного сертификата. Это могут быть плагины, генерация сертификатов на третьих ресурсах или генерация их вручную. Последний вариант мы и рассмотрим.
Устанавливать будем с помощью утилиты Certbot, которая поддерживает бесплатные сертификаты от сервиса Let’s Encrypt.
root@dedicated:~# wget https://dl.eff.org/certbot-auto root@dedicated:~# chmod a+x certbot-auto
Запустим сценарий, указав apache. Если вы используете nginx, укажите его.
root@dedicated:~# ./certbot-auto --apache
Во время выполнения скрипта, нужно будет выполнить ряд действий, предоставив необходимую информацию.
- Введите ваш действующий email адрес
- Подтвердите пользовательские соглашения. Ответ: А
- Желаете ли получать email рассылки? Ответ: N
- Для какого домена нам нужен сертификат. В нашем примере без www
- Пункт предлагает, оставить сайт доступным по HTTP и HTTPS, или только по HTTPS. В нашем примере мы выбрали первый вариант. На скриншоте информация нечитабельна, но перевод уведомления красным цветом буквально следующей: «Будущие версии Certbot будут автоматически настраивать веб-сервер так, чтобы все запросы перенаправлялись на безопасный доступ HTTPS. Вы можете контролировать это поведение и отключить это предупреждение с помощью флагов --redirect и --no-redirect.»
Certbot автоматически все сгенерировал и разложи по каталогам. Сертификат (certificate) и цепочку (chain) сохранил в:
/etc/letsencrypt/live/dmt.co.ua/fullchain.pem
Приватный ключ сгенерирован здесь:
/etc/letsencrypt/live/dmt.co.ua/privkey.pem
Удобство заключается так же в том, что Certbot просканировал все наши каталоги и виртуалхосты, автоматически создав новый конфиг dmt.co.ua-le-ssl.conf
Если платный сертификат выдается сроком на 1 год, то бксплатный сертификат Let’s Encrypt выдается сроком на три месяца. Продлить его можно следующей командой, из каталога в который скачан Certbot :
root@dedicated:~# ./certbot-auto renew
..или добавить выполнение данной команды в планировщик задач cron. Рекомендуется ставить выполнение задачи не чаще, чем раз в три месяца, иначе при валидном сертификате он может не обновится.
Есть несколько ресурсов, на которых можно проверить валидность ssl сертификата.
Далее идем в панель управления http://dmt.co.ua/wp-admin, в левом меню переходим в раздел «Настройки», в директивах Адрес WordPress (URL) и Адрес сайта (URL) меняем http на https. Нажимаем «Сохранить изменения» внизу страницы.
Отключаем HTTP, для этого наш файл .htaccess приводим к следующему виду:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} =off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L] </IfModule>
Примечание: файл .htaccess гибок, существует огромное количество реализаций редиректов и других настроек. Они во многом зависят от реализации самого сайта. В нашем примере мы показали, как выполнить первоначальные настройки. Для более гибких и тонких, рекомендуется обратиться к разработчику, который сопровождает ваш сайт.
Если после этого вы получите ошибку циклической переадресации, необходимо в файле wp-config.php, после <?php добавить с новой строки следующее содержимое:
if ($_SERVER["HTTP_X_FORWARDED_PROTOCOL"] == 'https'){ $_SERVER["HTTPS"]='on'; } if ($_SERVER["HTTP_X_FORWARDED_PROTOCOL"] == 'http'){ $_SERVER["HTTPS"]='on'; header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]); exit(); }
Теперь наш сайт доступен только по HTTPS. При попытке перейти по протоколу HTTP, посетителя будет автоматически перенаправлять на защищенный протокол.
7. Рекомендации по обеспечению безопасности
Настройка парольной аутентификации Apache
Установите набор необходимых утилит:
root@dedicated:~# apt-get install apache2-utils
Создайте файл с паролями, задайте уникальное имя пользователя и придумайте для него сложный пароль. Пароль следует запомнить, он хранится в хешированом виде и в текстовом виде недоступен:
root@dedicated:~# htpasswd -c /etc/apache2/.htpasswd secret_username New password: Re-type new password: Adding password for user secret_username
Флаг «-с» означает create, и используется только при создании .htpasswd для apache. Если вы планируете добавить несколько пользователей, повторно этот флаг использовать не нужно.
Теперь настроим наш виртуальный хост. Для этого выполним правку:
root@dedicated:~# nano /etc/apache2/sites-enabled/dmt.co.ua-le-ssl.conf
Добавив в него содержимое:
<Directory "/var/www/dmt.co.ua/wp-admin"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory>
Сохраните файл. Проверьте синтаксис и перезапустите Apache
root@dedicated:~# apache2ctl configtest Syntax OK root@dedicated:~# systemctl restart apache2.service
Попробуйте зайти в административную часть сайта. Вы увидите дополнительно окно аутентификации, что является ещё одной преградой для его взлома.
Ограничение доступа по IP адресу
Так же вы можете ограничить вход в административную часть сайта, которая по умолчанию доступна по https://dmt.co.ua/wp-admin/ и https://dmt.co.ua/wp-login.php
Для этого в .htaccess добавьте следующие строки, указав вместо 111.111.111.111 свой внешний статический ip адрес, с которого вы планируете администрировать сайт. Допускается добавления нескольких IP адресов, вносить каждый нужно с новой строки:
<FilesMatch "^(wp-login|wp-config)\.php$"> Order deny,allow Deny from all Allow from 111.111.111.111 </FilesMatch>
Возможности обезопасить ваш сервер ограничены только временем и желанием на изучение администрирования. Рекомендуем так же ознакомиться со статьей «Как обеспечить безопасность Linux сервера» и ознакомиться с другими статьями нашего блога которые затрагивают администрирование различных CMS.
8. Если вы установили Wordpress на VPS из нашего шаблона
Для наших клиентов VPS мы подготовили шаблон виртуального сервера на Debian 10 с WordPress. Автоматическая установка занимает не более 10 минут и инициируется в панели управления сервером. По умолчанию, доступен только один сайт, доступный по ip адресу. Как настроить виртуалхост по доменному имени, подробно рассмотрено в этом руководстве. Вы можете сделать свои виртуальные хосты и установить несколько сайтов, на сколько позволят технические характеристики сервера и загруженность самих сайтов.
Если вы решите использовать сайт доступный из шаблона, необходимо обязательно сменить данные доступа администратора баз данных или создать свою азу данных, удалив существующую. Изменить пароль очень просто:
root@dedicated:~# mariadb MariaDB [(none)]> SET PASSWORD FOR 'admindb'@'localhost' = PASSWORD('newpassword');
Вместо newpassword укажите свой уникальный сложный пароль. Затем затем отредактируйте файл wp-config.php
root@dedicated:~# nano /var/www/wordpress/wp-config.php
изменив значение следующей директивы:
define( 'DB_PASSWORD', 'newpassword' );
Заключение
В данном руководстве мы ознакомились с процедурой установки популярного движка Wordpress на среду Linux. По данному мануалу не составит труда его установить самостоятельно и обеспечить базовую безопасность сайта или установить из существующего шаблона, заказав облачный VPS. Наша круглосуточная служба технической поддержки поможет с его базовой настройкой, если у вас возникнут сложности.
Дата: 27.04.2020 Автор: Дмитрий
|
|
Рекомендовані статті на тему:
- Бесплатные и платные плагины CMS WordPress для создания микроразметки. Особенности и функционал
- Протокол HTTPS для MODX
- Критические уязвимости WordPress найдены в используемом более 80 000 сайтов плагине
- Брешь в плагине: хакеры могут взломать 350 тысяч Wordpress-сайтов
- Атака на WordPress: хакери скомпрометували 35000 сайтів через плагіни
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus