افضل 7 طرق لحماية " قاعدة البيانات MySQL "
كيف يمكنك التأكد من أن قاعدة بيانات MSQL الخاصة بك في مأمن من المتسللين؟
اتبع نهج الحزام والأقواس باستخدام قائمة التحقق المفيدة هذه.
يضع مختبرو اختراق المبتدئين ، على وجه الخصوص ، تركيزًا أقل على أمان
قاعدة البيانات بشكل عام. لا يمكن أن يكون التطبيق الذي لا يحتوي على
تكوين قاعدة بيانات واختبارات الأمان آمنًا. ربما كنت تستخدم بالفعل برنامج MySQL ،
وهو نظام لإدارة قواعد البيانات ، فكيف يمكنك جعله أكثر أمانًا؟ فيما يلي سبع خطوات عليك اتباعها.
افضل 7 طرق لحماية امان قاعدة البيانات MySQL
1. استخدم نفق SSH بدلاً من الاتصال عن بعد
تعمل خدمة MySQL على المنفذ 3306 افتراضيًا. عند تثبيت MySQL ،
سترى أن المنفذ 3306 في وضع الاستماع لجميع الاتصالات.
كما هو الحال ، فإن منفذ MySQL مفتوح للعالم الخارجي. لهذا السبب يجب
عليك تعيين خدمة MySQL للاستماع إلى العنوان المحلي فقط.
نظرًا لأن الخوادم تعمل عادةً على توزيعة Linux ، فإن الأمثلة أدناه تستند
إلى توزيعة دبيان. الملف الذي تريد استخدامه لنفق SSH بدلاً من الاتصال عن بُعد
ولإغلاق المنفذ الافتراضي للعالم الخارجي هو /etc/mysql/my.cnf .
في هذا الملف ، تحتاج إلى فتح حقل يسمى [mysqld] وكتابة الأمر التالي:
[mysqld]
bind-address=127.0.0.1
بعد هذه العملية ، لا تنس حفظ هذا الملف وإعادة تشغيل الخدمة بالأمر التالي:
sudo systemctl restart mysqld
# or
sudo systemctl restart mariadb.service
باستخدام هذا ، ستستمع خدمة MySQL إلى العنوان المحلي فقط.
إذا كنت تستخدم MariaDB ، فيمكنك أيضًا فحص
/etc/mysql/mariadb.conf.d/50-server.cnf و
التحقق مما إذا كان هناك تعريف لعنوان الربط :
The MarlaDB conf1guration file
The MariabB/MysQL tools read configuration files in the following order:
0. "7etc/mysql/my . cnf symlinks to this file, reason why all the rest 1s read.
etc/mysqL/marladD.cht tnis tlle to set gtoDal detaults,
2. etc/mysqL/conf.d/* . cnf to set global optionsS.
S etcysqtidrdaD. Cot.07*.C toset MarldDB-Onty optlons.
4 / my . CnTLoSet user-speCLTIC OptionsS
f the same opt10n 1s defined multiple tmes, the last one witt apply.
One can use all long options that the program supports.
Run program with --hep to get a list of avallable options and with
--print-defaults to see wnich 1t wouta actuatly understand and use
If you are new to MariaDB, check out https://mariadb .com/kb/en/basic-mariadb-articles/
This group 1s read both by the client and the server
use it tor options that affect everything
client-server]
Port or socket lOcation where to connect
port = 3306
ocket = /run/mysqld/mysqld. sock
mysqld]
1nd-address=127, 0.0.1
Import all.cnf files from configuration directory
includedir /etc/mysql/conf.d/
included ir /etc/my sql/mariadb.conf.d/
الآن بعد أن تم تعيين عنوان الربط على 127.0.0.1 ، وهو مضيف محلي ،
يمكنك تشغيل فحص Nmap والتحقق من الإخراج:
nmap localhost
Starting Nmap 7.92 https://nmap.org) at 2022-11-20 09:55 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Dther addresses for localhost (not scanned) : ::1
Not shown: 999 closed tcp ports (reset )
PORT
3306/tcp open mysq
STATE SERVICE
Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds
يمكنك رؤية منفذ MySQL حيث يمثل 127.0.0.1 المضيف المحلي الذي تراه.
يمكنك محاولة تغيير عنوان الربط مرة أخرى للتأكد من أن هذا يعمل:
[mysqld]
bind-address=127.5.5.1
--
#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld. sock
[mysqld]
bind-address=127.5.5.1
#bind-address=127 .0.0.1
ثم احفظ الملف /etc/mysql/my.cnf وأعد تشغيل خدمة MySQL.
إذا قمت بإجراء فحص Nmap مرة أخرى في هذه المرحلة ،
فلن ترى هذا العنوان الملزم على المضيف المحلي:
nmap LOcauhoSt
Starting Nmap 7.92 ( https://nmap.org) at 2022-11-20 10:02 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
0ther addresses for localhost (not scanned): ::1
ALL 1000 scanned ports on localhostt (127.0.0.1) are in 1gnored states.
Not shown: 1000 closed tcP ports (reset)
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
بمجرد أن تعرف أن هذا يعمل ، ارجع إلى الإعدادات من الخطوة الأولى وقم
بتعيين عنوان الربط مرة أخرى على 127.0.0.1 وحفظه مرة أخرى.
مقالات ذات صلة :
2. قم بإعداد حاجز الوصول إلى الملفات المحلية
يمكن لـ MySQL التواصل مع نظام الملفات المحلي. باستخدام الاستعلامات ،
يمكنك رؤية محتوى النص في نظام الملفات المحلي أو نسخ نتيجة الاستعلام على قرص.
لمنع المهاجمين الضارين من استخدام هذه الميزة ، يجب منع MySQL من الاتصال بنظام الملفات المحلي.
يمكنك استخدام وظيفة تسمى local-infile لاتخاذ الاحتياطات
. على سبيل المثال ، تخيل أن لديك ملفًا باسم "/etc/secretfile.txt"
ولديك كلمة مرور في هذا الملف. إذا كانت قيمة دالة local-infile في
ملف /etc/mysql/my.cnf هي 1 ، فسيكون الوصول مفتوحًا.
حتى تتمكن من الوصول إلى ملف secretfile.txt.
# This group is read both by the client and the server
#use it for options that affect everything
#
[client-server]
#Port or socket location where to connect
# port = 3306
#socket = /run/mysqld/mysqld. sock
mysqld]
bind-address=127.0.0.1
local-infile=1 # ON
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
قيمة دالة local-infile هي 1. أعد تشغيل قاعدة بيانات MySQL حتى تحدث التغييرات.
الآن ، اتصل بـ MySQL باستخدام الأمر التالي وتحقق مما إذا كان بإمكانك رؤية ملف secretfile.txt:
SELECT LOAD_FILE("/etc/secretfile.txt");
--
MariaDB [(none)]> SELECT LOAD_FILE("/etc/secret file. txt ");
LOAD_FILE( "/etc/secret file. txt ") I
t----=--------=---=---=----=----+
My Secret Pass: PaSsWorD123
1 row in set (0.000 sec)
MariaDB [ (none ) ]»
ليس من الصعب التقاط المعلومات في أي ملف على جهاز الكمبيوتر الخاص بك.
لحل هذه المشكلة ، قم بتغيير قيمة الملف المحلي في ملف /etc/mysql/my.cnf كما يلي:
[mysqld]
local-infile=0
--
This group is read both by the client and the server
use it for options that affect everything
Iclient-server]
# Port or socket location where to connect
# port = 3306
#socket = /run/mysqld/mysqld. sock
Lmysqld]
bind-address = 127 .0.0.1
local-infile=0 # OFF
Import all .cnf files from configuration directory
! includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
INSERT
أعد تشغيل خدمة MySQL. أعد الاتصال بـ MySQL وكرر الخطوة السابقة ؛
يجب ألا تكون قادرًا على رؤية محتويات الملف.
إذا لم يكن لدى المستخدمين بالفعل أذونات القراءة والكتابة على الملفات المحلية ،
فلن يتمكنوا من رؤية هذا الملف. ومع ذلك ، لا يزال هناك شيء يجب عليك التحقق
منه في اختبارات الاختراق وأمان قاعدة البيانات.
3. تعيين مستخدمي التطبيق وكلمات المرور
يجب أن يكون مستخدم إدارة قاعدة البيانات ومستخدم MySQL الذين
يصلون إلى قاعدة البيانات مختلفين عن بعضهما البعض. بمعنى آخر ،
ربط التطبيقات بـ MySQL بمستخدمي الجذر أمر خطير للغاية. إذا أمكن ،
حدد مستخدمي التطبيقات التي لا تقوم بعمليات التحديث أو الإدراج بشكل منفصل.
شيء آخر يجب مراعاته في هذه المرحلة هو كلمات مرور المستخدم. كما هو الحال
في كل مجال تقريبًا ، يجب أن تكون كلمات مرور مستخدمي MySQL معقدة وغير متوقعة.
إذا كنت بحاجة إلى مساعدة في هذا الأمر ، فهناك أنظمة رائعة لإنشاء كلمات المرور يمكنك استخدامها.
4. حذف المستخدمين المجهولين
عند تثبيت MySQL افتراضيًا ، يظهر بعض المستخدمين المجهولين.
تحتاج إلى حذف هذه وحظر وصولهم. بالنسبة لخادم MySQL آمن ،
يجب ألا تحصل على أي استجابة كنتيجة للاستعلام التالي:
SELECT * FROM mysql.user WHERE USER="";
# Example Output
Empty set (0.001 sec)
إذا كانت هناك أية نتائج ، فيجب حذف هؤلاء المستخدمين المجهولين.
على سبيل المثال ، إذا كان هناك حساب مجهول يسمى "anonuser" في بيئة تسمى "localhost" ،
فسيتعين عليك استخدام أمر مثل ما يلي لحذف هذا الحساب:
DROP USER 'anonuser'@'localhost';
5. تحقق من أذونات الملفات المحلية في MySQL
تخيل أنك مسؤول قاعدة بيانات وتريد العودة إلى البيانات من أسبوع مضى.
في هذه الحالة ، قد تضطر إلى الاتصال بخادم قاعدة البيانات عبر SSH
وتغيير ملفات MySQL التي تريدها. أثناء القيام بذلك ، ربما تكون قد استخدمت
امتيازات المستخدم الجذر لنظام Linux ؛ وهذا يعني أن ملكية وأذونات
ملفات البيانات يمكن أن تتغير. أنت لا تريد ذلك.
انظر إلى الدليل / var / lib / mysql للتحقق من الأذونات الممنوحة.
ما تحتاج إلى التحقق منه هنا هو ما إذا كان مالك جميع الملفات هو مستخدم MySQL.
الأمر التالي سيفي بالغرض:
sudo ls -al /var/lib/mysql
--
Is -al/var/lib/mysql
total 123388
4096 Nov 20 13:26
4096 Oct 16 07:48
drwxr-xr-x_5 mysql mysql
drwxr-xr--x 70 root root
-rw-rw--- 1 mysql mysq
- rw-rw---- 1 mysql mysq
- rw- rw---- 1 mysql mysql
466944 Nov 20 13:26 aria_log.00000001
52 Nov 20 13:26 aria_log_control
9 Nov 20 13:26 ddl_recovery. LOg
0 Nov 20 07:36 debian-10.6.flag
-rw-r--r-* 1 root r0ot
-rw-rw---* 1 mysqt mysq
-rw-rw---- 1 mysql mysql 125882912 NoV 20 13:26 ibdatal
- rw-rw- --- 1 mysql mysql 100663296 Nov 20 13:26 ib_logfile0
-rw-rw---- 1 mysql mysql 12582912 Nov 20 13:26 ibtmp1
rW=rw-- 1 mysqt mysq
drwx- ----- 2 mysql mysql
-rw-rw--- 1 root root
drwx-- ---- 2 mysql mysql
drwx----=- 2 mysql mysql
976 Nov 20 13:2o 10buffer-pool
O Nov 20 08:05 multi-master . info
4096 NoV 20 08:05 mysql
16 Nov 20 08:05 my sql_upgrade_info
4096 Nov 20 08:05 performance_ schema
12288 Nov 20 08:05 sys
يجب أن تكون أذونات القراءة والكتابة للملفات مخصصة فقط لمستخدم MySQL.
لا ينبغي أن يكون لدى أي مستخدمين آخرين أي أذونات.
6. استخدم MySQL SSL
التفكير في مثال ملموس هو أفضل طريقة لفهم استخدام MySQL و SSL.
تخيل أن أحد الخوادم في منطقة ABC ، حيث يوجد العديد من الخوادم المختلفة ،
تم الاستيلاء عليه من قبل قراصنة ضارين. سيجري المتسللون فحصًا داخليًا
في منطقة ABC. بهذه الطريقة ، يقومون بجمع المعلومات حول الخوادم.
إذا اكتشفوا خادم MySQL أثناء هذه العملية ، فيمكنهم تنفيذ هجوم
Man-in-the-Middle (MitM) على الخادم الهدف ، مما يعني أنه
يمكنهم سرقة معلومات جلسة التطبيقات والمستخدمين المتصلين بهذا الخادم.
واحدة من أفضل الطرق لتجنب ذلك هي تمكين SSL على خادم MySQL .
7. ملفات السجل والتاريخ
يمكنك استخدام سجلات MySQL لتحليل الأخطاء والعثور عليها. يمكنك
تعديل مكان حفظ هذه السجلات عن طريق إدخال my.cnf على النحو التالي:
# /etc/mysql/my.cnf
[mysqld]
log =/var/log/mylogfiles
يمكنك تغيير اسم أو موقع mylogfiles كما يحلو لك. هناك ملف آخر تحتاج
إلى التحقق منه. عندما تتصل بخادم MySQL في محطة لينكس وتكتب
أوامر مختلفة ، يتم حفظ هذه الاستعلامات في ملف mysql_history.
إذا قمت بتشغيل الأمر التالي ، يمكنك رؤية الاستعلامات التي تستخدمها في محطة MySQL:
cat ~/.mysql_history
تحتاج إلى حذف محتويات هذا الملف إذا كنت لا تريد إعطاء معلومات حول نوع
الاستعلامات التي تجريها داخل الخادم. استخدم الأمر التالي لحذف محتويات الملف:
sudo echo "cleaned" > ~/.mysql_history
يمكنك بعد ذلك التحقق من محتويات الملف مرة أخرى.
كل من يملك قاعدة البيانات يملك النظام
بغض النظر عن الصناعة التي تعمل فيها ، تحتوي قاعدة البيانات الخاصة
بك دائمًا على معلومات مهمة. يمكن أن يكون هؤلاء العملاء والحسابات المصرفية
وكلمات المرور الخاصة بك. يعرف المهاجمون الخبيثون أهمية وقيمة هذه الأشياء.
يحتاج مطورو ومسؤولو قواعد البيانات على الأقل إلى معرفة الأساسيات التي
سيواجهونها في اختبارات الاختراق من أجل التغلب على المتسللين.