MySQLди сырсөзсүз кантип колдонуу керек (жана коопсуздук тобокелдиктери)

MySQLди сырсөзсүз кантип колдонуу керек (жана коопсуздук тобокелдиктери)

Эң жакшы сырсөз - эстеп калбоо керек дешет. MySQL учурда бул плагиндин аркасында мүмкүн auth_socket жана анын MariaDB үчүн версиясы - unix_socket.

Бул плагиндердин экөө тең жаңы эмес, алар бул блогдо көп талкууланган, мисалы: auth_socket плагинин колдонуу менен MySQL 5.7деги сырсөздөрдү кантип өзгөртүү керек. Бирок, MariaDB 10.4'теги жаңылыктарды карап жатып, мен unix_socket азыр демейки боюнча орнотулганын жана аныктыгын текшерүү ыкмаларынын бири экенин байкадым ("бир", анткени MariaDB 10.4'те аутентификация үчүн бирден ашык плагин бир колдонуучуга жеткиликтүү. документте түшүндүрүлөт MariaDBден "Аутентификация" 10.04).

Мен айткандай, бул жаңылык эмес жана Debian командасы тарабынан колдоого алынган .deb пакеттерин колдонуу менен MySQLди орнотуп жатканда, розетка аутентификациясы үчүн түпкү колдонуучу түзүлөт. Бул 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>>

MySQL үчүн Debian пакеттери менен түпкү колдонуучу төмөнкүдөй аутентификацияланат:

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)

MariaDB үчүн .deb пакети да ушундай:

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)

Расмий Percona репозиторийиндеги .deb пакеттери аутентификация розеткасы астында жана Percona Server үчүн түпкү колдонуучунун аутентификациясын конфигурациялайт. менен мисал келтирели MySQL 8.0.16-7 үчүн Percona Server жана 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)

Анда эмне сыйкыр? Плагин кардар программасын иштетип жаткан колдонуучу тууралуу маалыматты чогултуу үчүн SO_PEERCRED розетка опциясын колдонуп, Linux колдонуучусу MySQL колдонуучусуна дал келгенин текшерет. Ошентип, плагинди Linux сыяктуу SO_PEERCRED опциясын колдогон системаларда гана колдонсо болот. 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 бөлүштүрүү жөнүндө эмне айтууга болот? Келгиле, CentOS 8де орнотулган MySQL 7 үчүн Percona серверин сынап көрөлү:

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

Bummer. Эмне жетишпей жатты? Плагин жүктөлгөн жок:

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 маалыматтар базасынын аутентификациясыдагы эле кирүү үчүн, бирок сырсөзсүз.

Source: www.habr.com

Комментарий кошуу