ಪಾಸ್ವರ್ಡ್ ಇಲ್ಲದೆ 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 ಗಾಗಿ ಡೆಬಿಯನ್ ಪ್ಯಾಕೇಜುಗಳೊಂದಿಗೆ, ರೂಟ್ ಬಳಕೆದಾರರನ್ನು ಈ ಕೆಳಗಿನಂತೆ ದೃಢೀಕರಿಸಲಾಗುತ್ತದೆ:

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 ಪ್ಯಾಕೇಜುಗಳು auth-socket ಅಡಿಯಲ್ಲಿ ಮತ್ತು Percona ಸರ್ವರ್‌ಗಾಗಿ ರೂಟ್ ಬಳಕೆದಾರ ದೃಢೀಕರಣವನ್ನು ಸಂರಚಿಸುತ್ತದೆ. ಜೊತೆ ಒಂದು ಉದಾಹರಣೆ ನೀಡೋಣ MySQL 8.0.16-7 ಗಾಗಿ ಪರ್ಕೋನಾ ಸರ್ವರ್ ಮತ್ತು ಉಬುಂಟು 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 ಸಾಕೆಟ್ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಲಿನಕ್ಸ್ ಬಳಕೆದಾರರು MySQL ಬಳಕೆದಾರರಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತಾರೆಯೇ ಎಂದು ಪ್ಲಗಿನ್ ಪರಿಶೀಲಿಸುತ್ತದೆ. ಹೀಗಾಗಿ, ಲಿನಕ್ಸ್‌ನಂತಹ SO_PEERCRED ಆಯ್ಕೆಯನ್ನು ಬೆಂಬಲಿಸುವ ಸಿಸ್ಟಮ್‌ಗಳಲ್ಲಿ ಮಾತ್ರ ಪ್ಲಗಿನ್ ಅನ್ನು ಬಳಸಬಹುದು. SO_PEERCRED ಸಾಕೆಟ್ ಆಯ್ಕೆಯು ಸಾಕೆಟ್‌ಗೆ ಸಂಬಂಧಿಸಿದ ಪ್ರಕ್ರಿಯೆಯ uid ಅನ್ನು ಕಂಡುಹಿಡಿಯಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ತದನಂತರ ಅವರು ಈಗಾಗಲೇ ಈ ಯುಐಡಿಗೆ ಸಂಬಂಧಿಸಿದ ಬಳಕೆದಾರಹೆಸರನ್ನು ಸ್ವೀಕರಿಸುತ್ತಾರೆ.

"ಅಲೆಮಾರಿ" ಬಳಕೆದಾರರೊಂದಿಗೆ ಒಂದು ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

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)

ಸಂಭವಿಸಿದ!

ಸರಿ, ಇದನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಒದಗಿಸದ ಡೆಬಿಯನ್ ಅಲ್ಲದ ವಿತರಣೆಯ ಬಗ್ಗೆ ಏನು? 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

ಬಮ್ಮರ್. ಏನು ಕಾಣೆಯಾಗಿದೆ? ಪ್ಲಗಿನ್ ಲೋಡ್ ಆಗಿಲ್ಲ:

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@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 ಡೇಟಾಬೇಸ್ ದೃಢೀಕರಣಇನ್ನೂ ಪ್ರವೇಶವನ್ನು ಪಡೆಯಲು, ಆದರೆ ಪಾಸ್ವರ್ಡ್ಗಳಿಲ್ಲದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ