بغیر پاس ورڈ کے MySQL کا استعمال کیسے کریں (اور سیکیورٹی کے خطرات)

بغیر پاس ورڈ کے MySQL کا استعمال کیسے کریں (اور سیکیورٹی کے خطرات)

ان کا کہنا ہے کہ بہترین پاس ورڈ وہ ہے جسے آپ کو یاد رکھنے کی ضرورت نہ ہو۔ MySQL کے معاملے میں یہ پلگ ان کی بدولت ممکن ہے۔ auth_socket اور ماریا ڈی بی کے لیے اس کا ورژن - unix_sket.

یہ دونوں پلگ ان بالکل نئے نہیں ہیں؛ اسی بلاگ میں ان کے بارے میں بہت کچھ کہا گیا ہے، مثال کے طور پر اس مضمون میں auth_socket پلگ ان کا استعمال کرتے ہوئے MySQL 5.7 میں پاس ورڈ کیسے تبدیل کریں۔. تاہم، یہ دیکھتے ہوئے کہ MariaDB 10.4 میں نیا کیا ہے، میں نے دریافت کیا کہ unix_socket اب بطور ڈیفالٹ انسٹال ہے اور تصدیق کے طریقوں میں سے ایک ہے ("ایک"، کیونکہ ماریا ڈی بی 10.4 میں ایک سے زیادہ پلگ ان تصدیق کے لیے ایک صارف کے لیے دستیاب ہے، جو دستاویز میں وضاحت کی گئی ہے۔ ماریا ڈی بی 10.04 سے "توثیق").

جیسا کہ میں نے کہا، یہ خبر نہیں ہے، اور جب ڈیبین ٹیم کے تعاون سے .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)

ماریا ڈی بی کے لیے .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)

آفیشل پرکونا ریپوزٹری کے .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 معلوم کرنے کی اجازت دیتا ہے۔ اور پھر اسے پہلے سے ہی اس uid سے منسلک صارف نام مل جاتا ہے۔

یہاں صارف "vagrant" کے ساتھ ایک مثال ہے:

vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Access denied for user 'vagrant'@'localhost'

چونکہ MySQL میں کوئی "vagrant" صارف نہیں ہے، ہمیں رسائی سے انکار کر دیا گیا ہے۔ آئیے ایسا صارف بنائیں اور دوبارہ کوشش کریں:

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

نیا تبصرہ شامل کریں