NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
06/06/2023
Lượt xem

Hướng dẫn bảo mật MongoDB trên Ubuntu 20.04

06/06/2023
15 phút đọc
Lượt xem

Đánh giá

5/5 - (86 bình chọn)

Cơ sở dữ liệu luôn là một phần quan trọng không thể thiếu khi triển khai một web server. Tuy nhiên, việc đảm bảo cho cơ sở dữ liệu được an toàn là một vấn đề nhiều cá nhân và tổ chức phải đối mặt hiện nay. Để tìm hiểu một trong các phương pháp bảo mật cơ sở dữ liệu MongoDB trên Ubuntu, mời bạn cùng theo dõi bài viết về cách bảo mật MongoDB trên Ubuntu 20.04 sau đây của Vietnix.

Khái niệm MongoDB là gì?

MongoDB là một cơ sở dữ liệu hướng tài liệu (document database) được nhiều ứng dụng web hiện nay sử dụng. MongoDB thuộc nhóm cơ sở dữ liệu phi quan hệ (NoSQL database). Thay vì cấu trúc bảng truyền thống, MongoDB sử dụng lược đồ dữ liệu động (dynamic schema) và các document có định dạng JSON để tổ chức và lưu trữ dữ liệu.

Cơ sở dữ liệu MongoDB
Cơ sở dữ liệu MongoDB

Mặc định, MongoDB không bật xác thực người dùng. Bất cứ ai truy cập được server cài đặt Mongo đều có toàn quyền thêm, xóa, sửa với dữ liệu được lưu. Để khắc phục lỗ hổng này, Vietnix sẽ hướng dẫn các bạn cách tạo một người dùng quản trị (administrative user) và bật xác thực người dùng nhằm đảm bảo quản trị viên là người duy nhất có quyền truy cập cơ sở dữ liệu.

Chuẩn bị để bảo mật MongoDB trên Ubuntu 20.04

Trước khi bắt đầu bài hướng dẫn, các bạn cần chuẩn bị:

Nếu bạn đang tìm kiếm một giải pháp lưu trữ đáng tin cậy và tiết kiệm chi phí thì VPS Vietnix là một lựa chọn tuyệt vời. Với các gói VPS Vietnix, bạn sẽ không cần phải đầu tư một khoản lớn để sở hữu một máy chủ riêng của riêng mình.

Hiện nay, Vietnix cung cấp các gói dịch vụ máy chủ ảo phù hợp với nhu cầu của cá nhân, doanh nghiệp, với nhiều tùy chọn về cấu hình và mức giá như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU. Bạn có thể chọn một gói theo nhu cầu của mình và Vietnix sẽ cung cấp cho bạn một máy chủ ảo với toàn quyền quản trị tài nguyên của mình. Liên hệ với Vietnix để được tư vấn nhanh chóng và chi tiết nhất.

Bước 1 – Tạo người dùng quản trị cho MongoDB

Từ bản cập nhật 3.0, tiến trình quản lý tác vụ của MongoDB (MongoDB daemon) không còn cho phép Mongo tự động kết nối truy cập ngoại mạng mà chỉ có thể kết nối cục bộ từ socket Unix. Dù vậy, mặc định MongoDB vẫn chưa bật xác thực người dùng. Chỉ cần truy cập vào server, bất cứ ai cũng có toàn quyền quản lí các cơ sở dữ liệu.

Để hạn chế việc này, bạn sẽ tạo một người dùng quản trị, bật xác thực người dùng của MongoDB và đăng nhập với tư cách quản trị viên để truy cập cơ sở dữ liệu.

Đầu tiên, bạn kết nối bash shell Mongo bằng lệnh mongo để tạo người dùng quản trị. Vì xác thực người dùng chưa được bật, bạn không cần thêm các tham số khác.

$ mongo

Output sau sẽ xuất hiện trước shell prompt của Mongo để cảnh báo quản lí truy cập dữ liệu chưa được giới hạn:

Output
MongoDB shell version v4.4.0

 . . . 

2020-06-09T13:26:51.391+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-06-09T13:26:51.391+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

 . . .

>

Cảnh báo trên sẽ biến mất sau khi bảo mật Mongo. Tạm thời, output cho biết bất cứ ai có khả năng truy cập vào server Ubuntu đều có quyền quản lí cơ sở dữ liệu.

Để rõ hơn, bạn gọi lệnh show dbs:

> show dbs

Lúc này, show dbs sẽ liệt kê tất cả cơ sở dữ liệu hiện có trên server. Sau khi xác thực người dùng được kích hoạt, danh sách này sẽ thay đổi tùy theo role hoặc giới hạn truy cập của người dùng đối với từng cơ sở dữ liệu:

Output
admin   0.000GB
config  0.000GB
local   0.000GB

Trong ví dụ trên, output chỉ hiển thị các cơ sở dữ liệu mặc định. Tuy nhiên, nếu hệ thống có các cơ sở dữ liệu chứa thông tin nhạy cảm, bất cứ người dùng nào cũng có thể tìm thấy những cơ sở dữ liệu này khi gọi lệnh show dbs.

Để thêm một người dùng quản trị, bạn tiến hành kết nối tới cơ sở dữ liệu admin – nơi lưu các thông tin như tên đăng nhập, mật khẩu và role của người dùng:

> use admin
Output
switched to db admin

MongoDB hỗ trợ phương thức db.createUser để thêm người dùng mới cho cơ sở dữ liệu. Đây là một trong các phương thức JavaScript chạy trên shell (JavaScript-based shell method) được tích hợp khi cài đặt Mongo.

Bạn gọi db.createUser theo cú pháp:

> db.createUser(

Lưu ý: Cho đến khi kết thúc lệnh bằng dấu đóng ngoặc đơn, Mongo sẽ không thực thi phương thức db.createUser và prompt sẽ hiển thị dấu ba chấm () đầu dòng thay vì dấu lớn (>).

Bạn chuẩn bị tên đăng nhập, mật khẩu cũng như các role của người dùng quản trị. Vì dữ liệu được lưu dưới hình thức các document có dạng JSON, do đó khi thêm người dùng mới cho Mongo đồng nghĩa với việc thêm một document chứa thông tin người dùng trong các khóa.

Tương tự JSON object, một document bắt đầu và kết thúc bằng cặp dấu ngoặc nhọn ({}). Sau lời gọi db.createUser, bạn mở ngoặc nhọn để tiến hành thiết lập thông tin người dùng.

... {

Tạo khóa user: với giá trị là tên đăng nhập đặt trong cặp dấu nháy kép. Bài viết sử dụng tên AdminSammy nhưng bạn có thể chọn tên đăng nhập tùy thích. Đừng quên ngắt khóa bằng dấu phẩy trước khi đến khóa tiếp theo:

... user: "AdminSammy",

Tiếp tục thêm khóa pwd được gán phương thức passwordPrompt() làm giá trị. Khi thực thi, db.createUser sẽ gọi passwordPrompt() để yêu cầu bạn nhập mật khẩu. Cách làm này an toàn hơn việc nhập mật khẩu ở dạng ký tự như tên đăng nhập.

Lưu ý: passwordPrompt() chỉ được MongoDB hỗ trợ từ bản cập nhật 4.2 trở đi. Các phiên bản cũ hơn vẫn hiển thị mật khẩu dưới dạng ký tự thuần như tên đăng nhập.

... pwd: "password",

Ngắt khóa bằng dấu phẩy:

... pwd: passwordPrompt(),

Tiếp theo, bạn thêm role mong muốn cho người dùng quản trị. Là quản trị viên, ít nhất người dùng này cần role userAdminAnyDatabase trên cơ sở dữ liệu admin. Role này giúp quản trị viên có quyền thêm, chỉnh sửa và phân quyền cho các người dùng khác, đồng thời có quyền truy cập siêu người dùng (superuser) trên toàn bộ cluster (cụm cơ sở dữ liệu trong server).

Các bạn cũng thêm role readWriteAnyDatabase để cho phép quản trị viên đọc và chỉnh sửa tất cả cơ sở dữ liệu còn lại ngoại trừ configlocal (chủ yếu dùng để cấu hình cục bộ).

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

Đóng ngoặc nhọn để kết thúc document:

... }

Tiếp tục đóng ngoặc đơn để thực thi phương thức db.createUser:

... )

Bạn có thể kiểm tra lại lời gọi db.createUser hoàn chỉnh:

> db.createUser(
... {
... user: "AdminSammy",
... pwd: passwordPrompt(),
... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
... }
... )

Nếu không mắc lỗi cú pháp, db.createUser sẽ thực thi và yêu cầu nhập mật khẩu cho người dùng mới:

Output
Enter password: 

Bạn nên đặt cho quản trị viên một mật khẩu mạnh. Sau khi nhập xong, bạn sẽ nhận được thông báo thêm mới người dùng thành công:

Output
Successfully added user: {
	"user" : "AdminSammy",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		},
		"readWriteAnyDatabase"
	]
}

Thoát MongoDB client bằng lệnh exit:

> exit

Đến đây, cơ sở dữ liệu đã có thể truy cập bằng người dùng vừa tạo. Tuy nhiên, bạn sẽ không được yêu cầu đăng nhập trước khi bật xác thực người dùng và khởi động lại MongoDB daemon.

Bước 2 – Kích hoạt xác thực người dùng cho Mongo

ở bước này, bạn sẽ tiến hành cấu hình file mongodb.conf để bật tính năng xác thực người dùng cho MongoDB. Sau khi service tái khởi động, tuy người dùng vẫn có thể kết nối ẩn danh nhưng không thể xem hoặc chỉnh sửa cơ sở dữ liệu nếu không cung cấp tên đăng nhập và mật khẩu chính xác.

Sử dụng nano hoặc trình biên tập văn bản yêu thích để mở file cấu hình:

$ sudo nano /etc/mongod.conf

Bạn tìm mục security đã được comment (chú thích) theo mặc định:

. . .
#security:

#operationProfiling:

. . .

Xóa ký tự # đầu dòng để bỏ comment:

. . .
security:

#operationProfiling:

. . .

Thêm vào security tham số authorization với giá trị enabled:

. . .
security:
  authorization: enabled
. . .

Chú ý không chừa khoảng trắng đầu dòng security và lùi 2 khoảng trắng cho tham số authorization.

Lưu lại thay đổi sau khi thiết lập. Nếu sử dụng nano, bạn nhấn tổ hợp phím CTRL+X, chọn Y rồi ENTER để đóng và lưu file.

Khởi động lại daemon để cấu hình mới được áp dụng:

$ sudo systemctl restart mongod

Bạn có thể kiểm tra service bằng lệnh dưới đây:

$ sudo systemctl status mongod

Nếu restart thành công, output sẽ hiển thị thông báo service mongo đã chạy ổn định sau khi tái khởi động:

Output
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-09 22:06:20 UTC; 7s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 15370 (mongod)
     Memory: 170.1M
     CGroup: /system.slice/mongod.service
             └─15370 /usr/bin/mongod --config /etc/mongod.conf

Jun 09 22:06:20 your_host systemd[1]: Started MongoDB Database Server.

Bước tiếp theo, bạn sẽ tiến hành kiểm tra lại nhằm đảm bảo các thiết lập xác thực đã hoạt động.

Bước 3 – Kiểm tra thiết lập xác thực người dùng

Trước khi bắt đầu, bạn kết nối cơ sở dữ liệu theo cách tương tự bước 1 để xác nhận MongoDB đã được giới hạn truy cập:

$ mongo

Output không còn hiển thị các cảnh báo bảo mật sau khi Mongo bật xác thực người dùng:

Output
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("5d50ed96-f7e1-493a-b4da-076067b2d898") }
MongoDB server version: 4.4.0
> 

Gọi lệnh show dbs để chắc chắn truy cập đã bị giới hạn:

> show dbs

Lần này, show dbs không còn hiển thị các cơ sở dữ liệu mặc định như trước vì người dùng hiện tại không có quyền truy cập Mongo. Nếu không nhận được output đồng nghĩa với việc các bạn đã thiết lập xác thực người dùng thành công. Ngoài ra, Mongo cũng không cho phép thêm người dùng hoặc thực hiện các hành động yêu cầu phân quyền khác khi chưa đăng nhập.

Sau đó, bạn tạm thoát shell MongoDB.

Lưu ý: Tổ hợp phím CTRL+C là một cách khác để đóng shell thay cho lệnh exit:

> exit

Kế đến, bạn đăng nhập cơ sở dữ liệu với tư cách quản trị viên để chắc chắn các thiết lập của người dùng này đã được áp dụng. Thêm vào lời gọi mongo cờ -u cho tên đăng nhập, cờ -p để yêu cầu mật khẩu và cơ sở dữ liệu xác thực admin được cấu hình cho quản trị viên ở bước 2:

$ mongo -u AdminSammy -p --authenticationDatabase admin

Sau khi nhập mật khẩu và kết nối thành công MongoDB shell, bạn gọi lại lệnh show dbs:

> show dbs

Nếu người dùng quản trị đã được xác thực, output sẽ hiển thị danh sách tất cả cơ sở dữ liệu hiện có trên server:

Output
admin   0.000GB
config  0.000GB
local   0.000GB

Đến đây, MongoDB của các bạn đã được cấu hình xác thực thành công.

Nếu bạn gặp vấn đề khi thực hiện các thao tác bảo mật MongoDB trên hệ thống, hoặc cảm thấy chúng quá phức tạp thì cũng đừng lo lắng. Bạn có thể tham khảo sử dụng dịch vụ VPS của Vietnix để được hỗ trợ cài đặt nhanh chóng. Với hơn 11 năm kinh nghiệm trong lĩnh vực này, Vietnix đã kích hoạt hơn 100.000 dịch vụ và đồng hành cùng hơn 50.000 khách hàng cá nhân, doanh nghiệp như GTV, UB Group, iVIVU, Vietnamworks, SEOSONA, SAGO Media,… Đội ngũ kỹ thuật của Vietnix luôn túc trực 247 sẵn sàng hỗ trợ mọi vấn đề phát sinh trong quá trình sử dụng.

Không chỉ vậy, có đến 97% khách hàng còn giới thiệu dịch vụ của Vietnix sau khi sử dụng. Đây cũng là một trong những lý do giúp Vietnix nhận được giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022. Hãy để Vietnix trở thành người đồng hành giúp bạn có thể an tâm kinh doanh trên internet.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Hotline: 1800 1093.
  • Email: sales@vietnix.com.vn.

Lời kết

Bên trên là toàn bộ các thao tác để tạo một người dùng quản trị và bảo mật MongoDB bằng cách kích hoạt tính năng xác thực người dùng. Mong rằng qua bài viết hướng dẫn bảo mật MongoDB trên Ubuntu 20.04 này đã giúp bạn tự thay đổi cấu hình phiên bản MongoDB theo nhu cầu bảo mật của mình. Rất cảm ơn bạn đã cùng Vietnix theo dõi bài viết và mong được gặp lại các bạn trong những bài viết tiếp theo về chủ đề MongoDB.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG