MySQL-i şifrə olmadan (və təhlükəsizlik riskləri olmadan) necə istifadə etmək olar

MySQL-i şifrə olmadan (və təhlükəsizlik riskləri olmadan) necə istifadə etmək olar

Deyirlər ki, ən yaxşı şifrə, yadda saxlamalı olduğun şifrə deyil. MySQL-də bu, plugin vasitəsilə mümkün olur. auth_socket və MariaDB üçün versiyası — unix_socket.

Hər iki plugin tamamilə yeni deyil, bu blogda, məsələn, MySQL 5.7-də şifrələri auth_socket pluginindən istifadə edərək necə dəyişdiriləcəyini izah edən yazıda çox danışılıb. . Lakin MariaDB 10.4-də yenilikləri araşdırarkən, unix_socket-in artıq standart olaraq quraşdırıldığını və bir autentifikasiya üsulu olduğunu aşkar etdim (biri, çünki MariaDB 10.4-də bir istifadəçi üçün bir neçə plugin var, bu da„Autentifikasiya“ MariaDB 10.04 sənədində izah olunur. Dediyim kimi, bu, yeni deyil, və Debian komandasının .deb paketlərindən istifadə edərək MySQL quraşdırdıqda, root hüququna malik istifadəçi socket vasitəsilə autentifikasiya olunur. Bu, həm MySQL, həm də MariaDB üçün doğrudur.).

Debian paketləri ilə MySQL üçün root istifadəçisi aşağıdakı şəkildə autentifikasiya olunur:

root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Orijinal-Baxıcı: Debian MySQL Baxıcıları <pkg-mysql-maint@lists.alioth.debian.org>
Orijinal-Baxıcı: Debian MySQL Baxıcıları <<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org"&gt;pkg-mysql-maint@lists.alioth.debian.org</a>>

root@app:~# whoami root= root@app:~# mysql MySQL monitoruna xoş gəlmisiniz. Komandalar ; və ya g ilə bitir. Sizin MySQL bağlantı ID-niz 4-dür Server versiyası: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)Müəllif hüququ (c) 2000, 2019, Oracle və ya onun törəmə şirkətləri. Bütün hüquqlar qorunur. Oracle, Oracle Corporation və ya onun törəmə şirkətlərinin qeydə alınmış ticarət nişanıdır. Digər adlar müvafiq sahiblərinin ticarət nişanı ola bilər.Kömək üçün 'help;' və ya 'h' yazın. Cari giriş bəyanatını silmək üçün 'c' yazın.mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root'; +------+-----------+-------------+-----------------------+ | user | host      | plugin | authentication_string | +------+-----------+-------------+-----------------------+ | root | localhost | auth_socket |                       | +------+-----------+-------------+-----------------------+ 1 set nəticəsi (0.01 sec)

MariaDB üçün .deb paketində də eyni şeydir:

10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04MariaDB [(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 set nəticəsi (0.00 sec)

.deb paketləri Percona-nın rəsmi anbarından da root hüquqlarına malik istifadəçi üçün auth-socket autentifikasiyasını konfiqurasiya edir. Məsələn,

Percona Server for MySQL 8.0.16-7 və Ubuntu 16.04: root@app:~# whoami root root@app:~# mysql MySQL monitoruna xoş gəlmisiniz. Komandalar ; və ya g ilə bitir. Sizin MySQL bağlantı ID-niz 9-dur Server versiyası: 8.0.16-7 Percona Server (GPL), Buraxılış '7', Təhlil '613e312'Müəllif hüququ (c) 2009-2019 Percona LLC və ya onun törəmə şirkətləri Müəllif hüququ (c) 2000, 2019, Oracle və ya onun törəmə şirkətləri. Bütün hüquqlar qorunur. Oracle, Oracle Corporation və ya onun törəmə şirkətlərinin qeydə alınmış ticarət nişanıdır. Digər adlar müvafiq sahiblərinin ticarət nişanı ola bilər.Kömək üçün 'help;' və ya 'h' yazın. Cari giriş bəyanatını silmək üçün 'c' yazın.mysql> select user, host, plugin, authentication_string from mysql.user where user ='root'; +------+-----------+-------------+-----------------------+ | user | host      | plugin | authentication_string | +------+-----------+-------------+-----------------------+ | root | localhost | auth_socket |                       | +------+-----------+-------------+-----------------------+ 1 set nəticəsi (0.00 sec)

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)

Bəs, bu magiya nədədir? Plug-in, Linux istifadəçisinin MySQL istifadəçisinə uyğun olduğunu SO_PEERCRED soket seçimi vasitəsilə yoxlayır — müştəri proqramını işə salan istifadəçi haqqında məlumat toplamaq üçün. Beləliklə, plug-in yalnız SO_PEERCRED seçimini dəstəkləyən sistemlərdə, məsələn, eyni Linuxda istifadə oluna bilər. SO_PEERCRED soket seçimi, prosesin soketə bağlı olan uid-ni təyin etməyə imkan verir. Və sonra ona bağlı olan bu uid üçün istifadəçi adı alır.

Gəlin «vagrant» istifadəçisi ilə bir nümunə gətirək:

vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
XƏTA 1698 (28000): 'vagrant'@'localhost' üçün giriş imtina edildi

Çünki MySQL-də «vagrant» istifadəçisi yoxdur, giriş imtina edilir. Belə bir istifadəçi yaradaq və təkrar cəhd edək:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Sual OK, 0 sətir təsir etdi (0.00 saniyə)

vagrant@mysql1:~$ mysql
MariaDB monitoruna xoş gəldiniz.  Əmr ; və ya g ilə bitir.
Sizin MariaDB bağlantı id-niz 45-dir
Server versiyası: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Müəllif hüquqları (c) 2000, 2018, Oracle, MariaDB Corporation Ab və digərləri.
Kömək üçün 'help;' və ya 'h' yazın. Cari giriş bəyanatını təmizləmək üçün 'c' yazın.

MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost                                                    |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 sətir dəstədə (0.00 saniyə)

Baş tutdu!

Bəs, default olaraq bunu nəzərdə tutmayan non-Debian bir distrosunun vəziyyətində? CentOS 7-də quraşdırılmış Percona Server for MySQL 8-i sınaqdan keçirək:

mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name   | Value                                   |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 sətir dəstədə (0.01 saniyə)

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
XƏTA 1524 (HY000): 'auth_socket' plaqini yüklənməyib

Bədbəxtlik. Nə çatışmadı? Plugin yüklənməmişdir:

mysql> pager grep socket
PAGER 'grep socket' olaraq təyin edildi
mysql> show plugins;
47 sətir dəstədə (0.00 saniyə)

Prosesə plugin əlavə edək:

mysql> nopager
PAGER stdout olaraq təyin edildi
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Sual OK, 0 sətir təsir etdi (0.00 saniyə)

mysql> pager grep socket; show plugins;
PAGER 'grep socket' olaraq təyin edildi
| auth_socket                     | AKTİF | AUTHENTICATION | auth_socket.so | GPL     |
48 sətir dəstədə (0.00 saniyə)

İndi bizdə hər şey var. Bir daha cəhd edək:

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Sual OK, 0 sətir təsir etdi (0.01 saniyə)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Sual OK, 0 sətir təsir etdi (0.01 saniyə)

İndi «percona» giriş adı ilə sisteme daxil olmaq mümkündür.

[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
MySQL monitoruna xoş gəlmisiniz. Əmrlər ; və ya g ilə bitir.
Sizin MySQL bağlantı ID-niz 19-dur.
Server versiyası: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312

Müəllif hüquqları (c) 2009-2019 Percona LLC və ya onun tərəfdaşları
Müəllif hüquqları (c) 2000, 2019, Oracle və ya onun tərəfdaşları. Bütün hüquqlar qorunur.

Oracle, Oracle Corporation və ya onun
tərəfdaşlarının qeydiyyatdan keçmiş ticarət markasıdır. Digər adlar müvafiq
sahiblərinin ticarət markaları ola bilər.

Kömək üçün 'help;' və ya 'h' yazın. Hazırkı giriş ifadəsini təmizləmək üçün 'c' yazın.

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)

Yenə alınmadı!

Sual: Digər istifadəçidən percona ilə eyni girişdən sistemi daxil olmaq mümkün olacaqmı?

[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
XƏTA 1698 (28000): 'percona'@'localhost' istifadəçi üçün giriş icazəsi verilmədi

Xeyr, mümkün olmayacaq.

Çıktı

MySQL bir neçə aspektdə kifayət qədər çevikdir, bunlardan biri - identifikasiya metodudur. Bu yazıdan göründüyü kimi, parolsuz, OS istifadəçilərinə əsaslanan giriş əldə etmək mümkündür. Bu müəyyən vəziyyətlərdə faydalı ola bilər, onlardan biri - RDS/Aurora-dan adi MySQL-a köçürərkən istifadə etməkdir. IAM verilənlər bazası identifikasiyası, hələ də giriş əldə etmək üçün, lakin parolsuz.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster