مقدمه
MongoDB یکی از محبوبترین پایگاههای داده NoSQL و سندمحور (Document-Oriented) است که به دلیل سرعت، انعطافپذیری و مقیاسپذیری بالا در بسیاری از پروژههای وب و سازمانی استفاده میشود. با این حال، نصب پیشفرض MongoDB برای استفاده در محیطهای عملیاتی (Production) به اندازه کافی ایمن نیست و در صورت پیکربندی نادرست، میتواند در معرض دسترسیهای غیرمجاز قرار گیرد.
در این آموزش یاد میگیرید چگونه یک سرور MongoDB را در Ubuntu 20.04 ایمنسازی کنید. در پایان این راهنما، احراز هویت کاربران را فعال کرده، دسترسیهای مدیریتی را محدود میکنید و تنظیمات امنیتی لازم را برای محافظت از پایگاه داده خود اعمال خواهید کرد.
پیشنیازها
برای انجام مراحل این آموزش به موارد زیر نیاز دارید:
- یک سرور Ubuntu 20.04
- نصب و راهاندازی MongoDB
- دسترسی به یک کاربر دارای دسترسی sudo
- آشنایی مقدماتی با خط فرمان لینوکس
گام اول — ایجاد کاربر مدیریتی
در ابتدای کار، به پوسته MongoDB متصل شوید:
mongo
اگر از نسخههای جدید MongoDB استفاده میکنید:
mongosh
به پایگاه داده admin بروید:
use admin
یک کاربر مدیریتی ایجاد کنید:
db.createUser({
user: "admin",
pwd: "رمزعبور_قوی",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" }
]
})
در صورت موفقیت، پیغام زیر نمایش داده میشود:
Successfully added user
از محیط MongoDB خارج شوید:
exit
گام دوم — فعال کردن احراز هویت (Authentication)
فایل تنظیمات MongoDB را باز کنید:
sudo nano /etc/mongod.conf
بخش زیر را پیدا کنید:
#security:
آن را به شکل زیر تغییر دهید:
security:
authorization: enabled
فایل را ذخیره کرده و خارج شوید.
اکنون سرویس MongoDB را ریستارت کنید:
sudo systemctl restart mongod
بررسی کنید سرویس بدون خطا اجرا شده باشد:
sudo systemctl status mongod
گام سوم — ورود با کاربر مدیریتی
اکنون اتصال بدون احراز هویت امکانپذیر نیست.
برای ورود از دستور زیر استفاده کنید:
mongo -u admin -p --authenticationDatabase admin
یا در نسخههای جدید:
mongosh -u admin -p --authenticationDatabase admin
پس از وارد کردن رمز عبور، وارد محیط MongoDB خواهید شد.
گام چهارم — ایجاد کاربران مخصوص پایگاه داده
بهتر است برنامهها با حساب مدیر به دیتابیس متصل نشوند.
ابتدا وارد پایگاه داده موردنظر شوید:
use mydatabase
سپس کاربر مخصوص برنامه را ایجاد کنید:
db.createUser({
user: "appuser",
pwd: "StrongPassword",
roles: [
{
role: "readWrite",
db: "mydatabase"
}
]
})
این کار باعث میشود برنامه تنها به همان دیتابیس دسترسی داشته باشد.
گام پنجم — محدود کردن دسترسی شبکه
اگر نیازی به اتصال از راه دور ندارید، MongoDB را فقط روی localhost اجرا کنید.
فایل تنظیمات را باز کنید:
sudo nano /etc/mongod.conf
مقدار bindIp را بررسی کنید:
net:
bindIp: 127.0.0.1
در صورتی که مقدار زیر وجود داشته باشد:
bindIp: 0.0.0.0
تمام کاربران شبکه قادر به اتصال خواهند بود که از نظر امنیتی توصیه نمیشود.
گام ششم — محافظت با فایروال
در صورت نیاز به اتصال از راه دور، فقط IPهای مجاز را در فایروال اجازه دهید.
نمونه:
sudo ufw allow from YOUR_IP_ADDRESS to any port 27017
سپس وضعیت قوانین را بررسی کنید:
sudo ufw status
گام هفتم — فعال کردن TLS/SSL
برای جلوگیری از شنود اطلاعات بین کلاینت و سرور، ارتباطات را رمزنگاری کنید.
ابتدا گواهینامه SSL تهیه کرده و سپس در فایل تنظیمات MongoDB بخش زیر را اضافه کنید:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
پس از ذخیره فایل:
sudo systemctl restart mongod
گام هشتم — غیرفعال کردن دسترسیهای غیرضروری
در محیطهای Production توصیه میشود:
- فقط کاربران موردنیاز ایجاد شوند.
- از نقشهای آماده MongoDB استفاده کنید.
- به کاربران مجوزهای حداقلی (Least Privilege) بدهید.
- کاربران قدیمی یا بدون استفاده را حذف کنید.
مشاهده کاربران:
show users
حذف کاربر:
db.dropUser("username")
گام نهم — بررسی وضعیت امنیتی
اطمینان حاصل کنید که احراز هویت فعال است:
db.runCommand({ connectionStatus: 1 })
همچنین وضعیت سرویس را بررسی کنید:
sudo systemctl status mongod
و لاگها را مشاهده کنید:
sudo journalctl -u mongod
جمعبندی
در این آموزش نحوه ایمنسازی MongoDB در Ubuntu 20.04 را فرا گرفتید. ابتدا یک کاربر مدیریتی ایجاد کردید، سپس احراز هویت را فعال نمودید و کاربران اختصاصی برای برنامهها ساختید. همچنین با محدود کردن دسترسی شبکه، تنظیم فایروال و استفاده از TLS، امنیت ارتباطات را افزایش دادید. رعایت این موارد باعث میشود سرور MongoDB شما در برابر بسیاری از حملات رایج مقاومتر باشد.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران