2013-06-05 42 views
9

Chúng tôi có cài đặt Ubuntu12.04 + PHP + nginx trên máy chủ của chúng tôi. Các nhà phát triển của chúng tôi có quyền truy cập vào cả thư mục/usr/lib/php5/và/var/www /. Chúng tôi làm việc trên rất nhiều dự án và tại thời điểm nhất định có 50-100 ứng dụng/mô-đun khác nhau với mỗi hoạt động db.Bảo mật mật khẩu trong thiết lập nginx Multi-Dev

Chúng tôi muốn đưa ra một cơ chế để bảo đảm mật khẩu DB của chúng tôi với những yếu tố sau:

  • Các quản trị hệ thống tạo ra các mật khẩu và đăng ký nó ở đâu đó (một tập tin, hoặc một db sql hoặc một số ví dụ)
  • Ứng dụng cung cấp khóa cho biết DB và cấp độ quyền nào họ muốn và mô-đun này trả về đối tượng chứa mọi thứ cần thiết cho kết nối. Một cái gì đó như "user_manager.client1.ro", "user_manager.client1.rw".
  • Cơ chế phải cung cấp mật khẩu cụ thể cho ứng dụng và do đó có thể truy cập bằng 'www-data', nhưng không thể xem tất cả mật khẩu khác trừ khi khóa của chúng được xác định.

Chúng tôi đã quản lý để lấy nguyên mẫu, nhưng mô-đun cung cấp mật khẩu trung tâm chạy trong không gian www-data và do đó tệp/sqlite luôn có thể truy cập được bằng bất kỳ tệp nào khác trong/var/www/hoặc/usr/lib/php5 và do đó tất cả các mật khẩu có thể bị xâm phạm.

Có cách nào để thiết lập mọi thứ sao cho mô-đun cung cấp mật khẩu chạy ở quyền root và ứng dụng yêu cầu mật khẩu từ điều này? Tôi biết chúng tôi có thể xây dựng một dịch vụ hoàn toàn mới cho việc này, nhưng có vẻ như quá nhiều để xây dựng và duy trì (đặc biệt vì dịch vụ này trở thành điểm thất bại duy nhất của chúng tôi.)

Bất kỳ đề xuất nào?

+0

Chỉ để hiểu rõ hơn câu hỏi của bạn: là mô-đun được viết bằng PHP? Bạn có muốn một giải pháp hoàn toàn sử dụng mô-đun này hay bạn chỉ có thể chơi với quyền hạn của tệp? Bắt buộc mọi nhà phát triển có duy trì quyền truy cập vào tất cả các tệp không? – St0rM

+0

Mô-đun cung cấp mật khẩu trung tâm hiện ở dạng PHP và không là gì ngoài một lớp PHP thông thường. Chúng tôi mở cửa cho các ý tưởng, vì vậy mọi thứ có quyền đối với tệp đều tốt với chúng tôi. Đối với nhà phát triển có quyền truy cập vào tất cả các tệp - xem xét chúng tôi là một nhóm nhỏ với mỗi dev đội mũ nhiều, tách quyền truy cập sẽ khá khó khăn - vì vậy tôi sẽ không thỏa hiệp về nó. – Shreeni

+0

Không có cách nào tôi có thể nghĩ rằng có thể giải quyết vấn đề của bạn nếu bạn muốn mỗi nhà phát triển truy cập mọi thứ và ngăn họ truy cập cơ sở dữ liệu. Bạn đang cấp cho họ quyền truy cập vào thứ gì đó có quyền truy cập đó (tức là mã), vì vậy họ S have có quyền truy cập vào db. Ví dụ, họ có thể viết một dòng mã đọc mật khẩu và lưu nó vào một tập tin ẩn ... Tôi tin rằng có điều gì đó sai trong chính câu hỏi đó. – St0rM

Trả lời

1

Sử dụng điều khoản, bạn có thể làm một cái gì đó như:

1) cung cấp cho một nhà phát triển người dùng

2) chown mỗi thư mục dưới/var/www/người sử dụng www-data, và một nhóm cụ thể cho trang web đó, một cái gì đó như: /var/www/trang web một www-data nhóm một /var/www/site-b www-data nhóm b , vv

3) chmod mỗi thư mục (và tất cả thư mục con và tệp có -R) đến 770

4) thêm từng nhà phát triển vào mọi nhóm mà anh ấy đang thực sự phát triển.

0

Cách tiếp cận khác, như tôi đã đề cập trong một different answer, sẽ là để cung cấp khóa mật mã qua API, khi ứng dụng yêu cầu.

Nhà phát triển đáng tin cậy của bạn khi đó sẽ truy vấn API bằng khóa duy nhất để nhận thông tin xác thực có liên quan. Khóa có thể được ánh xạ tới một tập hợp các thông tin xác thực (cho các nhà phát triển trên một số dự án).

Nếu bạn bảo vệ API bằng cách lọc client certificate hoặc IP, bạn sẽ giảm nguy cơ rò rỉ dữ liệu (nếu khóa truy cập bị mất, bạn vẫn cần phải ở đúng mạng hoặc có chứng chỉ để truy cập API). Tôi sẽ ủng hộ chứng chỉ nếu bạn tin tưởng các nhà phát triển (theo nhận xét của bạn).

0

Giải pháp đơn giản nhất là chạy ứng dụng quản lý thông tin đăng nhập và giao cho nhà phát triển từ một phiên bản khác của máy chủ web (rõ ràng đang nghe trên một cổng khác) và sau đó bạn có thể chạy phiên bản đó làm người dùng khác giảm quyền truy cập để chỉ người dùng đó có quyền truy cập vào các tệp bí mật cần thiết.

Nhưng tạo người dùng bổ sung, đừng chạy nó dưới dạng gốc.

Theo apache tôi muốn trỏ đến suexec hoặc suPHP. Nhưng kể từ khi bạn không sử dụng apache, đó không phải là một lựa chọn cho bạn.

Các vấn đề liên quan