Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีรักษาความปลอดภัย MongoDB บน ​​Ubuntu 16.04


ในบทความนี้ เราจะเรียนรู้วิธีรักษาความปลอดภัย Mongo DB บน ​​Ubuntu 16.04 ในเวอร์ชันก่อนหน้า Mongo DB เสี่ยงต่อการถูกโจมตีแบบอัตโนมัติ เนื่องจากโดยค่าเริ่มต้น ไม่มีการรับรองความถูกต้องที่ได้รับอนุญาตให้โต้ตอบกับฐานข้อมูล ผู้ใช้คนใดก็ตามสามารถสร้าง อ่าน แก้ไข และทำลายฐานข้อมูลและเนื้อหาได้ เนื่องจาก Mongo DB daemon ซึ่งสามารถฟังอินเทอร์เฟซทั้งหมดเป็นการตั้งค่าเริ่มต้น

การเปิดใช้งานการตรวจสอบสิทธิ์และการเพิ่มผู้ใช้ที่เป็นผู้ดูแลระบบ

ปัญหานี้ได้รับการแก้ไขแล้วใน Mongo DB เวอร์ชันล่าสุดหลังจากเผยแพร่เวอร์ชัน 3.x อย่างไรก็ตาม การตรวจสอบสิทธิ์ยังคงถูกปิดใช้งานเป็นการตั้งค่าเริ่มต้น ดังนั้นผู้ใช้ทุกคนจึงสามารถเข้าถึงฐานข้อมูลได้อย่างสมบูรณ์ เพื่อรักษาความปลอดภัยนี้ เราจะสร้างผู้ใช้ที่เป็นผู้ดูแลระบบและเปิดใช้งานการตรวจสอบสิทธิ์ และทดสอบการตรวจสอบสิทธิ์กับผู้ใช้ที่เป็นผู้ดูแลระบบ

การเพิ่มผู้ดูแลระบบ

ในการเพิ่มผู้ใช้ที่เป็นผู้ดูแลระบบ ก่อนอื่นเราจะเชื่อมต่อกับเปลือก Mongo

$ mongo

เมื่อเราเปิด Mongo DB shell มันจะแสดงคำเตือนมากมายว่าการควบคุมการเข้าถึงไม่ได้เปิดใช้งานสำหรับฐานข้อมูล และการเข้าถึงแบบอ่านหรือเขียนไปยังฐานข้อมูลและการกำหนดค่านั้นไม่จำกัด

เอาต์พุต:MongoDB เชลล์เวอร์ชัน v3.4.4เชื่อมต่อกับ:MongoDB://127.0.0.1:27017MongoDB เวอร์ชันของเซิร์ฟเวอร์:3.4.4 ยินดีต้อนรับสู่ MongoDB เชลล์ สำหรับความช่วยเหลือแบบโต้ตอบ พิมพ์ "ความช่วยเหลือ" สำหรับเอกสารที่ครอบคลุมเพิ่มเติม โปรดดูที่ https://docs.mongodb.org/Questions? ลองกลุ่มสนับสนุนhttps://groups.google.com/group/mongodb-userServerมีคำเตือนเมื่อเริ่มต้น:2017-05-16T12:33:46.819+0530 I การจัดเก็บ [initandlisten]2017-05-16T12:33:46.819+0530 ฉัน STORAGE [initandlisten] ** คำเตือน:ขอแนะนำให้ใช้ระบบไฟล์ XF S กับ WiredTiger storage engine2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] ** ดู https://d ochub.mongodb.org/ core/prodnotes-filesystem2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** คำเตือน:ไม่ได้เปิดใช้งานการควบคุมการเข้าถึงสำหรับฐานข้อมูล 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** อ่านและเขียนการเข้าถึงข้อมูลและการกำหนดค่าไม่จำกัด2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05- 16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** คำเตือน:/sys/kernel/ mm/transparent_hugepage/enabled is 'always'.2017-05 -16T12:33:46.850+0530 ฉันควบคุม [initandlisten] ** เราแนะนำให้ตั้งค่าเป็น 'never'2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** คำเตือน:/sys/kernel/ mm/transparent_hugepage/defrag is 'always'.2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** เราแนะนำให้ตั้งค่าเป็น 'never'2017-05-16T12:33:46.850+0530 ฉันควบคุม [เริ่มต้นและฟัง]>

เนื่องจากไม่มีข้อจำกัดในการเลือกชื่อผู้ใช้ของบัญชีผู้ดูแลระบบ เนื่องจากระดับสิทธิ์มาจากตัวแปร userAdminAnyDatabase ผู้ดูแลฐานข้อมูลเก็บข้อมูลประจำตัว

เราจะเลือกชื่อผู้ใช้ที่ต้องการและเลือกรหัสผ่านที่ปลอดภัยโดยใช้คำสั่งด้านล่าง

> ใช้ admin.switched เป็น db admin

เมื่อเปลี่ยนฐานข้อมูลแล้ว เราจะสร้างผู้ใช้ที่เป็นผู้ดูแลระบบ

> db.createUser(... {... ผู้ใช้:"DBAdmin",... pwd:"DBAdmin'sSecurePassword",... บทบาท:[ { บทบาท:"userAdminAnyDatabase", db:"admin" } ]... }... )เอาต์พุต:เพิ่มผู้ใช้สำเร็จแล้ว:{ "ผู้ใช้" :"DBAdmin", "บทบาท" :[ { "บทบาท" :"userAdminAnyDatabase", "db" :"admin" }]}> 

เนื่องจากเราได้สร้างผู้ใช้ผู้ดูแลระบบชื่อ DBAdmin ด้วยรหัสผ่านที่ปลอดภัย

เราเพิ่งสร้างผู้ใช้ที่เป็นผู้ดูแลระบบ แต่จะไม่จำเป็นจนกว่าเราจะเปิดใช้งานการพิสูจน์ตัวตนในการกำหนดค่า Mongo DB

การเปิดใช้งานการตรวจสอบสิทธิ์สำหรับ MongoDB

เราจำเป็นต้องเปิดใช้งานการพิสูจน์ตัวตนในไฟล์คอนฟิกูเรชัน mongod.conf ซึ่งอยู่ใน /etc และรีสตาร์ท Mongo DB daemon

ตอนนี้เราจะแก้ไขไฟล์ mongod.conf และทำการแก้ไขในส่วน $security

$ sudo vi /etc/mongod.conf

ไฟล์การกำหนดค่ามีลักษณะดังนี้

# mongod.conf# สำหรับเอกสารประกอบของตัวเลือกทั้งหมด โปรดดูที่:# https://docs.mongodb.org/manual/reference/configuration-options/# ตำแหน่งและวิธีจัดเก็บข้อมูล data.storage:dbPath:/var/ lib/mongodbjournal:enabled:true# engine:# mmapv1:# wiredTiger:# where to write logging data.systemLog:destination:filelogAppend:truepath:/var/log/mongodb/mongod.log# network interfacesnet:พอร์ต:27017bindIp:127.0 .0.1#processManagement:#security:#operationProfiling:#replication:#sharding:## Enterprise-Only Options:

เราจำเป็นต้องลบความคิดเห็นก่อนการรักษาความปลอดภัย (#) เพื่อเปิดใช้งานส่วนนี้ และเราจำเป็นต้องเพิ่มการตั้งค่าการให้สิทธิ์ด้านล่างนี้เป็นการตั้งค่า

#processManagement − ความปลอดภัย − การอนุญาต − “เปิดใช้งาน” #operationProfiling − #replication − #sharding −

โปรดทราบว่าบรรทัดความปลอดภัยไม่มีที่ว่างและบรรทัดการให้สิทธิ์ซึ่งต้องเริ่มต้นด้วยช่องว่างสองช่อง เมื่อเราเพิ่มบรรทัดลงในไฟล์กำหนดค่าแล้ว เราจำเป็นต้องรีสตาร์ท mongod daemon

ด้านล่างนี้คือคำสั่งให้รีสตาร์ทบริการ MongoDB –

$ sudo systemctl รีสตาร์ท mongod

ครั้งหนึ่ง เราเริ่มบริการใหม่ เราสามารถตรวจสอบสถานะของบริการ MongoDB ด้วยคำสั่งด้านล่าง –

$ sudo systemctl status mongodOutput:mongod.service - ฐานข้อมูลเชิงเอกสารที่มีประสิทธิภาพสูง ปลอด schemaLoaded:โหลดแล้ว (/lib/systemd/system/mongod.service; ปิดใช้งาน; ค่าที่ตั้งไว้ล่วงหน้าของผู้ขาย:เปิดใช้งาน) ใช้งานอยู่:ใช้งานอยู่ (ทำงานอยู่) ) ตั้งแต่ อ. 2017-05-16 12:52:09 น. IST; 48s agoDocs:https://docs.mongodb.org/manualMain PID:3281 (mongod)Tasks:20Memory:33.3MCPU:734msCGroup:/system.slice/mongod.service└─3281 /usr/bin/mongod --quiet - -config /etc/mongod.conf16 พ.ค. 12:52:09 น. ubuntu-16 systemd[1]:เริ่มต้นฐานข้อมูลเชิงเอกสารที่มีประสิทธิภาพสูงและไม่มีสคีมา

การตรวจสอบการพิสูจน์ตัวตนบน Mongo DB

ขั้นแรก ให้เราเชื่อมต่อกับ MongoDB โดยไม่มีข้อมูลประจำตัวใดๆ

$ mongoOutput:MongoDB เวอร์ชันเชลล์ v3.4.4 กำลังเชื่อมต่อกับ:mongodb://127.0.0.1:27017 เวอร์ชันเซิร์ฟเวอร์ MongoDB:3.4.4>

ตอนนี้เราจะเห็นว่าข้อความเตือนทั้งหมดที่แสดงในอดีตได้รับการแก้ไขแล้ว และตอนนี้เราจะทดสอบการรับรองความถูกต้องโดยพยายามเชื่อมต่อกับฐานข้อมูลทดสอบ

> show dbs2017-05-16T12:56:17.306+0530 E QUERY [thread1] ข้อผิดพลาด:listDatabases ล้มเหลว:{ "ok" :0, "errmsg" :"ไม่ได้รับอนุญาตให้ผู้ดูแลระบบดำเนินการคำสั่ง { listDatabases:1.0 } ", "รหัส" :13, "codeName" :"ไม่ได้รับอนุญาต"} :_getErrorWithCode@src/mongo/shell/utils.js:25:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1shellHelper .show@src/mongo/shell/utils.js:769:19shellHelper@src/mongo/shell/utils.js:659:15@(shellhelp2):1:1

เราจะเห็นว่าเราไม่สามารถสร้างหรือใช้ฐานข้อมูลโดยไม่มีการรับรองความถูกต้อง ตอนนี้ออกจากเชลล์ลองด้วยการตรวจสอบสิทธิ์

การตรวจสอบสิทธิ์การเข้าถึงของผู้ดูแลระบบ

ตอนนี้ ให้ลองเชื่อมต่อกับฐานข้อมูล Admin โดยใช้การตรวจสอบสิทธิ์ผู้ใช้ Admin ด้านล่างนี้เป็นคำสั่งให้เชื่อมต่อกับฐานข้อมูลโดยใช้การตรวจสอบสิทธิ์ผู้ใช้ –

$ mongo -u DBAdmin -p --authenticationDatabase admin MongoDB เวอร์ชันเชลล์ v3.4.4 ป้อนรหัสผ่าน:กำลังเชื่อมต่อกับ:mongodb://127.0.0.1:27017MongoDB เวอร์ชันเซิร์ฟเวอร์:3.4.4>แสดง dbsadmin 0.000GBlocal 0.000GB> 

ในบทความนี้ เราได้เรียนรู้วิธีรักษาความปลอดภัย Mongo DB โดยการเพิ่มผู้ดูแลระบบและเปิดใช้งานการตรวจสอบสิทธิ์เป็นการตั้งค่าเริ่มต้น Mongo DB ไม่ได้เปิดใช้งานการตรวจสอบผู้ใช้ซึ่งผู้ใช้สามารถสร้าง ลบ และแก้ไขฐานข้อมูลได้