Чӣ тавр истифода бурдани MySQL-ро бидуни парол (ва хатарҳои амниятӣ)

Чӣ тавр истифода бурдани MySQL-ро бидуни парол (ва хатарҳои амниятӣ)

Онҳо мегӯянд, ки беҳтарин парол он аст, ки шумо набояд дар хотир доред. Дар мавриди MySQL ин ба шарофати плагин имконпазир аст auth_socket ва версияи он барои MariaDB - unix_socket.

Ҳардуи ин плагинҳо тамоман нав нестанд; дар бораи онҳо дар ҳамин блог бисёр гуфта шудааст, масалан дар мақолаи Чӣ тавр тағир додани паролҳо дар MySQL 5.7 бо истифода аз плагини auth_socket. Аммо, ҳангоми баррасии чизи нав дар MariaDB 10.4, ман фаҳмидам, ки unix_socket ҳоло ба таври нобаёнӣ насб шудааст ва яке аз усулҳои аутентификатсия аст (“яке аз”, зеро дар MariaDB 10.4 зиёда аз як плагин барои як корбар барои аутентификатсия дастрас аст, ки дар хуччат баён карда шудааст "Authentication" аз MariaDB 10.04).

Тавре ки ман гуфтам, ин хабар нест ва ҳангоми насб кардани MySQL бо истифода аз бастаҳои .deb, ки аз ҷониби дастаи Debian дастгирӣ мешавад, корбари решавӣ барои аутентификатсияи розетка сохта мешавад. Ин ҳам барои MySQL ва ҳам MariaDB дуруст аст.

root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Original-Maintainer: Debian MySQL Maintainers <[email protected]>
Original-Maintainer: Debian MySQL Maintainers <<a href="mailto:[email protected]">[email protected]</a>>

Бо бастаҳои Debian барои MySQL, корбари реша ба таври зерин тасдиқ карда мешавад:

root@app:~# whoami
root=
root@app:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

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.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root';
+------+-----------+-------------+-----------------------+
| user | host      | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket |                       |
+------+-----------+-------------+-----------------------+
1 row in set (0.01 sec)

Ҳамин ҳолат бо бастаи .deb барои MariaDB аст:

10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

MariaDB [(none)]> show grants;
+------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                      |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                  |
+------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Бастаҳои .deb аз анбори расмии Percona инчунин аутентификатсияи корбари решаро зери васлаки аутентификатсия ва сервери Percona танзим мекунанд. Биёед бо мисол мисол орем Сервери Percona барои MySQL 8.0.16-7 ва Ubuntu 16.04:

root@app:~# whoami
root
root@app:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 9
Server version: 8.0.16-7 Percona Server (GPL), Release '7', Revision '613e312'

Copyright (c) 2009-2019 Percona LLC and/or its affiliates
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.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host      | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket |                       |
+------+-----------+-------------+-----------------------+
1 row in set (0.00 sec)

Пас, ҷодугарӣ чист? Васлкунак тафтиш мекунад, ки корбари Linux ба корбари MySQL бо истифода аз опсияи SO_PEERCRED барои ҷамъоварии маълумот дар бораи корбаре, ки барномаи муштариро иҷро мекунад, мувофиқат мекунад. Ҳамин тариқ, плагинро танҳо дар системаҳое истифода бурдан мумкин аст, ки опсияи SO_PEERCRED-ро дастгирӣ мекунанд, ба монанди Linux. Варианти васлаки SO_PEERCRED ба шумо имкон медиҳад, ки uid-и раванди марбут ба розеткаро пайдо кунед. Ва он гоҳ ӯ аллакай номи корбарии бо ин uid алоқамандро мегирад.

Ин аст як мисол бо корбари "vagrant":

vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Access denied for user 'vagrant'@'localhost'

Азбаски дар MySQL корбари "овора" вуҷуд надорад, ба мо дастрасӣ надоранд. Биёед чунин корбарро эҷод кунем ва бори дигар кӯшиш кунем:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Query OK, 0 rows affected (0.00 sec)

vagrant@mysql1:~$ mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 45
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost                                                    |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Ҳодиса!

Хуб, дар бораи тақсимоти ғайри Debian, ки он бо нобаёнӣ таъмин карда намешавад, чӣ гуфтан мумкин аст? Биёед сервери Percona барои MySQL 8-ро дар CentOS 7 насб кунем:

mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name   | Value                                   |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 row in set (0.01 sec)

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded

Буммер. Чӣ намерасид? Плагин бор карда нашудааст:

mysql> pager grep socket
PAGER set to 'grep socket'
mysql> show plugins;
47 rows in set (0.00 sec)

Биёед ба раванд як плагин илова кунем:

mysql> nopager
PAGER set to stdout
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Query OK, 0 rows affected (0.00 sec)

mysql> pager grep socket; show plugins;
PAGER set to 'grep socket'
| auth_socket                     | ACTIVE | AUTHENTICATION | auth_socket.so | GPL     |
48 rows in set (0.00 sec)

Холо мо хамаи чизи заруриро дорем. Биёед бори дигар кӯшиш кунем:

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Query OK, 0 rows affected (0.01 sec)

Шумо ҳоло метавонед бо истифода аз номи корбари "percona" ворид шавед.

[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 19
Server version: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312

Copyright (c) 2009-2019 Percona LLC and/or its affiliates
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.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user    | host   | plugin   | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket |                       |
+---------+-----------+-------------+-----------------------+
1 row in set (0.00 sec)

Ва он боз кор кард!

Савол: Оё имкони ворид шудан ба система бо як логини перкона имконпазир аст, аммо ҳамчун корбари дигар?

[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Access denied for user 'percona'@'localhost'

Не, ин кор нахоҳад кард.

хулоса

MySQL дар чанд ҷиҳат хеле чандир аст, ки яке аз онҳо усули аутентификатсия мебошад. Тавре ки шумо аз ин паём мебинед, дастрасиро бидуни паролҳо, дар асоси корбарони OS метавон ба даст овард. Ин метавонад дар сенарияҳои муайян муфид бошад ва яке аз онҳо ҳангоми гузаштан аз RDS/Aurora ба MySQL-и муқаррарӣ бо истифода Аутентификатсияи пойгоҳи додаҳои IAMто ҳол дастрасӣ пайдо кунед, аммо бидуни парол.

Манбаъ: will.com

Илова Эзоҳ