الأمن السيبراني

أساسيات أمان MySQL وMariaDB على Debian وUbuntu: الشبكة والحسابات والصلاحيات وTLS

أبقِ MariaDB أو MySQL على localhost، ونظّف الحسابات الافتراضية، وامنح كل تطبيق مستخدماً بأقل صلاحيات، واشترط TLS للوصول عن بُعد، واحمِ ملفات التفريغ.

تاريخ النشر
مدة القراءة
6 دقائق
الكاتب
SKYLINE Engineering

يحتوي خادم قاعدة البيانات على VPS عادةً على أثمن البيانات في الجهاز، وكثيراً ما يُضبط مرة واحدة ثم يُنسى. والإعدادات الافتراضية في حزم Debian وUbuntu الحالية معقولة، لكن بضع عادات تصنع الفرق بين قاعدة بيانات مثبّتة فحسب وأخرى آمنة للتشغيل المستمر: أبعِدها عن الشبكة، ونظّف الحسابات الأولية، وامنح التطبيقات صلاحيات ضيقة، وشفّر أي حركة تغادر الخادم.

ما الذي تثبّته توزيعتك

  • يأتي Debian 12 (bookworm) بالإصدار 10.11 من MariaDB، ويأتي Debian 13 (trixie) بالإصدار 11.8 (متتبع الحزم). ولا يتضمن أي منهما خادم MySQL من Oracle في أرشيفه الرئيسي.
  • يوفر Ubuntu 22.04 و24.04 الإصدار 8.0 من MySQL، ويوفر Ubuntu 26.04 الإصدار 8.4. كما يتوفر MariaDB بالإصدارات 10.6 و10.11 و11.8 على الترتيب (packages.ubuntu.com).
dpkg -l | grep -E 'mariadb-server|mysql-server'
mariadb --version 2>/dev/null || mysql --version

الخطوة الأولى: أبقِها على localhost

إذا كان التطبيق يعمل على الخادم نفسه فلا ينبغي أن تستمع قاعدة البيانات على عنوان عام. وتضبط حزم Debian وUbuntu القيمة bind-address = 127.0.0.1: لـ MariaDB في الملف /etc/mysql/mariadb.conf.d/50-server.cnf، ولـ MySQL على Ubuntu في الملف /etc/mysql/mysql.conf.d/mysqld.cnf الذي يربط أيضاً منفذ X Protocol بـ localhost عبر mysqlx-bind-address. تحقق مما يستمع فعلاً:

sudo ss -tlnp | grep -E ':3306|:33060'

المطلوب أن ترى 127.0.0.1:3306 لا 0.0.0.0:3306. وإذا كان لا بد من اتصال خادم آخر فاربط القاعدة بعنوان خاص لا عام، واسمح بالمنفذ 3306 من ذلك الخادم فقط في جدار الحماية على الخادم وفي أي جدار حماية سحابي، وأنشئ المستخدم لذلك المضيف وحده، واشترط TLS (الخطوة الرابعة).

الخطوة الثانية: نظّف الحسابات الأولية

يوفر المشروعان سكربتاً يضبط كلمة مرور الجذر أو يتحقق منها، ويحذف حسابات الجذر التي يمكن الوصول إليها من مضيفات أخرى، ويحذف المستخدمين المجهولين، ويحذف قاعدة البيانات test التي يستطيع المستخدمون المجهولون الوصول إليها (mariadb-secure-installation وmysql_secure_installation):

# MariaDB
sudo mariadb-secure-installation
# MySQL
sudo mysql_secure_installation

في Debian وUbuntu يُصادَق على root@localhost عبر نظام التشغيل لا بكلمة مرور؛ إذ يستخدم MariaDB الإضافة unix_socket، ويستخدم MySQL في Ubuntu الإضافة auth_socket. ولهذا يفتح الأمر sudo mariadb أو sudo mysql جلسة جذر دون كلمة مرور، وهذا آمن لأنه يتطلب صلاحيات الجذر على الخادم. أبقِ الأمر كذلك، ولا تسمح أبداً لتطبيق بالاتصال بمستخدم الجذر في قاعدة البيانات. ثم راجع الحسابات الموجودة:

SELECT User, Host FROM mysql.user;

احذف الحسابات التي لا تعرفها، وراجع أي حساب قيمة المضيف فيه %، أي أي عنوان.

الخطوة الثالثة: مستخدم بأقل الصلاحيات لكل تطبيق

إرشادات الأمان في MySQL صريحة: لا تمنح صلاحيات أكثر من اللازم، ولا تمنح صلاحيات لكل المضيفات أبداً، ولا تمنح أحداً غير الجذر وصولاً إلى جدول mysql.user. وعملياً امنح كل تطبيق قاعدة بيانات ومستخدماً خاصين به، مقيّدين بتلك القاعدة:

CREATE DATABASE shop;
CREATE USER 'shop_app'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop_app'@'localhost';

-- optional: a separate account for schema migrations
CREATE USER 'shop_migrate'@'localhost' IDENTIFIED BY 'another-long-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop_migrate'@'localhost';

SHOW GRANTS FOR 'shop_app'@'localhost';

لا تمنح حساب تطبيق صلاحيات ON *.* أبداً. واحفظ كلمة مروره في ملف إعداد لا يقرؤه إلا مستخدم التطبيق، لا في مجلد ويب يقرؤه الجميع، واستخدم قيمة عشوائية طويلة (مثلاً من openssl rand -base64 32).

الخطوة الرابعة: شفّر الاتصالات التي تغادر الخادم

الاتصالات عبر واجهة loopback أو المقبس المحلي لا تعبر الشبكة، أما ما سواها فاستخدم له TLS:

  • MariaDB 11.4 وما بعده، ومنه الإصدار 11.8 في Debian 13، يفعّل TLS تلقائياً؛ فبحسب توثيق MariaDB ينشئ الخادم الشهادات عند الإقلاع ويحفظها في الذاكرة، ويتحقق العملاء من شهادة الخادم افتراضياً مع إضافات المصادقة المناسبة. وقد تفضّل مع ذلك شهاداتك الخاصة في بيئة الإنتاج.
  • إصدارات MariaDB الأقدم، مثل 10.11 في Debian 12، تحتاج إلى ضبط ssl_cert وssl_key وssl_ca في إعداد الخادم.
  • MySQL يستخدم الإعدادات الثلاثة نفسها، ويجعل require_secure_transport=ON الاتصالات المشفرة إلزامية (الاتصالات المشفرة في MySQL).

وعلى مستوى الحساب يفرض الخيار REQUIRE SSL استخدام TLS لذلك المستخدم، وهو مناسب للمستخدم الذي يتصل من خادم آخر:

CREATE USER 'report'@'10.0.0.5' IDENTIFIED BY 'long-random-password' REQUIRE SSL;
GRANT SELECT ON shop.* TO 'report'@'10.0.0.5';

-- from the client, check that the session is encrypted
SHOW STATUS LIKE 'Ssl_version';

الخطوة الخامسة: التحديث وحماية ملفات التفريغ

ثبّت تحديثات قاعدة البيانات مع بقية النظام (sudo apt update && sudo apt upgrade) ثم أعد تشغيل الخدمة: sudo systemctl restart mariadb، أو mysql لخادم MySQL على Ubuntu. وتعامل مع النسخ الاحتياطية على أنها نسخ كاملة من قاعدة البيانات؛ فملفات التفريغ الناتجة عن mariadb-dump أو mysqldump تحتوي على كل الصفوف نصاً صريحاً، فاحفظها بصلاحيات مقيّدة، وشفّرها إذا غادرت الخادم، واختبر استعادتها.

أخطاء شائعة

  • تغيير bind-address إلى 0.0.0.0 وإنشاء مستخدمين بمضيف % «لكي يعمل الوصول عن بُعد».
  • تطبيق يتصل بحساب الجذر، أو حساب واحد تتشاركه عدة تطبيقات.
  • أداة ويب لإدارة قاعدة البيانات يمكن الوصول إليها من الإنترنت كله.
  • نشر المنفذ 3306 من حاوية Docker، مما يتجاوز قواعد ufw.

ما الذي ينبغي فعله

  • شغّل ss -tlnp وتأكد من أن قاعدة البيانات تستمع فقط على localhost أو على عنوان خاص.
  • شغّل سكربت التثبيت الآمن، وراجع mysql.user، واحذف الحسابات المجهولة وحسابات الجذر البعيدة والحسابات غير المعروفة.
  • امنح كل تطبيق مستخدماً خاصاً مقيّداً بقاعدة بياناته، ولا تستخدم الجذر في إعدادات أي تطبيق.
  • اشترط TLS لكل حساب يتصل من مضيف آخر.
  • حافظ على تحديث الخادم وأعد تشغيله بعد التحديثات، واحمِ ملفات التفريغ واختبرها.

المصادر

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

صفحة الكاتب
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Cybersecurity for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.