
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 és a MariaDB verziójának — .
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 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 ).
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">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 é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ónakMivel 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öltveSajná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ónakNem, 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 , hogy továbbra is hozzáférhessünk, de jelszavak nélkül.
Forrás: habr.com
