كيفية السيطرة على أمان MongoDB الخاص بك

القراصنة يصبحون أكثر تطوراً، ويعرفون كيفية استغلال الثغرات. إذا كانت لديك بيانات حساسة في قاعدة بيانات MongoDB الخاصة بك، فمن الأهمية بمكان أن تأخذ الأمن بجدية. ولكن كيف؟ لا داعي للقلق! هذا البرنامج التعليمي يغطي كل ما تحتاج!

في هذا البرنامج التعليمي، ستتعلم كيفية حماية قواعد بيانات MongoDB الخاصة بك وصدها عن القراصنة من خلال إعداد تدابير أمنية.

استمر في القراءة وابدأ في التحكم في أمان MongoDB الخاص بك!

الشروط المسبقة

  • سيكون هذا البرنامج التعليمي عرضًا عمليًا. لمتابعة الخطوات، تأكد من أن لديك ما يلي:
  • A non-root user with sudo privileges.

إنشاء مستخدم إداري مخصص

MongoDB ليس لديه أي نظام مصادقة مدمج. افتراضيًا، أي شخص لديه وصول إلى قاعدة البيانات لديه امتيازات إدارية كاملة — وهو أمر خطير للغاية! كيفية تأمين قاعدة البيانات الخاصة بك؟ ستقوم بإنشاء مستخدم يمتلك امتيازات إدارية وتقفل القواعد بيانات إلى هذا المستخدم الإداري.

هذه الإعدادات تتيح لك توفير نقطة واحدة لوصول المستخدم بامتيازات إدارية مع تقييد ما يمكن كل مستخدم فعله داخل قاعدة البيانات. على سبيل المثال، يجب أن يكون لدى المطورين وصولًا فقط للقراءة إلى قواعد البيانات، بينما يمكن للمسؤولين إنشاء وتحرير البيانات.

1. افتح الطرفية الخاصة بك وقم بتشغيل الأمر mongo أدناه دون أي وسيط. يتيح لك هذا الأمر الاتصال بواجهة سطر الأوامر الخاصة بـ MongoDB كمستخدم إداري افتراضي.

هذا المستخدم الإداري قوي حيث يحتوي على وصول كامل للقراءة/الكتابة إلى جميع قواعد البيانات على الخادم، ويفضل تجنب استخدام هذا المستخدم للعمل اليومي.

mongo

ستحصل على تحذير يقول لم يتم تمكين التحكم في الوصول بعد…، كما هو موضح أدناه.

يشير هذا التحذير إلى أن أي شخص يمكنه الوصول إلى خادم MongoDB يمكنه أداء الإجراءات التي يرغبون فيها مع قواعد البيانات. تشمل هذه الإجراءات على سبيل المثال ولكن لا تقتصر على حذف وإسقاط وتحديث القواعد البيانية.

يظهر هذا التحذير لأنك لم تمكّن التحكم في الوصول بعد. لا تقلق حول ذلك، في الوقت الحالي. ستتعلم كيفية تمكين التحكم في الوصول في القسم التالي.

Connecting to your MongoDB shell

2. فيما بعد، قم بتشغيل الأمر show dbs لعرض جميع قواعد البيانات على الخادم، بما في ذلك قواعد البيانات admin التي لا يفترض أن يراها مستخدم عادي.

show dbs
Showing all databases on the server

٣. قم بتشغيل الأمر use admin أدناه للتبديل إلى قاعدة البيانات الإدارية حيث يكون تركيزك على إنشاء مستخدم إداري مخصص. يقوم هذا الأمر بتغيير سياق قاعدة البيانات الحالي الخاص بك لاستخدام قاعدة البيانات الإدارية، كما هو موضح أدناه.

تستخدم MongoDB قاعدة بيانات الإدارة لتخزين قواعد التحكم في الوصول وتوفير المصادقة المدمجة وأسماء المستخدمين وكلمات المرور للمستخدمين وأدوارهم. لا يمكنك حذف أو إعادة تسمية قاعدة البيانات الإدارية لأنها ضرورية لوظائف قاعدة البيانات.

use admin
Switching to the admin database

٤. الآن، قم بنسخ ولصق الكود أدناه إلى قندرة mongo واضغط على Enter. يقوم هذا الكود بإنشاء مستخدم يُدعى AdminATA، بكلمة مرور LDWbPf6Fy9Ezs3Mv، ولكن يمكنك استخدام بيانات اعتماد مختلفة كما تفضل.

هذا المستخدم الجديد له وصول قراءة/كتابة (readWriteAnyDatabase) إلى جميع قواعد البيانات ووصول إداري إلى جميع المجموعات. ولكن لدى هذا المستخدم بلا ضوابط إسقاط/حذف قاعدة بيانات ولا يمكنه إسقاط أو تغيير الامتيازات للمستخدمين الآخرين.

بعد تشغيل الأمر وإذا واجهت خطأ، قم بإعادة التحقق من الكود الخاص بك وحاول مرة أخرى.

# تُنشئ الدالة db.createUser() مستخدمًا جديدًا في قاعدة البيانات الحالية، بالامتيازات المحددة من قبل الأدوار.
db.createUser(
{
# يتم تحديد اسم المستخدم AdminATA، لكن يمكنك إدخال أي اسم مستخدم تفضله
user: "AdminATA",
# الدالة passwordPrompt() هي دالة مساعدة عالمية
# التي تخبر واجهة سطر MongoDB بطلب كلمة مرور للمستخدم AdminATA.
pwd: passwordPrompt(),
# يتم تحديد الأدوار التي ترغب في منحها لمستخدم AdminATA الخاص بك.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. عندما يُطلب منك، قم بتقديم كلمة مرور آمنة كما هو موضح أدناه، واضغط على Enter.

Providing a secure password

أدناه، يمكنك رؤية رسالة تمت إضافة المستخدم بنجاح. يؤكد هذا الإخراج أنك قمت بإنشاء مستخدم بامتيازات إدارية بنجاح وقمت بتقييدها بأدنى الامتيازات المطلوبة.

في هذه النقطة، لديك بالفعل مستخدم إداري يُسمى AdminATA يمكنه القيام بكل ما تحتاجه في قاعدة البيانات دون منح الوصول للجميع.

Verifying Successful Admin User Creation in MongoDB

6. في النهاية، قم بتشغيل الأمر exit للخروج من واجهة سطر مونجو.

exit
Leaving the mongo shell

إضافة أمان عن طريق تمكين المصادقة

الآن بمجرد وجود مستخدم إداري، ستقوم بإضافة طبقة أمان إضافية عن طريق تمكين المصادقة. من خلال ذلك، يتم منح وصول إلى قاعدة البيانات للمستخدمين الذين يمتلكون بيانات اعتماد صحيحة فقط.

المصادقة تشير إلى عملية التحقق من صحة الاتصال، عادةً من خلال توفير اسم مستخدم وكلمة مرور أو باستخدام رمز تحقق. تضمن المصادقة أنك الشخص الذي تقول أنك عليه وليس محتالًا يحاول الوصول إلى الموارد.

1. قم بتمكين المصادقة عن طريق تحرير ملف تكوين MongoDB باستخدام التعليمات التالية ، واحفظ التغييرات:

  • افتح ملف /etc/mongod.conf في محرر النص المفضل لديك. يحتوي ملف /etc/mongod.conf على تكوين عنقدتك MongoDB.
  • ابحث عن الدليل #security وقم بفك التعليق عنه بإزالة الرمز # أمام الدليل ، كما هو موضح أدناه. يخبر هذا الدليل MongoDB بالبحث عن إعداد الأمان في ملف التكوين.
  • أضف سطرًا جديدًا أسفل الدليل security يقول authorization: enabled. لاحظ أن سطر authorization: enabled متباعد (لديه مسافتين في البداية) ، كما هو موضح أدناه.
Adding the authorization parameter

2. بعد ذلك ، قم بتشغيل الأمر التالي من systemctl لإعادة تشغيل خادم MongoDB لتفعيل التغييرات.

sudo systemctl restart mongod

3. في الختام ، قم بتشغيل الأمر أدناه لعرض حالة خدمة MongoDB الخاصة بك.

sudo systemctl status mongod

أدناه، يمكنك رؤية سطر يقول Active: active (running) بنص أخضر، مما يشير إلى تشغيل خادم MongoDB الخاص بك واستعداده لقبول الاتصالات.

Viewing MongoDB Service Status

اختبار ما إذا كانت المصادقة تعمل

لقد قمت للتو بتمكين المصادقة، ولكن كيف تعرف أنها تعمل؟ ستقوم بتسجيل الدخول إلى المستخدم الإداري لاختبار والتأكد من أن المصادقة الخاصة بك تعمل عن طريق عرض قواعد البيانات.

1. قم بتشغيل الأوامر التالية للوصول إلى القشرة mongo كما فعلت في قسم “إنشاء مستخدم إداري مخصص” (الخطوة الأولى).

mongo

كما يمكنك رؤية أدناه، لم تعد تتلقى تحذير Access control is not enabled… حول تمكين المصادقة. بدلاً من ذلك، ستحصل على رسالة تخبرك بإصدار خادم MongoDB وقشرة MongoDB.

Connecting to the MongoDB Shell

2. بعد ذلك، أعد تشغيل الأمر show dbs للتحقق مما إذا كنت لا تزال تستطيع الوصول إلى قاعدة البيانات.

show dbs

يجب على الأمر أن يظهر لك جميع قواعد البيانات، بما في ذلك قاعدة البيانات الإدارية. ولكن كما ترى أدناه، لا يظهر شيء. لماذا؟ عرض قائمة قواعد البيانات هو امتياز محفوظ للمستخدمين الإداريين فقط.

لم تقم بالمصادقة على قشرة mongo الخاصة بك لاستخدام دور الإدارة، لذلك لم تكن مخولًا بعرض قائمة قواعد البيانات.

Listing All Databases (empty)

مع المصادقة الممكنة، ستفشل الاتصال إذا حاول شخص ما الوصول إلى قاعدة البيانات باستخدام سلسلة اتصال لا تحتوي على بيانات اعتماد صحيحة.

توثيق سلاسل الاتصال هو جزء أساسي من أمان MongoDB، ويجب عليك تنفيذ التوثيق في جميع طبقات التطبيق. يجب أن تستخدم جميع الاتصالات بـ MongoDB سلسلة توثيق تتألف من بيانات اعتماد. تشمل هذه البيانات اسم المستخدم وكلمة المرور الصحيحة.

3. قم بتشغيل الأمر exit للخروج من واجهة سطر MongoDB.

exit

4. الآن، قم بتشغيل الأمر أدناه لتسجيل الدخول إلى واجهة سطر MongoDB باستخدام اسم المستخدم الذي أنشأته للمستخدم الإداري الذي أنشأته مؤخرًا (-u) وكلمة المرور (-p). قم بتبديل AdminATA بالاسم الذي قمت بإنشائه في قسم “إنشاء مستخدم إداري مخصص” (الخطوة الرابعة).

يُخبر المعلمة --authenticationDatabase واجهة سطر MongoDB بالتحقق من الهوية ضد قاعدة البيانات admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. قدم كلمة المرور الخاصة بالمستخدم الإداري عند الطلب.

Providing administrative password
logging into the MongoDB shell as an administrator

6. في النهاية، قم بإعادة تشغيل الأمر show dbs لمحاولة رؤية ما إذا كنت تستطيع عرض جميع قواعد البيانات.

show dbs

في هذا الوقت، كما ترون أدناه، يظهر قائمة قواعد البيانات لأنك مستخدم إداري.

Listing all databases as admin user

الختام

في هذا البرنامج التعليمي، تعلمت كيفية الاتصال بإنشاء مستخدم إداري وتمكين التوثيق. لقد تعلمت أن تتحكم في أمان MongoDB الخاص بك وتفرض قيودًا على من يمكنه الوصول إلى قواعد البيانات على الخادم الخاص بك.

في هذه المرحلة، يمكنك أن تقرر من يمكنه الوصول إلى ما. فما الذي ينتظرك بعد؟ ربما تتعلم كيفية استخدام حاوية MongoDB بشكل آمن؟

Source:
https://adamtheautomator.com/mongodb-security/