Сегодня я нашел в себе силы и посмотреть, а чем нужен плагин проверки устанавливаемого пароля на учетные записи в mysql-server
который поднимается на Ubuntu 22.04.
Может все же стоит его использовать или используя вдруг все же не стоит, как отключить и как включить. Ниже от и до как я с ним познакомился, а познакомился, когда нечаянно включил его и ставил пароль на учетную запись, но получил ошибку: ERROR 1819 (HY000)
Шаг №1:
Обновляю систему до самого актуального состояния в рамках текущего релиза установленной с нуля операционной системы Ubuntu 22.04 Server:
ekzorchik@srv-home:~$ sudo rm -Rf /var/lib/apt/lists && sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y ekzorchik@srv-home:~$ sudo reboot ekzorchik@srv-home:~$ uname -a && lsb_release -a Linux srv-home 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy ekzorchik@srv-home:~$
Шаг №2:
Устанавливаю сервис mysql-server & mysql-client:
ekzorchik@srv-home:~$ apt-cache show mysql-server mysql-client | grep Version Version: 8.0.36-0ubuntu0.22.04.1 Version: 8.0.28-0ubuntu4 Version: 8.0.36-0ubuntu0.22.04.1 Version: 8.0.28-0ubuntu4 ekzorchik@srv-home:~$ sudo apt-get install -y mysql-server mysql-client
Шаг №3:
Изменяю схему авторизации и назначаю пароль на системную учетной запись root
сервиса MySQL:
ekzorchik@srv-home:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] default-authentication-plugin=mysql_native_password
Шаг №4:
Задаем пароль на системную учетную запись Login:root
сервиса MySQL:
ekzorchik@srv-home:~$ sudo mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '712mbddr@';" ekzorchik@srv-home:~$
Шаг №5:
Выполняю базовую преднастройку по безопасности:
ekzorchik@srv-home:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: 712mbddr@ VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: нажимаю клавишу "y" There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Using existing password for root. Estimated strength of the password: 50 Change the password for root ? ((Press y|Y for Yes, any other key for No) : нажимаю клавишу "n", т.к. я уже задал пароль, в моем случаем это 712mbddr@ ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : нажимаю клавишу "y" Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : нажимаю клавишу "y" Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : нажимаю клавишу "y" - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : нажимаю клавишу "y" Success. All done! ekzorchik@srv-home:~$
Т.е. я после того как установил сервис mysql
, выполнил схему изменения авторизации, указал пароль на системную учетную запись Login: root
сервиса Mysql
, а вот как раньше после производил преднастройку по безопасности сервис mysql
столкнулся что теперь можно задать сложность пароля на системную Login: root
учетную запись mysql
, т.е. по умолчанию активируется плагин validate_password.
Шаг №6:
Посмотреть, а активирован ли плагин validate_password
сейчас и что в плагине осуществляет проверку пароля:
mysql> SHOW VARIABLES LIKE 'validate_password.%'; +-------------------------------------------------+--------+ | Variable_name | Value | +-------------------------------------------------+--------+ | validate_password.changed_characters_percentage | 0 | | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | STRONG | | validate_password.special_char_count | 1 | +-------------------------------------------------+--------+ 8 rows in set (0.01 sec) mysql>
На заметку:
validate_password.length - минимальная задаваемая длина пароля
validate_password.mixed_case_count - символы верхнего и нижнего регистра
validate_password.number_count - символы цифрового ряда
validate_password.special_char_count - спецсимволы
Шаг №7:
Но вот когда создаю базу, пользователя и пароль то сталкиваются что с учетом плагина проверки пароля на сложность как делал ранее не могу сделать:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "drop database if exists db_wp" sudo mysql -u root -p712mbddr@ -e "create database db_wp character set utf8 collate utf8_general_ci"; sudo mysql -u root -p712mbddr@ -e "drop user if exists 'us_wp'@'localhost'" sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by '612mbddr@'" mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1819 (HY000) at line 1: Your password does not satisfy the current policy requirements ekzorchik@srv-home:~$
В этом случае либо увеличиваем сложность создаваемого пароля, т.к. Estimated strength of the password: 50: (Предполагаемая надежность пароля: 50)
ekzorchik@srv-home:~$ echo 612mbddr@ | sha512sum | cut -c 1-50 d6e76342d2fda8493a08a3ccda998a5e7d844db5e2f869df98 ekzorchik@srv-home:~$ kzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by 'd6e76342d2fda8493a08a3ccda998a5e7d844db5e2f869df98'" mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1819 (HY000) at line 1: Your password does not satisfy the current policy requirements ekzorchik@srv-home:~$
На заметку: Не совсем понял про числовое надежность пароля в значении 50
, я же для своих сервирос использую пароль более 13
символов со всей сложность составляющей: большие, малые, цифры, спецсимволы тем самым заранее прохожу по всем параметрам надежности.
Что же тогда в Mysql
не нравится при установке пароля пользователю, если пролистать выше, то в соответствии с настройкой validate_password.special_char_count=1
нужно чтобы в пароле был хоть один спецсимвол. К примеру: !,",№,;,%
и validate_password.mixed_case_count=1
(Заглавные буквы). С учетом этого добавляю спецсимвол к создаваемому паролю на учетную запись us_wp:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by 'd6e76342d2fda8493a08a3ccda998a5e7d844db5e2f869df98#A'" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$
видно, что, указав в конце указываемого пароля спецсимвол знака решетка "#"
и заглавную букву "A"
задаваемый пароль плагин пропустил.
Шаг №8:
К примеру, если не хотим использовать спецсимволы, то изменим правила для плагина, просто деактивировав функционал:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "SET GLOBAL validate_password.special_char_count = 0;" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$
либо можно в mysqld.cnf
указать:
ekzorchik@srv-home:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] default-authentication-plugin=mysql_native_password validate_password.special_char_count=0
Вот теперь если задавать на учетную запись пароль не содержащий спецсимволы все пройдет успешно:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "alter user 'us_wp'@'localhost' identified by 'd6e76342d2fda8493a08a3ccda998a5e7d844db5e2f869df98A'" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$
На заметку:
create user - создаем учетную запись
alter user - изменяем параметры у существующей учетной записи
Шаг №9:
Можно вообще отключить плагин validate_password
после того как установили sudo apt-get install mysql-server:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "uninstall component 'file://component_validate_password'" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$
После проверяем наличие политики пароля (вывод пуст, плагина нет)
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "SHOW VARIABLES LIKE 'validate_password.%';" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$
Шаг №10:
Чтобы все-таки установить плагин validate_password:
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "install component 'file://component_validate_password'" mysql: [Warning] Using a password on the command line interface can be insecure. ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "SHOW VARIABLES LIKE 'validate_password.%';" mysql: [Warning] Using a password on the command line interface can be insecure. +-------------------------------------------------+--------+ | Variable_name | Value | +-------------------------------------------------+--------+ | validate_password.changed_characters_percentage | 0 | | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +-------------------------------------------------+--------+ ekzorchik@srv-home:~$
Отлично, теперь я все же буду использовать плагин проверки задаваемых паролей, уж лучше так чем использовать простые пароли. Все должно быть сделано на совесть.
Итого с чем столкнулся, то и оформил для себя, теперь я знаю чуть больше, на этом пока все, с уважением автор блога Олло Александр aka ekzorchik.