Hôm qua là ngày đầu tuần, khi truy cập vào cơ sở dữ liệu mongodev thì phát hiện ra chỉ còn 1 vài bản ghi, và một db collection với tên PLEASE_READ với dòng thông báo: Your DB is Backed up at our servers, to restore send 0.1 BTC to the Bitcoin Address then send an email with your server ip

Ngơ ngác và thật bối rối ! 😀

// db.getCollection('PLEASE_READ').find({})
/* 1 */
{
    "_id" : ObjectId("587429850c474c1284912b9d"),
    "Info" : "Your DB is Backed up at our servers, to restore send 0.1 BTC to the Bitcoin Address then send an email with your server ip",
    "Bitcoin Address" : "1J5ADzFv1gx3fsUPUY1AWktuJ6DF9P6hiF",
    "Email" : "kraken0@india.com"
}

Thường thì các cơ sở dữ liệu giống như MySQL, MSSQL, Oracle, Postgres, … thường được kích hoạt sẵn các cơ chế xác thực cơ bản. Nhưng trong trường hợp của MongoDB thì không giống như vậy, nó mặc định không được kích hoạt cơ chế xác thực mặc định nào cả @@. Điều này dẫn tới việc truy nhập tự do từ bên ngoài bởi bất kỳ ai (csdl, data).

Bài viết này tổng hợp lại các bước đơn giản để kích hoạt cơ chế xác thực cơ bản cho MongoDB 3.x như sau đây:

1. Khởi động mongodb

Bước này không cần thực hiện, nếu mongo server đang chạy rồi. Chú ý cổng 27017, là cổng mặc định của mongo, bạn cũng có thể thay đổi cổng mặc định này để nâng cao khả năng an toàn cho csdl.

$ mongod --port 27017 --dbpath /data/db1

2. Kết nối vào mongo shell

$ mongo --port 27017

3. Tạo tài khoản quản trị cao nhất

Bước này, bạn sẽ khởi tạo 1 tài khoản quản trị cao nhât, có đặc quyền root. Ví dụ, là superAdmin và mật khẩu admin9x:

$ use admin
$ db.createUser(
  {
    user: "superAdmin",
    pwd: "admin9x",
    roles: [ { role: "root", db: "admin" } ]
  })

4. Cấu hình yêu cầu xác thực

Bạn hãy thêm 1 cấu hình security vào trong file: /etc/mongod.conf với nội dung như thế này.

systemLog:
 destination: file
 path: /usr/local/var/log/mongodb/mongo.log
 logAppend: true
storage:
 dbPath: /usr/local/var/mongodb
net:
 bindIp: 127.0.0.1
security:
 authorization: enabled

Khởi động lại mongodb, sau khi thay đổi cấu hình:

$ sudo service mongod restart

5. Đăng nhập với tài khoản quản trị

mongo --port 27017 -u superAdmin -p --authenticationDatabase admin

Sau đó, mongo yêu cầu bạn nhập password thì hãy nhập vào mật khẩu đã thiết lập ở bên trên: admin9x

6. Tạo một tài khoản đọc/ghi cho một cơ sở dữ liệu cụ thể

Cú pháp lệnh rất đơn giản như sau:

$ mongo --port 27017 -u superAdmin -p --authenticationDatabase admin
$ use myAppDb
$ db.createUser(
  {
   user: "myAppDbUser",
   pwd: "myApp123",
   roles: [ "readWrite"]
  })

7. Kết nối và đăng nhập với tài khoản đã bị giới hạn quyền vừa tạo

Bạn có thể nhập trực tiếp mật khẩu trên dòng lệnh, nhưng điều này là hạn chế và không nên vì dễ bị lộ thông tin bởi lệnh history

mongo --port 27017 -u "myAppDbUser" -p "myApp123" --authenticationDatabase "myAppDb"

Như vậy là đã xong, bạn có thể sử dụng thông tin tài khoản vừa tạo để đăng nhập cho các ứng dụng từ xa của bạn. Chúc thành công !

Liên kết tham khảo

About The Author