Mongodb

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

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

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

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

گام هشتم :

نصب Replica Set جدید با کنترل دسترسی Keyfile

بررسی اجمالی

اجرای کنترل دسترسی بر روی یک replica set نیاز به پیکربندی های زیر دارد :

  • امنیت بین اعضای replica set با استفاده از احراز هویت داخلی انجام می شود

  • امنیت بین ارتباطات مشتریان و replica set با استفاده از کنترل دسترسی مبتنی بر نقش انجام می شود .

در این آموزش ، پیکربندی هر یک از اعضای  replica set با استفاده از همان مکانیزم احراز هویت داخلی و تنظیمات آن صورت میگیرد و تأیید احراز هویت داخلی ، کنترل دسترسی کاربر را اعمال می کند . برای اتصال به  replica set ، مشتریانی مانند mongo shell باید از یک حساب کاربری استفاده کنند.

مدیریت Cloud  و مدیرت Ops

اگر در حال حاضر از برنامه Cloud Manager یا Ops استفاده می کنید یا در حال برنامه ریزی آن هستید ، برای دستیابی به کنترل دسترسی در آینده مدیریت Cloud یا مدیریت Ops را به طور کامل شرح خواهیم داد .

نکته : در صورت امکان از یک نام میزبان DNS منطقی به جای یک آدرس آی پی استفاده کنید ، مخصوصا هنگام پیکربندی اعضای replica set یا sharded cluster که در آن قرار دارند. استفاده از نام های میزبان منطقی DNS از تغییرات پیکربندی ناشی از تغییرات آدرس IP اجتناب می کند.

IP Binding ( تغییر در نسخه ۳٫۶٫)

در لحظه شروع MongoDB 3.6 ، Mongod و Mongos به طور پیش فرض به Localhost متصل می شوند. اگر اعضای استقرار شما در میزبان های مختلف اجرا می شوند و یا اگر مایل باشید که مشتریان از راه دور بتوانند در پیاده سازی شما متصل شوند ، باید  bind_ip – – یا net.bindIp را مشخص کنید

سیستم عامل

این آموزش در درجه اول به فرایند mongod می پردازد . کاربران ویندوز باید از برنامه mongod.exe استفاده کنند.

امنیتKeyfile

Keyfile ها از حداقل اشکالات امنیتی برخوردار هستند و برای آزمایشات و محیط های توسعه مناسب می باشند . اما برای محیط های تولیدی ما توصیه می کنیم از گواهی های x.509 استفاده شود .

کاربران و مکانیزم های تأیید اعتبار

این آموزش شامل حداقل تعداد ایجاد کاربران اداری در پایگاه داده مدیریت می شود . برای تأیید هویت کاربر ، روند آموزشی ما از مکانیزم اعتبار سنجی پیش فرض SCRAM استفاده می کند . مکانیسم های امنیتی از نوع چالش و پاسخ بهترین روش برای آزمایش و یا محیط های توسعه ایی هستند . برای محیط های تولید ، توصیه می کنیم با استفاده از گواهی x.509 یا پروتکل معتبر LDAP (فقط برای MongoDB Enterprise ) یا Authentication Kerberos (فقط برای MongoDB Enterprise قابل استفاده است) استفاده کنید.

مراحل نصب Replica Set جدید با کنترل دسترسی Keyfile

۱ . ایجاد یک keyfile

با احراز هویت keyfile ، هر نمونه از mongod در replica set از محتویات keyfile به عنوان رمز عبور مشترک برای تأیید اعتبار سایر اعضاء در استقرار استفاده می کند. فقط نمونه های mongod با فایل keyfile صحیح می تواند به replica set بپیوندد.

محتویات فایل اصلی باید بین ۶ تا ۱۰۲۴ کاراکتر طول داشته باشد و باید برای همه اعضای replica set یکسان باشد.

نکته : در سیستم های یونیکس، فایل اصلی نباید دارای مجوزهای گروهی یا سراسری باشد و در سیستم های ویندوز، مجوز های Keyfile بررسی نمی شوند.

شما می توانید یک فایل کلیدی را با استفاده از هر روشی که انتخاب می کنید تولید کنید .

 به عنوان مثال ، عملیات زیر از openssl برای تولید یک رشته تصادفی پیچیده ۱۰۲۴ کاراکتری استفاده می کند که برای یک keyfile استفاده می شود . بعد از آن از chmod جهت تغییر مجوزهای فایل و برای مجوزهای فقط خواندن برای صاحب فایل استفاده می کند :

openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

۲ .  keyfile را به همه اعضاء  replica set کپی کنید.

فایل keyfile را به هر سرور میزبان عضو  replica set کپی کنید . اطمینان حاصل کنید که کاربر در حال اجرای نمونه های mongod صاحب فایل است و می تواند به فایل اصلی دسترسی پیدا کند.

از ذخیره سازی فایل اصلی در مدیاهای های ذخیره سازی مانند درایو های USB یا یک دستگاه ذخیره سازی متصل به شبکه که می تواند به راحتی از سخت افزار میزبان نمونه های mongod را جدا کند اجتناب کنید .

۳ . هر عضوی از replica set را با کنترل دسترسی فعال کنید.

برای هر عضوی از replica set ، mongod را یا با تنظیم فایل پیکربندی security.keyFile یا گزینه خط فرمان  keyFile – – شروع کنید . keyFile ، هر دو احراز  هویت داخلی و کنترل دسترسی بر اساس نقش را اجرا می کند.

  • فایل پیکربندی

اگر با استفاده از یک فایل پیکربندی میخواهید این کار را انجام دهید ، ابتدا باید security.keyFile را به مسیر keyfile ، و replication.replSetName را به نام replica set تنظیم کنید

این پیکر بندی شامل گزینه های اضافی مورد نیاز برای تنظیمات شما نیز می باشد .

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

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>
net:
bindIp: localhost,<hostname(s)|ip address(es)>

mongod را با استفاده از فایل پیکربندی استارت کنید:

mongod --config <path-to-config-file>

برای کسب اطلاعات بیشتر در مورد فایل پیکربندی ، گزینه های پیکربندی را باید مرور کنید

  • خط فرمان

اگر با استفاده از گزینه های خط فرمان میخواهید این کار را انجام دهید ، mongodb را با گزینه های زیر شروع کنید :

ابتدا  keyFile – – را به مسیر keyfile تنظیم کرده و سپس  replSet – – به نام replica set تنظیم کنید .

این پیکر بندی شامل گزینه های اضافی مورد نیاز برای تنظیمات شما نیز می باشد .

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

mongod --keyFile <path-to-keyfile> --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>

نکته : در صورت امکان از یک نام میزبان DNS منطقی به جای یک آدرس آی پی استفاده کنید ، مخصوصا هنگام پیکربندی اعضای replica set یا sharded cluster  که در آن قرار دارند. استفاده از نام های میزبان منطقی DNS از تغییرات پیکربندی ناشی از تغییرات آدرس IP اجتناب می کند.

۴ .  اتصال به یک عضو از replica set فراتر از یک رابط محلی (localhost interface) .

یک mongo shell را به یکی از موارد mongod در رابط کاربری محلی متصل کنید . شما باید mongo shell را در همان دستگاه فیزیکی به عنوان نمونه mongod اجرا کنید .

رابط localhost فقط در دسترس است زیرا هیچ کاربر برای استقرار ایجاد نشده است . پس از ایجاد اولین کاربر، رابط localhost بسته می شود .

۵ . شروع replica set

از طریق mongo shell دستور ()rsinitiate را اجرا کنید.

در ()rsinitiate  می توانید یک سند پیکربندی replica set را به صورت اختیاری را انتخاب کنید. سند پیکربندی replica set شامل موارد زیر است :

  • فیلد id_ به replica set که در replSetName یا گزینه replSet – – مشخص شده است، تنظیم شده است.

  • اعضای آرایه با یک سند در هر عضو replica set قرار دارند .

مثال زیر مجموعه ای از سه مجموعه اعشاری را آغاز می کند :

نکته مهم : اجرای ()rs.initiate  فقط بر روی یکی از نمونه های mongod در replica set است .

rs.initiate(
 {
  _id : <replicaSetName>,
  members: [
   { _id : 0, host : "mongo1.example.net:27017" },
   { _id : 1, host : "mongo2.example.net:27017" },
  { _id : 2, host : "mongo3.example.net:27017" }
  ]
 }
)

()rs.initiate باعث انتخابات شده و یکی از اعضای اصلی را انتخاب می کند.

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

نکته مهم :

پس از ایجاد اولین کاربر ، Localhost Exception دیگر در دسترس نیست.

اولین کاربر باید دارای امتیازاتی برای ایجاد سایر کاربران باشد ، مانند کاربری userAdminAnyDatabase باشد . این تضمین می کند که پس از پایان بسته Localhost Exception ، می توانید کاربر های اضافی ایجاد کنید.

اگر حداقل یک کاربر حق دسترسی به ایجاد کاربران را نداشته باشد ، پس از آنکه محدوده Localhost Exception بسته شود ، ممکن است نتواند کاربران را با امتیازات جدید ایجاد یا تغییر دهد و بنابراین قادر به دسترسی به عملیات لازم نیست.

یک کاربر را با استفاده از روش ()db.createUser اضافه کنید. کاربر حداقل باید نقش userAdminAnyDatabase را در پایگاه داده مدیریت داشته باشد.

مثال زیر کاربر را با نقش userAdminAnyDatabase در پایگاه داده مدیریت ایجاد می کند.

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

admin = db.getSiblingDB("admin")
admin.createUser(
 {
  user: "fred",
  pwd: "changeme1",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
 }
)

میتوانید رول های بانک اطلاعاتی برای لیست کامل رول های ساخته شده و مربوط به عملیات مدیریت پایگاه داده را مشاهده کنید .

۷ . تأیید اعتبار به عنوان مدیر کاربر

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

در mongo shell ،  از ()db.auth برای احراز هویت استفاده کنید.

به عنوان مثال، احراز هویت زیر به عنوان مدیر کاربر  به نام fred :

db.getSiblingDB("admin").auth("fred", "changeme1" )

به همین ترتیب ، یک mongo shell جدید را به عضو اصلی replica set با استفاده از

<u <username>  ، – p <password- و پارامترهای authenticationDatabase – – متصل کنید.

mongo -u "fred" -p "changeme1" --authenticationDatabase "admin"

۸ . ایجاد مدیریت خوشه ها (cluster)

نقش clusterAdmin این است که اجازه دسترسی به عملیات تکثیر را صادر کند ، مانند تنظیم پیکر بندی replica set .

کاربر مدیریت خوشه را ایجاد کرده و نقش clusterAdmin را در پایگاه داده مدیریت اختصاص دهید :

db.getSiblingDB("admin").createUser(
 {
  "user" : "ravi",
  "pwd" : "changeme2",
  roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
 }
)

میتوانید نقش های مدیریت خوشه ها را برای لیست کامل نقش های ساخته شده در ارتباط با replica set و  sharded cluster جدا شده مشاهده کنید .

 

پایان گام هشتم
ادامه دارد …

سرفصل گام نهم : استفاده از گواهی X.509 برای تایید عضویت

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

 

 

 

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

امنیت cPanel

۱۶

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

امن سازی سرور Cpanel – WHM

WHM یا Web Host Manager یک برنامه قدرتمند است که اجازه دسترسی به cPanel backend را می دهد. MWH  دارای قابلیت انعطاف پذیری زیاد و کنترل آسان در مدیریت وب سایت ها می باشد. WHM نه تنها کاربر را قادر می سازد تا بتواند  سرویس های میزبانی وب را ارائه دهد بلکه امکان ایجاد و مدیریت چند حساب […]

۱۳

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

ارزیابی و تست نفوذ MySQL با چارچوب Metasploit

اگر شما به عنوان یک متخصص فناوری اطلاعات بیش از چند ماه در این حوزه درگیر بوده باشید حداقل نامی از پایگاه داده MySQL  یا MySQL Database باید شنیده باشید. دیتابیس MySQL  دارای قابلیت ارائه یک سرور قابل اعتماد و با کارایی بالا است که برای راه اندازی و استفاده آسان از آن استفاد ه می شود. MySQL Database[…]