Bir kullanıcının amir ile yeniden başlatabileceği işlemleri sınırlayın?


14

Django sitesi çalıştıran bir Gunicorn sürecini yönetmek için amiri kullandım, ancak bu soru amir tarafından yönetilen herhangi bir şeyle ilgili olabilir. Daha önce sunucumuzu yöneten ve kullanan tek kişiydim ve danışman sadece root olarak koştu ve supervisorctl restart myappgerektiğinde çalıştırmak için sudo kullanıyordum .

Artık sunucumuzun farklı sitelerde çalışan birden fazla kullanıcıyı desteklemesi gerekiyor ve her projenin, diğer kullanıcıların süreçlerini yeniden başlatamadan kendi gunicorn süreçlerini yeniden başlatabilmesi gerekiyor.

Bu blog gönderisini takip ettim:

http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/

root olmayan kullanıcıların supervisorctl kullanmasına izin verebildik, ancak şimdi herkes başka birinin işlemlerini yeniden başlatabilir. Görünüşe göre, süpervizörün kullanıcı başına erişim kontrolü yapmanın bir yolu yoktur.

Herkesin root olmadan kendi süreçlerini yeniden başlatmasına nasıl izin verileceği konusunda bir fikri olan var mı?

DÜZENLEME: Düşündüğümüz bazı şeyler, kökten sahip olduğu bir komut dosyasını, başka bir şey içermeyen suid bit kümesiyle yazmak supervisorctl restart myappve sahibi olan kullanıcının dizinine koymaktır myapp. İnternet böyle bir betiğin yanlış yapılması durumunda güvensiz olduğunu söylüyor. Ayrıca, belirli kullanıcıların komutlarını dinleyen ve kullanıcının izni varsa süpervizör sürecini yeniden başlatan özel bir arka plan programı yazmayı da düşündük. Daha basit bir çözüm işe yarayacaksa bu fikir aşırı derecede karmaşık görünüyor.

Yanıtlar:


33

sudoAynı şeyi gerçekleştirmek için özel komut dosyanız yerine kullanabilirsiniz . Yani, supervisordyalnızca kökün çalışabileceği varsayılan yapılandırma göz önüne alındığında, supervisorctlşöyle bir giriş koyabilirsiniz /etc/sudoers:

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

Bu, bir şifre sağlamak zorunda kalmadan root aliceolarak çalışmanıza sudo /usr/bin/supervisorctl restart app1izin verir bobve yeniden başlatılmasına izin verir app2.


Ah, mükemmel. Bu tam da aradığım şey. Yardımın için teşekkürler!
davidscolgan

1
Bu dizeyi aşağıdaki kurallardan sonra eklemeniz gerektiğini unutmayın%sudo ALL=(ALL:ALL) ALL
Павел Тявин
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.