จำกัด กระบวนการที่ผู้ใช้สามารถรีสตาร์ทด้วยหัวหน้างานได้หรือไม่


14

ฉันใช้หัวหน้างานเพื่อจัดการกระบวนการของ 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อินเทอร์เน็ตดูเหมือนจะบอกว่าสคริปต์ดังกล่าวไม่ปลอดภัยหากทำผิด นอกจากนี้เรายังพิจารณาการเขียนดีมอนที่กำหนดเองซึ่งรับฟังคำสั่งจากผู้ใช้เฉพาะและรีสตาร์ทกระบวนการผู้ดูแลหากผู้ใช้มีสิทธิ์ แนวคิดนี้ดูซับซ้อนเกินไปหากวิธีแก้ปัญหาที่ง่ายกว่าใช้งานได้

คำตอบ:


33

คุณสามารถใช้sudoแทนสคริปต์ที่กำหนดเองของคุณเพื่อทำสิ่งเดียวกัน นั่นคือเนื่องจากการsupervisordกำหนดค่าเริ่มต้นซึ่งมีเพียงรูทเท่านั้นที่สามารถรันsupervisorctlได้คุณสามารถใส่รายการแบบนี้ลงใน/etc/sudoers:

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

นี้จะช่วยให้aliceการทำงานsudo /usr/bin/supervisorctl restart app1เป็นหลักโดยไม่ต้องใส่รหัสผ่านและมันจะช่วยให้การเริ่มต้นใหม่bobapp2


อ่าเยี่ยมมาก นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณสำหรับความช่วยเหลือของคุณ!
davidscolgan

1
โปรดทราบว่าคุณควรเพิ่มสตริงนี้หลังจากกฎเช่น%sudo ALL=(ALL:ALL) ALL
ПавелТявин
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.