2011-11-27 28 views
8

Tôi đang tìm "Thực tiễn tốt nhất về bảo mật" cho máy chủ MongoDB, ngoài các phương pháp hay nhất về bảo mật của máy chủ "chung". Bạn có thể chỉ cho tôi các tài nguyên hữu ích không?MongoDB Security

+0

Có thông tin xuất sắc trong các câu trả lời dưới đây. Tôi thường thấy các câu hỏi đóng lại là "không mang tính xây dựng" có thông tin mà tôi không thể dễ dàng tìm thấy nếu không có sự trợ giúp của những người đã tổng hợp nó ở đây. Tôi muốn nói "đừng nản chí khi câu hỏi bạn hỏi hoặc câu trả lời được đóng lại." Tôi nghĩ rằng có rất nhiều đóng cửa quá nhiệt tình và closers. Tôi trả lời rất nhiều câu hỏi 'bash' và có thể cho bạn biết không bao giờ có một cách * trả lời * tốt nhất, nhưng những câu hỏi đó không bao giờ bị đóng lại. –

Trả lời

5

Có hai phương pháp:

  1. cài đặt MongoDB mà không--auth tùy chọn trong môi trường tin cậy. Thông thường đó là mạng cục bộ nơi ứng dụng, cơ sở dữ liệu được cài đặt. Và các máy chủ bên ngoài mạng này không có quyền truy cập vào mongodb và các tài nguyên khác.
  2. cài đặt mongodb với--auth tùy chọn trong môi trường nơi các cổng mongodb không bị tường lửa chặn và mọi người đều có thể truy cập nó.

thông tin chi tiết về bảo mật bạn có thể tìm thấy here.

7

Mối quan ngại về bảo mật luôn dành riêng cho ứng dụng. Nó thực sự không thể trả lời câu hỏi này một cách tổng quát.

Thông thường, các ứng dụng dựa trên cơ sở dữ liệu NOSQL sẽ dễ bị OWASP A4 - Insecure Direct Object Reference. Cần lưu ý rằng giá trị _ID không phải là một nonce mã hóa, giá trị này phụ thuộc rất nhiều vào một dấu thời gian và ở đó khá dễ dàng cho kẻ tấn công để đoán các giá trị này.

Một vấn đề phổ biến khác là CWE-602 - client side enforcement of server side security. Khách hàng không bao giờ được tin cậy và nếu họ tương tác với cơ sở dữ liệu trực tiếp thì họ sở hữu cơ sở dữ liệu, khoảng thời gian.

2

Giả sử bạn có một dịch vụ web tương tác với MongoDB

  • Các máy chủ duy nhất xứng đáng quyền, bạn cần đăng nhập thường xuyên để cho các quyền truy cập máy chủ cặp với một khách hàng sử dụng một phiên làm việc. Bằng cách đó, bạn nên tránh các quyền giả mạo.

  • Lọc tất cả các yêu cầu của khách hàng. Điều đó là khá dễ dàng, Mongo yêu cầu là một JSON, bạn có thể hạn chế jSON đến một số specific schema cũng như quá tải yêu cầu với các giới hạn/hạn chế. Lưu ý rằng máy chủ sẽ quá tải yêu cầu bằng cách sử dụng các biến của phiên. Điều này có thể được thực hiện cả hai để hạn chế truy cập mà còn để tránh các khách hàng gửi yêu cầu nặng mà sẽ quá tải hệ thống của bạn.

  • Lọc lại kết quả, "tỉa cây". Đây có thể là lần kiểm tra cuối cùng nếu ví dụ bạn đồng ý trả lại tên của người dùng nhưng không phải là id của người đó. Điều này cho biết, điều này có nhiều khả năng một bước nữa để lọc yêu cầu của khách hàng.

  • Sử dụng kết nối bảo mật https. Điều này sẽ bảo đảm cả khách hàng của bạn đang nói chuyện với máy chủ phù hợp nhưng máy chủ của bạn vẫn đang nói chuyện với cùng một máy khách (không bị xâm nhập vào lý thuyết).

  • Tránh ngăn xếp bất kỳ thông tin nào với nhau, hãy thử sử dụng các mô hình càng nhiều càng tốt theo cách đó bạn sẽ hiểu rõ hơn nhưng cũng tránh được thông tin nhạy cảm được lưu trữ ở vị trí không chính xác.

10

gì về cơ bản cần phải làm là

Bật xác thực

mở MongoDB shell

use admin 
db.addUser("admin","adminpassword") 

(Lưu ý: bạn sẽ cần một tài khoản admin trước khi bạn kích hoạt tính năng xác thực, nếu không bạn sẽ mất quyền truy cập vào dữ liệu).

Bây giờ chỉnh sửa các tập tin cấu hình MongoDB sudo vi /etc/mongodb.conf

và bỏ ghi chú auth=true. Lưu nó và khởi động lại Mongo db sudo service mongodb restart

Bind MongoDB vào mạng đáng tin cậy hoặc máy

Sửa MongoDB tập tin cấu hình và thêm bind_ip = 127.0.0.1 hoặc một dấu phẩy tách ra danh sách các IP đó sẽ có thể kết nối với MongoDB. Sau đó khởi động lại.

Để biết thêm thông tin bạn có thể tìm thấy một hướng dẫn để làm những trên trang web của tôi here

+0

Câu trả lời này thực sự khá biên giới, theo ý kiến ​​của tôi; nó tự quảng cáo và không thực sự bao gồm bất kỳ thông tin giá trị nào tại đây, trên trang web này. Cuối cùng, bạn đã bỏ quên bao gồm việc tiết lộ bắt buộc rằng đó là trang web của bạn mà bạn đang liên kết. Tôi đang thêm tiết lộ ở đây; ** Đừng quên tiết lộ trong tương lai **, xin vui lòng. –

+0

Chắc chắn tôi sẽ làm điều này vào lần sau. – Manu