Mongodb

پیاده سازی الزامات امنیتی دیتابیس MongoDB – گام اول

مطالبی که در پیش رو داریم لیستی از چک لیست امنیتی و اقدامات امنیتی است که باید برای حفاظت از نصب MongoDB خود انجام داده و همواره به یاد داشته باشید.

این مطالب در چند گام مختلف ارائه خواهد شد

انتشار محتوای سایت ایران سایبر فقط با ذکر منبع رسمی مجاز است

این فصل به شما یک نمای کلی از انواع وظایفی را که باید برای ایجاد امنیت مناسب انجام دهید را ارائه می دهد. شناخت مقادیر متنوع و  احتمال جلوگیری از آسیب پذیری های امنیتی را می توان تا حدد بسیار زیادی بهبود  بخشید . آسیب پذیری های زیادی هستند  که به طور تصادفی یا عمدا مورد سوء استفاده قرار می گیرند و می توانند امنیت تنگاتنگی را که در سایر نقاط ایجاد کرده اند، تضعیف یا سرکوب کنند.
در گام اول مطالب گفته شده مرور کلی بر چک لیست های امنیتی را داریم و در گام های بعدی تخصصی تر بررسی خواهیم کرد . امیدوارم که توانسته باشیم گوشه ایی از معضلات امنیتی را بهبود بخشیده باشیم .

گام اول :

فعال سازیکنترل دسترسی و تأیید اعتبار – Authentication

  • کنترل دسترسی را فعال کنید و مکانیزم احراز هویت را مشخص کنید.

 می توانید از مکانیزم اعتبار سنجی MongoDB یا چارچوب موجود در آن استفاده کنید. احراز هویت مستلزم آن است که همه مشتریان و سرورها قبل از اینکه بتوانند به سیستم متصل شوند، اعتبار معتبری را ارائه دهند .

  • در استقرار دسته بندی شده، احراز هویت را برای هر سرور MongoDB جداگانه فعال کنید .

  • تأیید اعتبار را بررسی و فعال کنید.

پیکربندی کنترل دسترسی مبتنی بر نقش – Role-Based

  • ابتدا یک سرپرست کاربری ایجاد کنید و سپس اقدام به ایجاد کاربران دیگر کنید. 

  • ایجاد نقش هایی که دسترسی دقیق به مجموعه ای از نیازهای کاربران را تعریف می کنند.

  • از اصل کمترین امتیاز استفاده کنید سپس کاربران را ایجاد کرده و به آنها تنها نقش هایی که برای انجام عملیات خود نیاز دارند اختصاص دهید .

  • یک کاربر می تواند یک فرد یا یک برنامه کاربردی مشتری باشد.

  • کنترل دسترسی مبتنی بر نقش و مدیریت کاربران و نقشها را مشاهده و تایید کنید .

رمزگذاری ارتباطات

پیکربندی MongoDB جهت استفاده از TLS  برای تمام اتصالات ورودی و خروجی :

 از TLS  برای رمزگذاری ارتباط بین مولفه های mongod و mongos در استقرار MongoDB و همچنین بین همه برنامه ها و MongoDB استفاده کنید .

دقت داشته باشید MongoDB از کتابخانه های TLS / SSL بومی استفاده می کند :

Windows  =>   Secure Channel (Schannel)
Linux/BSD   =>  OpenSSL
macOS  =>  Secure Transport

رمزگذاری و محافظت از داده ها

 موتور ذخیره سازی Wired Tiger در Rest می تواند برای رمزگذاری داده ها در لایه ذخیره سازی پیکربندی شود .

اگر از رمزگذاری Wired Tiger در حالت rest استفاده نمیکنید ، داده MongoDB باید بر روی هر میزبان با استفاده از سیستم فایل، دستگاه یا رمزگذاری فیزیکی رمزگذاری شود.

  • حفاظت از داده MongoDB با استفاده از مجوزهای file-system permissions

  • داده های MongoDB شامل data files, configuration files, auditing logs, and key files

 محدود کردن قرار گرفتن در معرض شبکه

 MongoDB باید در یک محیط شبکه قابل اعتماد اجرا می شود و از این امر مهم باید کاملا مطمئن باشید و رابط هایی را که نمونه های MongoDB برای اتصال های ورودی گوش می دهند، محدود شده باشند . اجازه دهید فقط مشتریان قابل اعتماد برای دسترسی به واسط های شبکه و پورت هایی که نمونه های MongoDB در دسترس هستند مجوز لازمه را داشته باشند .

فعالیت ممیزی سیستم

پیگیری دسترسی و تغییرات در تنظیمات و داده های پایگاه داده.

MongoDB Enterprise شامل یک  حسابرسی سیستمی است که می تواند رویدادهای سیستمی را (مانند عملیات کاربر، رویدادهای اتصال) در یک نمونه MongoDB رکورد کند. این سوابق ممیزی، تجزیه و تحلیل قانونی را ارائه می دهد و به مدیران اجازه می دهد تا کنترل های مناسب را بررسی کنند.

اجرای MongoDB با یک کاربر اختصاصی

اجرای فرآیندهای MongoDB با یک حساب کاربر اختصاصی سیستم عامل.

 اطمینان حاصل کنید که حساب کاربری دارای مجوز لازم برای دسترسی به داده است  و هیچ مجوز غیر ضروری دیگری را ندارد .

اجرای MongoDB با تنظیمات پیکربندی امن

  • MongoDB از اجرای کد جاوا اسکریپت برای عملیات های جانبی سرور پشتیبانی می کند:

mapReduce , group , and $where

  • اگر از این عملیات ها استفاده نمی کنید ، اسکریپت های سمت سرور را با استفاده از گزینه noscripting– در خط فرمان غیر فعال کنید.

  • فقط از پروتکل MongoDB wire استفاده کنید.

  • در صورت تأیید اعتبار ورودی ، دیتا بیس MongoDB اعتبار ورودی را به طور پیش فرض از طریق تنظیم wireObjectCheck امکان پذیر می کند. این فرایند تضمین می کند که تمام اسناد ذخیره شده توسط نمونه Mongod BSON معتبر هستند.

فعال کردن کنترل دسترسی

بررسی اجمالی

فعال کردن کنترل دسترسی در یک پایگاه داده MongoDB مستقر شده ، می تواند احراز هویت را تأیید کند . هنگام دسترسی به MongoDB مستقر شده در سرور که کنترل دسترسی آن فعال شده است ، کاربران تنها می توانند اقداماتی را که به واسطه نقش آنها تعیین می شود، انجام دهند.

آموزش زیر کنترل دسترسی را در یک instance مستقل mongod کنترل می کند و از مکانیزم احراز هویت پیش فرض استفاده می کند. برای همه مکانیسم های احراز هویت پشتیبانی شده، مراحل تأیید اعتبار را ببینید.

کاربر ادمین – Admin

این یوزر با فرآیند کنترل دسترسی فعال شده است بنابراین باید اطمینان حاصل شود که کاربر با استفاده از UserAdmin یا کاربر AdminAnyDatabase در پایگاه داده مدیریت می شود . زیرا این کاربر می تواند دسترسی به اکانت های ادمین و رول هایی مانند موارد زیر را داشته باشد :

create users, grant or revoke roles from users, and create or modify customs Roles

روش کار بدین صورت است که :

روش زیر برای اولین بار یک کاربر مدیر را به یک نمونه MongoDB بدون کنترل دسترسی اضافه می کند و سپس کنترل دسترسی را فعال می کند.

در مثال MongoDB از پورت ۲۷۰۱۷ و دایرکتوری var / lib / mongodb/ استفاده می کنیم و فرض می شود دایرکتوری  var / lib / mongodb/ وجود دارد .

۱ . شروع MongoDB بدون کنترل دسترسی .

یک نمونه مستقل بدون کنترل دسترسی را شروع می کنیم . به عنوان مثال، یک ترمینال را باز کرده و کا منت زیر را وارد میکنیم :

mongod --port 27017 --dbpath /var/lib/mongodb

mongo --port 27017

۲ . ایجاد کاربر مدیر

از طریق Mongo shell ، یک کاربر را با نقش userAdminAnyDatabase در مدیریت پایگاه داده اضافه می کنیم . و رول های مختلفی را به این کاربر اضافه و اعطا می کنیم . به عنوان مثال، کاربر  myUserAdmin را در مدیریت پایگاه داده با استفاده از نقش userAdminAnyDatabase و نقش  readWriteAnyDatabase ایجاد می کنیم .

use admin

db.createUser(

  {

    user: "myUserAdmin",

    pwd: "abc123",

    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]

  }

)

نکته مهم : پایگاه داده ای که در آن کاربر را ایجاد می کنید (در این مثال، admin) ، یک پایگاه داده اعتبار سنجی کاربر است . اگرچه کاربر به این پایگاه داده احراز هویت دارد ولی  می تواند رول ها یا نقش ها را در پایگاه های دیگر داشته باشد؛ یعنی پایگاه داده تأیید هویت کاربر امتیازات کاربر را محدود نمی کند.

۳ . پایگاه داده MongoDB را راه اندازی مجدد کرده و با کنترل دستریسی امتحان میکنیم

db.adminCommand( { shutdown: 1 } )

  1. خروج از mongo shell

  2. گزینه mongodb را با گزینه خط فرمان auth– دوباره راه اندازی کنید

mongod --auth --port 27017 --dbpath /var/lib/mongodb

مشتریانی که به این نمونه وصل هستند باید خود را به عنوان یک کاربر MongoDB تأیید کنند .

مشتریان تنها اقدامات را با توجه به نقش های تعیین شده خود می توانند انجام دهند.

۴ . اتصال و تأیید اعتبار به عنوان کاربر مدیر

با استفاده از shell mongo، می توانید :

  • با احراز هویت و عبور از اعتبار کاربری یا تأیید اعتبار ، ارتباط برقرار کنید

  • برای احراز هویت بار اول می توانید بدون احراز هویت ارتباط برقرار کنید و سپس از روش () auth برای تأیید اعتبار استفاده کنید

تأیید اعتبار در هنگام اتصال  :

mongo --port 27017 -u "myUserAdmin" --authenticationDatabase "admin" -p

 << رمز عبور را هنگامی که درخواست شد وارد می کنیم در این مثال، abc123. >>

تأیید اعتبار پس از اتصال  :

mongo --port 27017

use admin

db.auth("myUserAdmin", "abc123" )

۵ . گسترش و ایجاد کاربران بیشتر

پس از تأیید اعتبار کاربر مدیر ، از ()db.createUser برای ایجاد کاربران اضافی استفاده می کنیم . حتی می توانیم نقش های ساخته شده و یا نقش های تعریف شده توسط کاربر را به کاربران دیگر اختصاص دهیم.

عملیات زیر یک کاربر myTester را به پایگاه داده Test اضافه می کند که نقش readWrite را در پایگاه داده Test و نیز نقش خواندن در پایگاه داده گزارش را دارد .

use test

db.createUser(

  {

    user: "myTester",

    pwd: "xyz123",

    roles: [ { role: "readWrite", db: "test" },

             { role: "read", db: "reporting" } ]

  }

)

نکته : پایگاه داده ای که در آن کاربر را ایجاد کرده ایم (در این مثال، Test) این پایگاه داده تأیید کننده کاربر است. اگرچه کاربر در این پایگاه داده احراز هویت می کند ، لذا می تواند نقش ها را در پایگاه های دیگر نیز داشته باشد  یعنی پایگاه داده تأیید هویت کاربر امتیازات کاربر را محدود نمی کند.

بعد از ایجاد سایر کاربران ، mongo shell را disconnect می کنیم .

۶ . به نمونه مثال متصل می شویم و با یوزر myTester در پایگاه داده authenticate می شویم

پس از قطع ارتباط mongo shell به عنوان myUserAdmin، به عنوان myTester دوباره وصل می شویم . در این عملیات ما می توانیم :

  • با احراز هویت با عبور از اعتبار کاربری یا تأیید اعتبار ، ارتباط برقرار کنیم

  • ابتدا بدون احراز هویت ارتباط برقرار می کنیم و سپس از روش ()auth برای تأیید اعتبار  استفاده می کنیم .

تأیید اعتبار در هنگام اتصال  :

mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p

<< رمز عبور را هنگامی که درخواست شد وارد می کنیم در این مثال، abc123. >>

تأیید اعتبار پس از اتصال  :

mongo --port 27017

use test

db.auth("myTester", "xyz123" )

۷ . اضافه کردن یک سند به عنوان MyTester

به عنوان myTester ، ما مجاز به انجام عملیات خواندن و نوشتن در پایگاه داده Test (و همچنین انجام عملیات خواندن در پایگاه داده گزارش)  هستیم . پس از تایید به عنوان myTester ، یک سند را در یک مجموعه در پایگاه داده Test قرار می دهیم . برای مثال، می توانیم عملیات زیر را در پایگاه داده Test انجام دهیم :

db.foo.insert( { x: 1, y: 1 } )

۸ . جزئیات بیشتر

مجموعه رکوردها و کلاسترهای مشترک :

مجموعه های تکثیر و کلاستر های انحصاری نیاز به تایید هویت بین اعضا هنگام کنترل دسترسی را دارند. جزئیات بیشتر گفته خواهد شد

Localhost Exception

اگر قبل از ایجاد هر کاربری کنترل دسترسی را فعال کنید ، MongoDB یک استثناء localhost را فراهم می کند که به شما اجازه می دهد یک کاربر مدیر در پایگاه داده مدیریت ایجاد کنید. پس از ایجاد، شما باید به عنوان کاربر مدیر احراز هویت کنید تا کاربرهای اضافی را در صورت نیاز ایجاد کنید.

احراز هویت – Authentication

Authentication روند تأیید هویت یک مشتری است. وقتی کنترل دسترسی یا مجوز، فعال شده باشد ،MongoDB نیاز به تمام مشتریان برای تأیید هویت خود دارد تا دسترسی آنها را تعیین کند.

اگرچه احراز هویت و مجوز بسیار به هم نزدیک هستند اما احراز هویت از مجوز متمایز است. فرق بین آنها این است که تأیید هویت یک کاربر را تایید می کند؛ مجوز دسترسی کاربر تأیید شده به منابع و عملیات را تعیین می کند.

MongoDB Atlas

بطور واقعی از طریق LDAP تأیید اعتبار را پشتیبانی می کند. Atlas به طور خودکار با سرور LDAP شما همگام سازی می کند و کاربران خود را با اعتبار موجود خود تأیید می کند

روش احراز هویت

  • روشهای تأیید اعتبار

  • مکانیسم تأیید اعتبار

تأیید هویت، روند تأیید هویت یک مشتری است. هنگامی که کنترل دسترسی، یعنی مجوز، فعال شده است، MongoDB به همه مشتریان نیاز دارد خودشان را تأیید کنند تا بتواند سطح دسترسی آنها را تعیین کند.

اگرچه احراز هویت و مجوز ارتباط نزدیکی دارند ولی  احراز هویت از مجوز مجزا است . احراز هویت یک کاربر را تایید می کند؛ مجوز دسترسی کاربر تأیید شده به منابع و عملیات را تعیین می کند.

روشهای تأیید اعتبار

برای تأیید اعتبار به عنوان یک کاربر ، شما باید یک نام کاربری ، رمز عبور و پایگاه داده احراز هویت مرتبط با آن کاربر ارائه کنید .

برای تأیید اعتبار با استفاده از  shell:

هنگام اتصال به نمونه mongod یا mongos از گزینه های احراز هویت خط فرمان mongo استفاده کنید

(--username, --password, and --authenticationDatabase)

ابتدا به نمونه mongod یا mongos وصل شوید و سپس دستور احراز هویت یا روش ()db.auth را با پایگاه داده احراز هویت اجرا کنید .

مکانیسم تأیید اعتبار

MongoDB از تعدادی از مکانیزم های تأیید اعتبار پشتیبانی می کند که مشتریان می توانند برای تایید هویت خود استفاده کنند. این مکانیزم ها اجازه می دهد تا MongoDB با سیستم تایید هویتی شما ادغام شود

MongoDB از مکانیسم های احراز هویت چندگانه نیز پشتیبانی می کند:

SCRAM (پیش فرض)

۵۰۹ Certificate Authentication

علاوه بر پشتیبانی از مکانیزم های فوق، MongoDB Enterprise همچنین از مکانیزم های زیر نیز پشتیبانی می کند :

LDAP proxy authentication

Kerberos authentication

کاربران – Users

برای تأیید اعتبار یک مشتری در MongoDB، باید کاربر مربوطه را به MongoDB اضافه کنید.

رابط کاربری مدیریت

برای افزودن یک کاربر در پایگاه داده  ، MongoDB روش ()db.createUser را فراهم می کند . هنگام افزودن یک کاربر می توانید نقش ها را به کاربر اختصاص دهید تا امتیازات اعطا شود.

نکته : توصیه می شود اولین کاربر ایجاد شده در پایگاه داده یک کاربر مدیر باشد که دارای اختیارات برای مدیریت سایر کاربران است.

همچنین می توانید کاربران موجود را به روز کنید ، مانند تغییر رمز عبور و اعطا یا لغو نقش . برای داشتن اطلاعات بیشتر از روش های مدیریت کاربر در مطالب بعدی توضیح داده خواهد شد .

یک کاربر توسط نام کاربری و پایگاه داده احراز هویت مرتبط شناسایی می شود و کاربرانی که توسط MongoDB اداره می شوند یک UserId منحصر به فرد دارند.

تأیید اعتبار پایگاه داده

هنگام اضافه کردن یک کاربر، کاربر را در یک پایگاه داده تایید اعتبار ایجاد می کنید.

یک کاربر می تواند امتیازات را در پایگاه های مختلف داشته باشد یعنی امتیازات کاربر محدود به پایگاه داده تأیید اعتبار آنها نیست.

با اختصاص به نقش های کاربر در سایر پایگاه های داده، یک کاربر ایجاد شده در یک پایگاه داده می تواند مجوز فعالیت در پایگاه های دیگر را نیز داشته باشد. برای کسب اطلاعات بیشتر در مورد نقش ها، در مطالب مشاهده کنترل دسترسی مبتنی بر نقش توضیح داده خواهد شد

نام کاربری و پایگاه داده تأیید هویت به عنوان یک شناسه منحصر به فرد برای آن کاربر می باشد به این معنی که اگر دو کاربر یک نام دارند اما در پایگاه های مختلف ایجاد می شوند، آنها دو کاربر جداگانه هستند.

اگر قصد دارید یک کاربر تنها با مجوز را در چند پایگاه داده داشته باشید، به جای ایجاد چندین بار در پایگاه های مختلف، یک کاربر را تنها با استفاده از نقش ها (roles) در پایگاه های داده کاربردی ایجاد کنید.

با شروع از نسخه ۴٫۰٫۹ MongoDB می توانید یک کاربر را با یک UserId منحصر به فرد ایجاد کرده و در MongoDB متصل کنید .

کاربران مدیریت شده در LDAP که در سرور LDAP ایجاد شده اند ، سند مرتبط در مجموعه system.users ندارند ، بنابراین فاقد فیلد userId مرتبط با آنها هستند .

تأیید اعتبار یک کاربر

برای تأیید اعتبار به عنوان یک کاربر باید نام کاربری، رمز عبور و پایگاه داده تأیید اعتبار مربوط به آن کاربر را ارائه کنید.

برای تأیید اعتبار با استفاده از mongo shell :

هنگام اتصال به نمونه mongod یا mongos از گزینه های احراز هویت خط فرمان mongo استفاده کنید

(--username, --password, and --authenticationDatabase)

ابتدا به نمونه mongod یا mongos وصل کنید و سپس دستور احراز هویت یا روش db.auth() را با پایگاه داده احراز هویت اجرا کنید .

تمام اطلاعات کاربران ایجاد شده در MongoDB از جمله نام، رمز عبور و پایگاه داده تأیید هویت کاربر را در مجموعه system.users در پایگاه داده مدیریت ذخیره می شود .

به طور مستقیم به این مجموعه دسترسی نگیرید و از دستورات مدیریت کاربر استفاده کنید.

پایان گام اول 
ادامه دارد …

گردآورنده : سید محمد اسماعیلی

 

نوشته های مرتبط

امنیت سرور ssh

۱۹

مرداد
همه موضوعات

سند امنیت در سرور OpenSSH – چک لیست امنیتی OpenSSh

انتشار محتوای سایت ایران سایبر فقط با ذکر منبع رسمی مجاز است OpenSSH اجرای پروتکل SSH است و به دلیل امنیت بالا برای ریموت لاگین ، ایجاد پشتیبان ، انتقال فایل از راه دور از طریق scp یا sftp و موارد دیگر توصیه می شود. SSH جهت حفظ محرمانگی و یکپارچگی داده های تبادل شده بین دو شبکه […]

کنترل پهنای باند اینترنت

۱۶

مرداد
همه موضوعات

محدود کردن سرعت اینترنت کاربران شبکه LAN در لینوکس

انتشار محتوای سایت ایران سایبر فقط با ذکر منبع رسمی مجاز است  اینترنت می تواند ترافیک نامطلوب زیادی را از جمله فعالیت هکرها ، اسپم ها ، جاسوس افزارها و موارد دیگر به همراه آورد. در این مقاله قصد دارم یک ابزار منبع باز را معرفی کنم تا بوسیله آن بتوانید ترافیک اینترنت را کنترل کرده و فعالیت[…]