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?
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
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
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