Hogyan használjuk a MySQL-t jelszó nélkül (és biztonsági kockázatok nélkül)

Hogyan használjuk a MySQL-t jelszó nélkül (és biztonsági kockázatok nélkül)

Azt mondják, hogy a legjobb jelszó az, amelyet nem kell megjegyezni. MySQL esetében ez valóság a bővítménynek köszönhetően auth_socket és a MariaDB verziójának — unix_socket.

Ezek a bővítmények egyáltalán nem újak, már sokat írtak róluk ebben a blogban, például a jelszavak MySQL 5.7-es verzióban történő megváltoztatásáról szóló cikkben a auth_socket bővítmény használatával.Ugyanakkor, amikor a MariaDB 10.4 újdonságait néztem, felfedeztem, hogy az unix_socket mostantól alapértelmezett és az egyik hitelesítési módszer («az egyik», mert a MariaDB 10.4-ben egy felhasználó számára több hitelesítő bővítmény is rendelkezésre áll, ami a MariaDB 10.04-es "Hitelesítés" dokumentumban van ismertetve.).

Ahogyan már említettem, ez nem új információ, és amikor a Debian csapat által támogatott .deb csomagok segítségével telepíted a MySQL-t, a root jogosultságú felhasználó a socketen keresztül történő hitelesítéssel jön létre. Ez a MySQL-re és a MariaDB-ra is érvényes.

root@app:~# apt-cache show mysql-server-5.7 | grep -i maintaintók
Eredeti fenntartó: Debian MySQL Fenntartók <pkg-mysql-maint@lists.alioth.debian.org>
Eredeti fenntartó: Debian MySQL Fenntartók <<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org"&gt;pkg-mysql-maint@lists.alioth.debian.org</a>>

A MySQL Debian csomagokkal a root felhasználó a következő módon hitelesít:

root@app:~# whoami
root=
root@app:~# mysql
Üdvözöljük a MySQL monitorban. A parancsok ; vagy g végződéssel zárulnak.
A MySQL kapcsolat azonosítója: 4
Szerver verzió: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle és/vagy leányvállalataik. Minden jog fenntartva.
Az Oracle regisztrált védjegy az Oracle Corporation és/vagy leányvállalataik részéről. Egyéb nevek védjegyek lehetnek a megfelelő tulajdonosaik részéről.

Írd be a 'help;' vagy 'h' parancsot a segítségért. Írd be a 'c' parancsot a jelenlegi bemeneti állítás törléséhez.

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)

Ugyanez van a MariaDB .deb csomagjánál is:

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)

A Percona hivatalos tárolójából származó .deb csomagok szintén a root-jogokkal rendelkező felhasználó hitelesítését auth_socket-ra állítják be a Percona Server számára is. Példát mutatunk be a Percona Server for MySQL 8.0.16-7 és az Ubuntu 16.04 esetében:

root@app:~# whoami
root
root@app:~# mysql
Üdvözöljük a MySQL monitorban. A parancsok ; vagy g végződnek.
A MySQL kapcsolati azonosítója: 9
Szerver verzió: 8.0.16-7 Percona Server (GPL), Kiadás '7', Revízió '613e312'

Copyright (c) 2009-2019 Percona LLC és/vagy partnerei
Copyright (c) 2000, 2019, Oracle és/vagy partnerei. Minden jog fenntartva.
Az Oracle bejegyzett védjegy az Oracle Corporation és/vagy leányvállalatai tulajdonában áll. Más nevek védjegyei lehetnek a megfelelő
tulajdonosoké.

Írja be a 'help;' vagy 'h' parancsot a segítségért. Írja be a 'c' parancsot a jelenlegi bemeneti utasítás törléséhez.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host      | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket |                       |
+------+-----------+-------------+-----------------------+
1 sor a beállításban (0.00 sec)

Mi a titok? A bővítmény ellenőrzi, hogy a Linux felhasználó megegyezik-e a MySQL felhasználóval, az SO_PEERCRED socket opció használatával – hogy összegyűjtse a kliens programot futtató felhasználói információkat. Így a bővítmény csak olyan rendszereken használható, amelyek támogatják az SO_PEERCRED opciót, például Linuxon. Az SO_PEERCRED socket opció lehetővé teszi a kimeneti folyamat UID-jának összeegyeztetését a sockethez. Ezt követően az UID-hoz kapcsolódó felhasználónév is elérhető.

Vegyünk egy példát a «vagrant» felhasználóra:

vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Hozzáférés megtagadva a 'vagrant'@'localhost' felhasználónak

Mivel a MySQL-ban nincs 'vagrant' felhasználó, a hozzáférés megtagadva. Hozzunk létre egy ilyen felhasználót és próbálkozzunk újra:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Kérdés OK, 0 sor érintett (0.00 sec)

vagrant@mysql1:~$ mysql
Üdvözöljük a MariaDB monitorban. A parancsok ; vagy g végződnek.
A MariaDB kapcsolati azonosítója: 45
Szerver verzió: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab és mások.
Írja be a 'help;' vagy 'h' parancsot a segítségért. Írja be a 'c' parancsot a jelenlegi bemeneti utasítás törléséhez.

MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost                                                        |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 sor a beállításban (0.00 sec)

Sikerült!

De mi a helyzet a nem-Debian disztribúciókkal, ahol ez alapértelmezés szerint nincs támogatva? Próbáljuk ki a Percona Server for MySQL 8-at, amely CentOS 7-re van telepítve:

mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name   | Value                                   |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 sor a beállításban (0.01 sec)

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): A 'auth_socket' bővítmény nincs betöltve

Sajnálom. Mi hiányzott? A bővítmény nem lett betöltve:

mysql> pager grep socket
PAGER beállítva: 'grep socket'
mysql> show plugins;
47 sor a gyűjteményben (0.00 sec)

Adjunk hozzá egy bővítményt a folyamathoz:

mysql> nopager
PAGER beállítva: stdout
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Kérdés rendben, 0 sor érintett (0.00 sec)

mysql> pager grep socket; show plugins;
PAGER beállítva: 'grep socket'
| auth_socket                     | AKTÍV | AZONOSÍTÁS | auth_socket.so | GPL     |
48 sor a gyűjteményben (0.00 sec)

Most már megvan minden szükségesünk. Próbáljuk meg újra:

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Kérdés rendben, 0 sor érintett (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Kérdés rendben, 0 sor érintett (0.01 sec)

Mostantól beléphetünk a 'percona' felhasználónévvel.

[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Üdvözöljük a MySQL monitorban. A parancsok; vagy g végződnek.
Az Ön MySQL kapcsolatának azonosítója 19
A szerver verziója: 8.0.16-7 Percona Server (GPL), Kiadás 7, Revízió 613e312

Copyright (c) 2009-2019 Percona LLC és/vagy leányvállalataik
Copyright (c) 2000, 2019, Oracle és/vagy leányvállalataik. Minden jog fenntartva.

Az Oracle a Oracle Corporation és/vagy leányvállalatai bejegyzett védjegye. Egyéb nevek a megfelelő tulajdonosok védjegyei lehetnek.

Írja be a 'help;' vagy 'h' segítséget. Írja be a 'c' -t az aktuális bemeneti állapot törléséhez.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user    | host      | plugin      | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket |                       |
+---------+-----------+-------------+-----------------------+
1 sor a gyűjteményben (0.00 sec)

Ismét sikerült!

Kérdés: be lehet-e lépni a rendszerbe ugyanazzal a percona felhasználónévvel, de másik felhasználóról?

[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
HIBA 1698 (28000): Hozzáférés megtagadva a 'percona'@'localhost' felhasználónak

Nem, nem fog sikerülni.

Következtetés

A MySQL meglehetősen rugalmas több szempontból, az egyik az azonosítási módszer. Amint az ebből a bejegyzésből látható, a hozzáférést jelszavak nélkül is meg lehet szerezni, az operációs rendszer felhasználói alapján. Ez hasznos lehet bizonyos forgatókönyvekben, és az egyik ezek közül az, amikor RDS/Aurora-ból migrálunk a szokásos MySQL-re, a IAM adatbázis-azonosítással, hogy továbbra is hozzáférhessünk, de jelszavak nélkül.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster