Hiển thị người dùng mongodb
Một phân vùng gần đây cho thấy có ít nhất 30. 000 trường hợp MongoDB không được bảo mật trên Internet, có nghĩa là bất kỳ ai cũng có thể truy cập dữ liệu mà không cần bất kỳ loại xác thực nào Tài liệu chính thức MongoDB có thể cảm thấy hơi phức tạp về cách thiết lập xác thực đúng trên MongoDB, vì vậy bài viết này hy vọng sẽ giúp bạn có một cấu hình cơ bản ban đầu Trước khi chúng ta bắt đầu, hãy chắc chắn rằng bạn đã cài đặt MongoDB trên hệ thống của mình. Bài viết có thể áp dụng với các phiên bản mongodb từ 3. 0. x trở lên Cũng lưu ý rằng MongoDB hỗ trợ nhiều hơn một cơ chế xác thực , về cơ bản là các thông số kỹ thuật của quá trình xác thực bằng mật khẩu
MongoDB 4. 0 loại bỏ khả năng tương thích cho cơ chế xác thực được gọi là MONGODB-CR và thay vào đó sử dụng theo mặc định cả SCRAM-SHA-1 và SCRAM-SHA-256. Sự khác biệt là thuật toán băm được sử dụng trong quá trình. Do SHA-1 bắt đầu được xem xét là yếu tố có khả năng chống va chạm, SHA-256 hiện được MongoDB hỗ trợ Tóm tắt, trong MongoDB 3. x, cơ chế xác thực mặc định là SCRAM-SHA-1, trong khi ở MongoDB 4. 0, both SCRAM-SHA-1 and SCRAM-SHA-256 đều được bật theo mặc định. Bạn có thể không cần phải lắng nghe về điều này, nhưng bạn phải đảm bảo rằng ứng dụng khách bạn đang sử dụng để kết nối với MongoDB Hỗ trợ một trong hai cơ chế xác thực được đề cập ở trên Bạn có thể tìm hiểu thêm về SCRAM tại đây và về các thay đổi bảo mật trong MongoDB 4. 0 tại đây Trong hướng dẫn này, chúng tôi sẽ tạo ra 2 Người dùng
Nội dung chính Please started by how to create Người dùng thực tế. Open db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })8 shell của bạn và chuyển sang cơ sở dữ liệu db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9 use admin Tạo người dùng db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9 (bạn có thể gọi nó là bất cứ điều gì bạn muốn) db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) You can you see the command has a complex. Chúng ta đang chuyển một đối tượng db.auth("admin", "adminpassword")1 đến chức năng creatUser , trong đó có chứa một mảng db.auth("admin", "adminpassword")2 của User. Trong mảng chúng ta có một đối tượng db.auth("admin", "adminpassword")2 của Người dùng, trong đó xác định những gì Người dùng có thể làm và trên cơ sở dữ liệu nào Trong trường hợp này, chúng tôi cung cấp cho Người dùng vai trò db.auth("admin", "adminpassword")4. Điều này có nghĩa là Người dùng db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9 sẽ có thể quản lý (tạo, cập nhật, xóa) Người dùng trên tất cả các cơ sở dữ liệu của phiên bản MongoDB Bảo đảm bạn sử dụng mật khẩu an toàn cho Người dùng db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9, điều tốt nhất là do người quản lý mật khẩu tạo ra Bạn có thể kiểm tra xem Người dùng đã được tạo chính xác bằng lệnh này chưa ________số 8_______Lệnh sẽ đăng nhập bạn theo định dạng db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9. Now exit from shell exit Bây giờ chúng ta sẽ kích hoạt xác thực trên phiên bản MongoDB, bằng cách sửa đổi tệp db.auth("admin", "adminpassword")8. Nếu bạn đang sử dụng Linux sudo nano /etc/mongod.conf Thêm các dòng này vào bên dưới cùng của tệp cấu hình YAML security: authorization: enabled Điều này sẽ cho phép xác thực trên cơ sở dữ liệu của bạn. Với nano , lưu bằng CTRL + X và xác nhận với db.auth("admin", "adminpassword")9 Bây giờ khởi động lại dịch vụ mongod (cu pháp Ubuntu) sudo service mongod restart Bạn có thể kiểm tra xem dịch vụ có hoạt động không sudo service mongod status Please quay trở lại trong db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })8 shell. Chuyển sang cơ sở dữ liệu db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })9 và xác thực với người dùng đã tạo trước đó (được gọi là quản trị viên Cameron). Cho rằng Người dùng có vai trò trò chơi của UserAdAdmin, nó sẽ có thể tạo và quản lý những Người dùng khác use admin db.auth("admin", "adminpassword") Bây giờ chúng ta sẽ chuyển sang cơ sở dữ liệu đã được tạo và tạo một người dùng mới dành riêng cho cơ sở dữ liệu Lệnh sau sẽ tạo Người dùng với vai trò exit2 trên cơ sở dữ liệu. Vai trò exit2 sẽ cấp cho Người dùng quyền đọc và ghi trên tất cả các bộ sưu tập của cơ sở dữ liệu. Đọc thêm use yourdatabase db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] }) Kiểm tra xem mọi thứ đã ổn bằng cách cố gắng xác thực, với exit4 db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })0 Như vậy phiên bản MongoDB của bạn đã được bảo mật, miễn phí là bạn đã sử dụng mật khẩu mạnh Khi kết nối với máy chủ MongoDB yêu thích của bạn từ một ứng dụng, hãy sử dụng chuỗi kết nối sẽ như thế này db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })1 Bảo vệ khỏi truy cập bên ngoài Bây giờ chúng ta sẽ kiểm tra xem phiên bản MongoDB chỉ nghe trên giao diện loopback. Điều này có nghĩa là DBMS sẽ chỉ chấp nhận kết nối với cơ sở dữ liệu khi chúng đến từ máy chủ chính Tất nhiên, bạn có thể điều chỉnh điều này theo nhu cầu của mình, ví dụ như bằng cách cho phép truy cập trên giao diện mạng riêng, nhưng điều quan trọng cần hiểu là bạn nên quyết định cẩn thận những giao diện MongoDB nào nên lắng nghe. Do đó, bạn nên tránh lộ cổng trên Internet nếu bạn không yêu cầu truy cập nó từ bên ngoài. Vì vậy, hãy mở lại db.auth("admin", "adminpassword")8 trong chế độ chỉnh sửa, vì chúng ta sẽ kiểm tra tùy chọn exit6. Tùy chọn mà cho biết quá trình mongod mà nó đang lắng nghe Ví dụ về cấu hình bindIpdb.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })2 Với cấu hình này, MongoDB sẽ chỉ nghe trên 127. 0. 0. 1 ( máy chủ cục bộ ). Điều đó có nghĩa là bạn sẽ chỉ có thể kết nối với cơ sở dữ liệu của mình bên trong máy chủ
db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })3 Với cấu hình này, MongoDB sẽ lắng nghe 0. 0. 0. 0 (tất cả các mạng). Nó có nghĩa là mongod sẽ lắng nghe tất cả các giao diện được cấu hình trên hệ thống của bạn. Xin lưu ý rằng theo cách này, bạn có thể cho phép mọi người trên Internet truy cập vào cơ sở dữ liệu của bạn (tất nhiên là họ không thể có thông tin xác thực, vì vậy, đặc biệt lưu ý đến mật khẩu Bạn có thể làm cho MongoDB nghe trên nhiều giao diện, bằng cách tách chúng bằng dấu phẩy. Điều này hữu ích nếu bạn muốn làm cho MongoDB nghe trên máy chủ cục bộ và giao diện mạng riêng db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })4 Một giải pháp mà bạn có thể cân nhắc là đặt exit7 tùy chọn exit8 và sau đó cấu hình tường lửa (như FireHOL ) để lọc các yêu cầu TCP đến trên cổng MongoDB và chỉ cho phép chúng trên các công cụ giao diện có thểend Sau khi bạn cấu hình thành công xác thực trên mongodb của mình, bạn có thể phần nào an tâm hơn về nó. Tất nhiên việc bảo mật cơ sở dữ liệu không chỉ đơn giản như vậy mà bạn phải kết hợp theo nhiều cách thức khác nhau để bảo vệ cơ sở dữ liệu của bạn một cách an toàn trên internet. Có những bước khác bạn có thể thực hiện để bảo mật cho MongoBD của mình, bao gồm cấu hình của tường lửa và TLS để liên lạc với máy khách-máy chủ. Các chủ đề này được đề cập trong Hướng dẫn bảo mật chính thức |