Повышаем безопасность стека web-приложений (виртуализация lamp, шаг 2/6)

Настройка MariaDB 10.5

Настройка удаленного подключения к базе

По умолчанию MariaDB доступна только с вашего ПК. По соображениям безопасности лучше оставить такой вариант, но если нужно принимать удаленное подключение (от пользователя, внешнего веб-сервера и т.д.) необходимо изменить параметр bind-address в конфигурационном файле. Откройте файл конфигурации при помощи редактора nano:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

1 sudo nanoetcmysqlmariadb.conf.d50-server.cnf

Затем измените bind-address на строку 0.0.0.0 вместо 127.0.0.1.

0.0.0.0 — говорит, что подключение к БД возможно с любого IP адреса. Если необходимо подключаться к БД с определенного и единственного IP адреса, то укажите его, например, 192.168.0.104.

Чтобы изменения вступили в силу, введите команды в терминале:

sudo systemctl restart mysql
sudo systemctl enable mysql

1
2

sudo systemctl restart mysql

sudo systemctl enable mysql

По умолчанию mySQL прослушивает порт 3306. Чтобы убедиться, что все работает правильно, воспользуйтесь командой:

ss -ltn

1 ss-ltn

Далее, нужно убедится, что брендмауэр вашего сервера не блокирует входящие соединения на порту 3306:

sudo ufw allow from any to any port 3306 proto tcp

1 sudo ufw allow from any toany port3306proto tcp

Первичная настройка базы данных MariaDB

Откройте в терминале Linux БД под правами root:

sudo mysql

1 sudo mysql

Создайте новую базу данных:

mysql> CREATE DATABASE database_name;

1 mysql>CREATE DATABASE database_name;

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

mysql> CREATE USER ‘user_name’@’%’ IDENTIFIED BY ‘password’;

1 mysql>CREATE USER’user_name’@’%’IDENTIFIED BY’password’;

% — означает, что пользователь сможет подключиться к базе данных с любого IP адреса. Если нужно ограничить, то укажите необходимый адрес, например, [email protected], а для локальных соединений user_name@localhost.

Предоставьте разрешения на использование БД:

mysql> GRANT ALL PRIVILEGES ON database_name.* TO user_name@’%’ WITH GRANT OPTION;

1 mysql>GRANT ALL PRIVILEGES ON database_name.*TOuser_name@’%’WITH GRANT OPTION;

WITH GRANT OPTION — позволяет предоставлять другим пользователям или удалять у них те привилегии, которыми вы сами обладаете. Из соображений безопасности не самая хорошая идея использовать этот тип учетной записи для процессов, к которым будет иметь доступ внешние пользователи (например, на веб-сайте).

Сохраните изменения и выходите:

mysql> FLUSH PRIVILEGES;
mysql> exit;

1
2

mysql>FLUSH PRIVILEGES;

mysql>exit;

Популярные теги

ubuntu
linux
ubuntu_18_04
settings
debian
setup
ubuntu_16_04
error
macos
redhat
mint
problems
windows
install
server
android
bash
hardware
ubuntu_18_10
wifi
update
desktop
network
files
убунту
rhel
docker
web
kali
password
python
security
windows_10
nvidia
ustanovka
software
apt
ubuntu_20_04
filesystem
manjaro
shell
stretch
issues
kde
mysql
apache2
partition
wine
program
video_card
disk
package-management
apt-get
drivers
kernel
virtualbox
performance
vpn
video
gnome
games
keyboard
terminal
kubuntu
usb
nginx
command-line
macbook
sound
driver
wi_fi
centos
installation
display
delete
scripting
user
os
memory
hotkeys
disk_space
freebsd
dual_boot
ubuntu_17_10
opera
cron
backup
fedora
lubuntu
oshibka
chrome
boot
for
ssh
mail
zorin_os
arch_linux
установка
firewall
git

Обеспечение безопасности MySQL

Установка MySQL поставляется со сценарием который позволяет легко повысить безопасность сервера базы данных.

Вызвать скрипт без аргументов:

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

В следующем запросе вам будет предложено установить пароль для пользователя root MySQL:

Если вы настроите плагин проверки пароля, сценарий покажет вам силу вашего нового пароля. Введите чтобы подтвердить пароль:

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

Как установить MySQL 8 в Debian 10

Шаг 1: Добавление репозитория MySQL

Чтобы установить MySQL в Debian, вам необходимо скачать и установить APT репозиторий содержащийся в .deb пакете, который управляет настройкой и установкой программного обеспечения MySQL.

Во время установки пакета вам будет предложено настроить репозиторий MySQL APT для выбора версий сервера MySQL и других компонентов, которые вы хотите установить. Для установки последней версии оставьте все как есть, перейдите к Оk и нажмите Enter.

Шаг 2: Установка MySQL

После добавления репозитория обновите кэш пакетов apt и установите пакет сервера MySQL. При этом также будут установлены пакеты для клиента и другие зависимости.

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

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

Когда установка пакетов завершится, установщик запустит службу MySQL и настроит для неё автозагрузку. Чтобы убедиться, что служба MySQL работает, проверьте ее состояние с помощью следующей команды.

Есть несколько команд systemctl, которые вам нужно знать, чтобы управлять (запускать, перезапускать и останавливать) службу MySQL, когда это будет необходимо:

Шаг 3: Настройка безопасности MySQL

Сервер MySQL из коробки не защищен, и для повышения безопасности потребуется запустить сценарий mysql_secure_installation. Выполните:

Прочитайте описание каждого вопроса и правильно ответьте на них. Во-первых, введите пароль пользователя root, который вы задали во время установки пакета. Вы можете выбрать y (для Yes) или n (для No), чтобы использовать или не использовать компонент VALIDATE PASSWORD.

Когда сценарий предложит вам установить новый пароль для пользователя root выберите No (вы уже установили его во время установки пакета). Затем внимательно следуйте другим подсказкам и выберите y (для YES), чтобы удалить анонимных пользователей, запретить удаленный вход под root в систему, удалить тестовую базу данных и перезагрузить таблицу привилегий.

Настройки MySQL Debian завершены, можно переходить к использованию.

Шаг 4: Проверка MySQL

После того как вы закончили настройку безопасности MySQL, можно начать использовать его для хранения данных для ваших веб-сайтов или веб-приложений. Чтобы получить доступ к оболочке MySQL, выполните следующую команду (пароль пользователя root введите по запросу, как показано на скриншоте):

Шаг 4: защита MySQL

mysqladmin представляет собой утилиту командной строки для MySQL. Она позволяет администраторам баз данных выполнять простые задачи вроде установки и изменения паролей, мониторинга процессов и так далее.

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

$ mysqladmin -u root -p version

Часть -u root отвечает за авторизацию в качестве суперпользователя, -p говорит о том, что должен быть запрошен пароль, а version — это сама команда, которую вы хотите выполнить.

В выводе вы можете увидеть, какая версия MySQL работает, аптайм и некоторую другую информацию:

mysqladmin  Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Server version   8.0.17

Protocol version 10

Connection   Localhost via UNIX socket

UNIX socket  /var/run/mysqld/mysqld.sock

Uptime:      3 min 9 sec

Threads: 2  Questions: 10  Slow queries: 0  Opens: 128 Flush tables: 3  Open tables: 48 Queries per second avg: 0.052

Вся эта информация подтверждает, что вы успешно установили MySQL на свой сервер.

4: Тестирование удаленных и локальных подключений

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

Сначала проверьте локальное соединение с сервером 2:

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

Теперь перейдите на сервер 1.

Для начала установите клиентские инструменты MySQL, чтобы получить доступ к удаленной БД. Обновите индекс пакетов и установите все необходимое:

Подключитесь к серверу 2:

Примечание: Помните о том, что IP-адреса должны находиться в одной сети. Если вы используете внутренний адрес на сервере MySQL, используйте такой же адрес на сервере 1.

Будет запрошен пароль wordpressuser. Если соединение было успешно создано, вы увидите командную строку MySQL. Убедитесь, что соединение использует SSL:

Строка SSL: говорит о том, что соединение использует шифрование SSL. Закройте командную строку.

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

Перейдите на сервер 3, у которого нет доступа к БД.

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

Введите:

Команда должна выдать ошибку:

2: Настройка MySQL

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

Программа запросит root-пароль, который вы выбрали при установке.

После этого сценарий задаст вам ряд вопросов. Когда программа предложит изменить root-пароль, нажмите N и Enter. В остальных случаях вы можете просто нажать Y и Enter, чтобы принять данные по умолчанию.

Чтобы инициализировать каталог данных в более ранних версиях MySQL, нужно было запустить mysql_install_db или mysqld –initialize (для версий после 5.7.6). Однако если вы установили MySQL из репозитория Debian, как показано в разделе 1, каталог данных инициализируется автоматически. Если вы попробуете запустить одну из предложенных выше команд, она вернёт такую ошибку:

2016-03-07T20:11:15.998193Z 0 –initialize specified but the data directory has files in it. Aborting.

Теперь нужно убедиться, что установка MySQL прошла успешно.

Настройка

Конфигурация сервера MySQL содержится в файле /etc/mysql/my.cnf.

Доступ к серверу из сети

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

Кодировки

По-умолчанию в Ubuntu MySQL устанавливается с кодировкой latin1 . В этом можно убедиться посмотрев вывод запроса:

В связи с этим, даже используя при работе с сервером команду

и используя при создании таблиц

невозможно добиться полной поддержки кодировки utf8:

Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам.

Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл /etc/mysql/my.cnf:

В секцию добавьте следующие строки:

Так же желательно установить кодировку для клиента и mysqldump. Для этого в секциях и необходимо добавить строчку:

Перезагрузите сервер MySQL:

После этого список переменных будет выглядеть так:

Системные обновления

Своевременно устанавливать обновления для ОС — хорошая привычка. Разумеется, бывают случаи, когда обновление влечет за собой негативные последствия, но это происходит крайне редко. Данный процесс можно упростить, если использовать автообновления системы.

В разных дистрибутивах это делается по-своему:

Debian/Ubuntu используют пакет unattended upgrades для автоматических обновлений

CentOS использует yum-cron

В дистрибутиве Fedora используется

Если сервер под критической нагрузкой, то следует использовать штатные средства.

Ubuntu/Debian:

Fedora/Centos:

Важно! Обновление коснется только тех пакетов и приложений которые не были установлены путем компилирования и получены как исполняемые файлы

Настройка межсетевого экрана

Последний шаг — настроить брандмауэр, чтобы разрешить трафик на порт (порт по умолчанию MySQL) с удаленных машин.

Iptables

Если вы используете iptables в качестве брандмауэра, приведенная ниже команда разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.

Разрешить доступ с определенного IP-адреса:

UFW

UFW — это брандмауэр по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), запустите:

Разрешить доступ с определенного IP-адреса:

БрандмауэрD

FirewallD — это инструмент управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:

Чтобы разрешить доступ с определенного IP-адреса через определенный порт, вы можете создать новую зону FirewallD или использовать расширенное правило. Итак, создайте новую зону с именем :

3: Безопасность MySQL

MySQL поставляет команду, с помощью которой можно повысить безопасность свежей установки. Запустите её:

Команда запросит root-пароль MySQL. Введите его и нажмите Enter. После этого команда задаст вам ряд вопросов.

Для начала она предложит включить плагин проверки валидности паролей (он автоматически применяет определенные правила защиты паролей пользователей MySQL). Необходимость этого плагина полностью зависит от индивидуальных потребностей сервера. Чтобы включить его, введите y и Enter; чтобы пропустить этот вопрос, просто нажмите Enter. После включения плагина вам будет предложено выбрать уровень строгости проверки пароля (от 0 до 2). Выберите уровень и нажмите Enter, чтобы продолжить. Затем команда предложит изменить root-пароль. Поскольку это свежая установка и пароль был выбран совсем недавно, вы можете не менять его. Чтобы продолжить, нажмите Enter.

На остальные вопросы можно ответить yes. Команда предложит удалить анонимных пользователей MySQL, запретить удаленный root-доступ, удалить тестовую базу данных и перезагрузить привилегии, чтобы все изменения вступили в силу. Введите y и нажмите Enter в каждом новом окне.

Сценарий завершит свою работу после того как вы ответите на все вопросы.

Настройка службы SSH

Запрещаем авторизацию от пользователя root. Ваша учетная запись должна быть в группе sudo или wheel (в зависимости от ОС) для того чтобы выполнять команды от суперпользователя, как это сделать указано выше. Для непосредственного выполнения команд следует перед командой использовать служебную команду sudo.

Например:

Также для перехода в режим суперпользователя можно использовать одну из двух команд:

либо

Во всех случаях система запросит пароль.

Теперь отключим авторизацию под пользователем root.

Открываем на редактирование файл sshd_config. В Debian/Ubuntu это выглядит так:

Находим строчку:

PermitRootLogin и заменяем его значение на no.

Запрещаем аутентификацию по паролю

Важно это сделать, если у вас уже успешно выполняется подключение по ключу

Открываем все тот же файл sshd_config.

Находим строку:

Заменяем значение “yes” на “no”.

Строка может быть закомментирована (т.е. перед ней стоит символ “#”), в этом случае ее надо раскомментировать.

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

По окончании настроек любого из пунктов, перезапускаем сервер.

Либо

Либо

Настройка MySQL

После установки первое, что нам необходимо сделать, это осуществить базовую настройку сервера MySQL. Даже если он у Вас будет только локально на домашнем компьютере.

Базовая настройка безопасности MySQL

По умолчанию MySQL устанавливается с некоторыми небезопасными параметрами, поэтому нам необходимо сделать наш сервер чуть более безопасным. Для этого выполним специальный скрипт под названием mysql_secure_installation в терминале Linux. Скрипт выполнять нужно также от имени root или с использованием команды sudo.

В процессе Вам будут задавать вопросы, практически на все отвечаем «Да», т.е. пишем «Y». Исключение может составлять вопрос о смене пароля пользователя root (Change the password for root?), т.е. его можно не менять и ответить «N», если в процессе установки MySQL мы задали хороший пароль для root. Сразу после запуска скрипта вводим пароль администратора сервера MySQL (как раз тот самый пароль от пользователя root).

     
     mysql_secure_installation

Потом будет вопрос о том, хотим ли мы активировать плагин проверки сложности пароля, отвечаем «Y», т.е. «Да».

В случае если мы активируем данный плагин, у нас спросят уровень сложности пароля, давайте ответим 2, т.е. средней сложности (цифры, большие/маленькие буквы и спец. символы).

Далее будет вопрос как раз о смене пароля пользователя root, как я уже сказал, я отвечаю «N», т.е. «Нет». Если на этапе установки MySQL Вы придумали для root простой пароль, то в этом случае лучше конечно его сменить.

Затем мы отвечаем «Y», для того чтобы удалить анонимных пользователей. Также отвечаем «Y», для того чтобы запретить пользователю root удаленное подключение.

Потом снова отвечаем «Y», для удаления тестовой базы данных и на последний вопрос также отвечаем «Y» для перезагрузки таблицы привилегий.

На этом базовая настройка безопасности завершена.

Настройка кодировки в MySQL

По умолчанию в MySQL установлена кодировка latin1, для того чтобы мы могли вносить, хранить и читать данные на кириллице, давайте изменим эту кодировку на utf8, в данном случае все созданные нами объекты на сервере по умолчанию будут иметь кодировку utf8. Также мы укажем настройки, при которых все подключения к серверу принудительно будут иметь также кодировку utf8. Для этого давайте откорректируем конфигурационный файл /etc/mysql/my.cnf. Это мы будем делать в терминале, поэтому открываем его и вводим следующую команду (также от имени root или с использованием команды sudo).

     
     nano /etc/mysql/my.cnf

После того как Вы откроете этот файл, опуститесь чуть ниже и укажите следующие параметры.

   
        
        character-set-server=utf8
        collation-server=utf8_general_ci
        init_connect='SET collation_connection = utf8_general_ci'
        init_connect='SET NAMES utf8'
        skip-character-set-client-handshake

        
        default-character-set=utf8

        
        default-character-set=utf8

Сохраняем файл сочетанием клавиш Ctrl+O и жмем Enter, затем закрываем его также сочетанием клавиш только Ctrl+X.

После внесения изменений в конфигурационный файл, сервер MySQL необходимо перезагрузить, например вот так.

     
     systemctl restart mysql

Настройка удаленного доступа к серверу MySQL

Если вдруг Вам понадобилось, чтобы к Вашему серверу можно было подключаться с других компьютеров, то для этого необходимо изменить одну настройку в файле mysqld.cnf, а именно параметр bind-address, по умолчанию в нем указано что подключаться к серверу можно только с локального компьютера. Для того чтобы разрешить подключение с любых компьютеров укажите bind-address=0.0.0.0. Запускаем также с правами суперпользователя.

     
     nano /etc/mysql/mysql.conf.d/mysqld.cnf

После внесения изменений также сохраняем/закрываем (Ctrl+O, Ctrl+X) файл и перезагружаем сервер MySQL.

     
     systemctl restart mysql

Выводы

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Этот пост является частью серии Как установить LAMP Stack в Ubuntu 20.04. Другие сообщения из этой серии:

  • Как установить Apache в Ubuntu 20.04
  • Как установить PHP в Ubuntu 20.04
  • Как настроить виртуальные хосты Apache в Ubuntu 20.04
  • Защитите Apache с помощью Let’s Encrypt в Ubuntu 20.04

Выводы

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

  • Как управлять учетными записями пользователей и базами данных MySQL
  • Как сбросить пароль root MySQL
  • Как создать базу данных MySQL

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

Этот пост является частью серии статей о том, как установить LEMP stack на Ubuntu 18.04. Другие сообщения из этой серии:

  • Как установить Nginx в Ubuntu 18.04
  • Как настроить серверные блоки Nginx в Ubuntu 18.04
  • Защитите Nginx с помощью Let’s Encrypt в Ubuntu 18.04
  • Как установить PHP в Ubuntu 18.04
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: