Computer >> Máy Tính >  >> Lập trình >> MongoDB

Cách bảo mật MongoDB trên Ubuntu 16.04

Trong bài viết này, chúng ta sẽ tìm hiểu cách bảo mật Mongo DB trên Ubuntu 16.04. Trong các phiên bản trước, Mongo DB dễ bị khai thác tự động vì theo mặc định, không có xác thực nào được phép tương tác với cơ sở dữ liệu, bất kỳ người dùng nào cũng có thể tạo, đọc, sửa đổi và phá hủy cơ sở dữ liệu và nội dung, điều này là do Daemon Mongo DB có thể lắng nghe tất cả các giao diện dưới dạng cài đặt mặc định.

Bật xác thực và thêm người dùng quản trị viên

Vấn đề này đã được giảm thiểu trong các phiên bản mới nhất của Mongo DB sau khi phát hành phiên bản 3.x, tuy nhiên, xác thực vẫn bị tắt dưới dạng cài đặt mặc định, vì vậy bất kỳ người dùng nào cũng có thể có toàn quyền truy cập vào cơ sở dữ liệu. Để bảo mật điều này, chúng tôi sẽ tạo một người dùng quản trị và bật xác thực cũng như kiểm tra xác thực với người dùng Quản trị viên.

Thêm người dùng quản trị viên

Để thêm người dùng Quản trị viên, trước tiên, chúng tôi sẽ kết nối với trình bao Mongo.

 $ mongo 

Khi chúng tôi mở Mongo DB shell, nó hiển thị nhiều cảnh báo rằng kiểm soát truy cập không được bật cho cơ sở dữ liệu và quyền truy cập đọc hoặc ghi vào cơ sở dữ liệu và cấu hình là không bị hạn chế.

 Đầu ra:MongoDB shell phiên bản v3.4.4 đang kết nối với:MongoDB://127.0.0.1:27017 Phiên bản máy chủMongoDB:3.4.4Chào mừng bạn đến với MongoDB shell. Để được trợ giúp tương tác, hãy nhập "help". //docs.mongodb.org/Questions? Hãy thử nhóm hỗ trợhttps://groups.google.com/group/mongodb-userServer có cảnh báo khởi động:2017-05-16T12:33:46.819 + 0530 I STORAGE [initandlisten] 2017-05-16T12:33:46.819 + 0530 I LƯU TRỮ [initandlisten] ** CẢNH BÁO:Bạn nên sử dụng hệ thống tệp XF S với công cụ lưu trữ WiredTiger2017-05-16T12:33:46.819 + 0530 TÔI LƯU TRỮ [initandlisten] ** Xem 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] ** CẢNH BÁO:Access contr ol không được bật cho cơ sở dữ liệu. 2017-05-16T12:33:46.850 + 0530 I CONTROL [initandlisten] ** Đọc và truy cập vào dữ liệu và cấu hình là không hạn chế.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] ** CẢNH BÁO:/ sys / kernel / mm / transparent_hugepage / enable is 'always'.2017-05 -16T12:33:46.850 + 0530 TÔI ĐIỀU KHIỂN [initandlisten] ** Chúng tôi khuyên bạn nên đặt ting thành 'never'2017-05-16T12:33:46.850 + 0530 I CONTROL [initandlisten] 2017-05-16T12:33:46.850 + 0530 I CONTROL [initandlisten] ** CẢNH BÁO:/ sys / kernel / mm / transparent_hugepage / defrag is 'always'.2017-05-16T12:33:46.850 + 0530 I CONTROL [initandlisten] ** Chúng tôi khuyên bạn nên đặt ting thành' never'2017-05-16T12:33:46.850 + 0530 I CONTROL [initandlisten]> 

Vì không có giới hạn nào trong việc chọn tên người dùng của tài khoản Quản trị vì cấp đặc quyền đến từ biến userAdminAnyDatabase. Quản trị viên cơ sở dữ liệu lưu trữ thông tin đăng nhập.

Chúng tôi sẽ chọn tên người dùng mà chúng tôi chọn và đảm bảo chọn ra mật khẩu bảo mật bằng các lệnh dưới đây.

> sử dụng admin.switched sang db admin 

Sau khi cơ sở dữ liệu được chuyển đổi, chúng tôi sẽ tạo một người dùng Quản trị viên.

> db.createUser (... {... user:"DBAdmin", ... pwd:"DBAdmin'sSecurePassword", ... role:[{role:"userAdminAnyDatabase", db:"admin" }] ...} ...) Kết quả:Đã thêm thành công người dùng:{"user":"DBAdmin", "role":[{"role":"userAdminAnyDatabase", "db":"admin"}]}> 

Vì chúng tôi đã tạo người dùng Quản trị có tên là DBAdmin với mật khẩu bảo mật.

Chúng tôi vừa tạo người dùng Quản trị viên nhưng sẽ không bắt buộc cho đến khi và trừ khi chúng tôi bật xác thực trong cấu hình Mongo DB.

Bật xác thực cho MongoDB

Chúng tôi cần kích hoạt xác thực trong tệp cấu hình mongod.conf nằm trong / etc và khởi động lại daemon Mongo DB.

Bây giờ chúng ta sẽ chỉnh sửa tệp mongod.conf và thực hiện sửa đổi trong phần $ security.

 $ sudo vi /etc/mongod.conf 

Tệp cấu hình trông giống như bên dưới

 # mongod.conf # để biết tài liệu về tất cả các tùy chọn, hãy xem:# https://docs.mongodb.org/manual/reference/configuration-options/# Nơi và cách lưu trữ data.storage:dbPath:/ var / lib / mongodbjournal:đã kích hoạt:true # engine:# mmapv1:# wiredTiger:# nơi ghi dữ liệu ghi nhật ký.systemLog:đích:filelogAppend:truepath:/var/log/mongodb/mongod.log# network interfacenet:port:27017bindIp:127.0 .0.1 # processManagement:#security:#operationProfiling:#replication:#sharding:## Enterprise-Only Options:

Chúng tôi cần xóa nhận xét trước khi bảo mật (#) để kích hoạt phần này và chúng tôi cần thêm cài đặt ủy quyền bên dưới là cài đặt.

#processManagement - bảo mật - ủy quyền - “đã bật” #operationProfiling - #replication - #sharding -

Lưu ý rằng dòng bảo mật không có dấu cách và dòng ủy quyền phải được bắt đầu bằng hai dấu cách. Khi chúng tôi đã thêm các dòng vào tệp cấu hình, chúng tôi cần khởi động lại daemon mongod.

Dưới đây là lệnh khởi động lại các dịch vụ MongoDB -

 $ sudo systemctl khởi động lại mongod 

Sau khi khởi động lại các dịch vụ, chúng tôi có thể kiểm tra trạng thái của các dịch vụ MongoDB bằng lệnh dưới đây -

 $ sudo systemctl status mongodOutput:mongod.service - Cơ sở dữ liệu hướng tài liệu không có lược đồ, hiệu suất cao ) kể từ Thứ Ba 2017-05-16 12:52:09 IST; 48 giây trước -config /etc/mongod.conf 16 tháng 5 12:52:09 ubuntu-16 systemd [1]:Đã bắt đầu Cơ sở dữ liệu hướng tài liệu không có lược đồ, hiệu suất cao. 

Xác minh xác thực trên Mongo DB

Trước tiên, hãy để chúng tôi kết nối với MongoDB mà không cần bất kỳ thông tin đăng nhập nào.

 $ mongoOutput:MongoDB shell phiên bản v3.4.4 đang kết nối với:mongodb://127.0.0.1:27017 Phiên bản máy chủMongoDB:3.4.4> 

Bây giờ, chúng tôi có thể thấy rằng tất cả các thông báo cảnh báo được hiển thị trong quá khứ đã được giải quyết và bây giờ chúng tôi sẽ kiểm tra xác thực bằng cách cố gắng kết nối với cơ sở dữ liệu kiểm tra.

> show dbs2017-05-16T12:56:17.306 + 0530 E QUERY [thread1] Error:listDatabases fail:{"ok":0, "errmsg":"admin không được ủy quyền thực thi lệnh {listDatabases:1.0} "," code ":13," codeName ":" Unauthorized "}:_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 

Chúng tôi có thể thấy rằng chúng tôi không thể tạo hoặc sử dụng cơ sở dữ liệu mà không có xác thực, bây giờ hãy thoát khỏi trình bao thử với xác thực.

Xác minh Quyền truy cập của Người dùng Quản trị

Bây giờ, hãy thử kết nối với cơ sở dữ liệu Quản trị viên bằng xác thực người dùng Quản trị viên. Dưới đây là lệnh kết nối với cơ sở dữ liệu bằng xác thực người dùng -

 $ mongo -u DBAdmin -p --authenticationDatabase adminMongoDB shell phiên bản v3.4.4Nhập mật khẩu:kết nối với:mongodb://127.0.0.1:27017 Phiên bản máy chủMongoDB:3.4.4> hiển thị dbsadmin 0.000GBlocal 0.000GB>  

Trong bài viết này, chúng tôi đã tìm hiểu cách bảo mật Mongo DB bằng cách thêm người dùng quản trị và bật xác thực làm cài đặt mặc định Mongo DB chưa bật xác thực người dùng mà bất kỳ người dùng nào cũng có thể tạo, xóa và sửa đổi cơ sở dữ liệu.