Tôi đã sử dụng người giám sát để quản lý quy trình Gunicorn chạy trang Django, mặc dù câu hỏi này có thể liên quan đến bất cứ điều gì được giám sát bởi người giám sát. Trước đây tôi là người duy nhất quản lý và sử dụng máy chủ của chúng tôi, và người giám sát chỉ chạy bằng root và tôi sẽ sử dụng sudo để chạy supervisorctl restart myapp
khi cần.
Bây giờ máy chủ của chúng tôi phải hỗ trợ nhiều người dùng làm việc trên các trang web khác nhau và mỗi dự án cần có khả năng khởi động lại các quy trình gunicorn của riêng họ mà không thể khởi động lại các quy trình của người dùng khác.
Tôi đã theo dõi bài viết trên blog này:
http://drumcoder.co.uk/blog/2010/nov/24/rucky-supervisorctl-non-root/
và đã có thể cho phép người dùng không phải root sử dụng giám sát, nhưng bây giờ bất kỳ ai cũng có thể khởi động lại quy trình của bất kỳ ai khác. Từ vẻ bề ngoài của nó, người giám sát không có cách nào thực hiện kiểm soát truy cập theo người dùng.
Bất cứ ai cũng có bất kỳ ý tưởng nào về cách cho phép người dùng chỉ khởi động lại các quy trình của riêng họ mà không cần root?
EDIT: Một số điều chúng tôi nghĩ đến bao gồm viết một tập lệnh được sở hữu bởi root với tập bit suid không chứa gì ngoài supervisorctl restart myapp
việc đưa nó vào thư mục của người dùng sở hữu myapp
. Internet dường như đang nói rằng một kịch bản như vậy là không an toàn nếu làm sai. Chúng tôi cũng đã xem xét việc viết một trình nền tùy chỉnh lắng nghe các lệnh từ người dùng cụ thể và khởi động lại quy trình giám sát nếu người dùng có quyền. Ý tưởng này có vẻ quá phức tạp nếu một giải pháp đơn giản hơn sẽ hoạt động.