ฉันใช้หัวหน้างานเพื่อจัดการกระบวนการของ Gunicorn ที่ใช้เว็บไซต์ Django แม้ว่าคำถามนี้อาจเกี่ยวข้องกับสิ่งใดก็ตามที่ถูกควบคุมโดยหัวหน้างาน ก่อนหน้านี้ฉันเป็นคนเดียวที่จัดการและใช้เซิร์ฟเวอร์ของเราและหัวหน้างานก็วิ่งตามรูทและฉันจะใช้ sudo เพื่อทำงานsupervisorctl restart myapp
เมื่อจำเป็น
ตอนนี้เซิร์ฟเวอร์ของเราต้องรองรับผู้ใช้หลายคนที่ทำงานในไซต์ที่ต่างกันและแต่ละโครงการต้องสามารถเริ่มกระบวนการ Gunicorn ของตนเองใหม่โดยไม่สามารถรีสตาร์ทกระบวนการของผู้ใช้รายอื่น
ฉันติดตามโพสต์บล็อกนี้:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
และสามารถอนุญาตให้ผู้ใช้ที่ไม่ใช่รูทใช้งาน supervisorctl แต่ตอนนี้ทุกคนสามารถรีสตาร์ทกระบวนการของผู้อื่นได้ จากรูปลักษณ์ของมันหัวหน้างานไม่มีวิธีการควบคุมการเข้าถึงแบบผู้ใช้แต่ละคน
ทุกคนมีแนวคิดใด ๆ เกี่ยวกับวิธีอนุญาตให้ผู้ใช้รีสตาร์ทเฉพาะกระบวนการของตนเองโดยไม่ต้องรูท
แก้ไข: บางสิ่งบางอย่างที่เราเคยคิดเกี่ยวกับการรวมถึงการเขียนสคริปต์ที่เป็นเจ้าของโดยรากกับชุดบิต SUID ที่มีอะไร แต่และวางไว้ในไดเรกทอรีของผู้ใช้ที่เป็นเจ้าของsupervisorctl restart myapp
myapp
อินเทอร์เน็ตดูเหมือนจะบอกว่าสคริปต์ดังกล่าวไม่ปลอดภัยหากทำผิด นอกจากนี้เรายังพิจารณาการเขียนดีมอนที่กำหนดเองซึ่งรับฟังคำสั่งจากผู้ใช้เฉพาะและรีสตาร์ทกระบวนการผู้ดูแลหากผู้ใช้มีสิทธิ์ แนวคิดนี้ดูซับซ้อนเกินไปหากวิธีแก้ปัญหาที่ง่ายกว่าใช้งานได้