belirli bir kullanıcının tüm işlemlerini herkes tarafından yapılabilir hale getirin


15

Paylaşılan bir sunucuda, çok düşük öncelikli kullanıcılara sahip olmak istiyorum, böylece başka bir kullanıcı (kök ayrıcalıkları olmadan) kaynaklara ihtiyaç duyduğunda, düşük öncelikli kullanıcıların işlemlerinden herhangi birini öldürebilirler.

Böyle bir şeye izin vermek mümkün mü?


1
Sudo

4
Umarım bu düşük öncelikli kullanıcılar gerçek insan kullanıcılarıdır ve siz ve arkadaşlarınız safkan BOFH'larsınız . Soruyu çok daha ilgi çekici hale getiriyor.
boru

@DavidFoerster, bir sorun CPU% 100 düşük öncelikli olmasa bile işlemci önbelleğini vb.
Doldurabilir

Yanıtlar:


24

Diğer kullanıcılara , düşük öncelikli kullanıcı olarak süreçleri öldürme izni verin

sudo -u lowpriouser /bin/kill PID

Bir kullanıcı, kök ayrıcalıklarına sahip olmadıkça yalnızca kendi süreçlerini işaret edebilir. Dosyada sudo -udoğru kurulumu olan bir kullanıcı kullanarak sudoersdüşük öncelikli kullanıcının kimliğini alabilir ve işlemi öldürebilir.

Örneğin:

%killers ALL = (lowpriouser) /bin/kill

Bu gruptaki tüm kullanıcılar sağlayacak killersçalıştırmak için /bin/killolduğu gibi lowpriouser.

Ayrıca sudoerssisteminizdeki kılavuza bakın .


Bir OpenBSD sisteminde, aynı şey yerel bir doasyardımcı program aracılığıyla aşağıdaki gibi bir yapılandırma ile yapılabilir

permit :killers as lowpriouser cmd /bin/kill

Sonra

doas -u lowpriouser /bin/kill PID

İçin kılavuzları bakın doasve doas.conf.


Herhangi bir kill komutuna izin verirseniz, rasgele işlemlere sonlandırmayla ilgili olmayan sinyalleri göndermek için kötüye kullanabilirsiniz, bu da bir güvenlik sorunu olabilir.
orman

@forest Bu yüzden herkese çalıştırmak için kök hesabı kullanma olanağı vermeyi önermiyorum kill. Ben killersde tüm kullanıcılar değil, bir kullanıcı grubu ( ) kullanmanızı öneririm .
Kusalananda

Ama demek istediğim, bu grubun kill -HUPsadece göndermesine izin vermeyecekti kill -TERM.
orman

@forest Evet. Sahip olunan işlemlere sinyal gönderilmesine izin verir lowpriouser. Sinyalleri kısıtlamak istiyorsanız TERM, etrafına bir sarıcı kabuk betiği yazın /bin/killve insanların bunun yerine bunu kullanmasına izin verin /bin/kill.
Kusalananda

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
orman

5

Süreçleri öldürmemelisiniz, düşük önceliğe sahiplerse az kaynak tüketeceklerdir.

Onları düşük öncelikli yapmak için, ya önceliklerini manuel olarak değiştirin ya da autoniceuzun yıllar iş arayan ve uzun süredir çalıştıkça önceliklerini giderek azaltan DEC OSF / 1 için yazdığım gibi (c. 1994) bir arka plan programı kullanın . .

EDITand , modern Unices için bu işlevselliği sunan bir paket var .


bir sorun CPU% 100 düşük öncelikli olmasa bile işlemci önbellek vb doldurabilir olduğunu. Aynı şekilde disk erişimi vb ile
Ian Ringrose

@IanRingrose yalnızca çalışması için zamanlanan görevler önbellek kaplayabilir veya disk erişimi gerçekleştirebilir.
Alnitak

4

Soruna yanlış açıdan yaklaştığınızı düşünüyorum: Bir işlem düşük öncelikli ayarlarda (CPU, G / Ç) çalıştırılıyorsa, çalışması için zamanlanmayacağı için diğer işlemleri çok fazla etkilememelidir. Bellek kullanımına gelince, ana bellek sıkıysa ve işlem uzun süre çalışacak şekilde planlanmadıysa (örn. CPU ve G / Ç kısıtlamaları nedeniyle), “temiz” sayfaları bırakılır ve “kirli” sayfaları işlenir veya değiştirilir ve artık diğer işlemlerin performansını etkilemez.

Sonuç: Doğru öncelik ayarı ve yeterli takas alanı ile, daha önemli görevler için “yer” açmak üzere düşük öncelikli işleri öldürmek gerekli olmamalıdır; bunun yerine, çekirdek ilkini ikincisinin lehine uyumaya özen gösterir.


1
"Düşük öncelikli", "düşük CPU önceliğinde çalışıyor" anlamına gelen zımni anlamı olmadan "önemli değil" anlamına da gelebilir. Ancak bu soruda açık bir şekilde ifade edilmemiştir.
Kusalananda

@Kusalananda: Bunun soruda açık olmadığını kabul ediyorum, ancak cevabım bunun gerçekte olması gerektiğini söylüyor.
David Foerster

1
Yine de o kadar basit değil. Düşük öncelikli bir işlem bile sistemi durdurabilir, özellikle de bellek kısıtlamaları varsa: bunların nasıl ayarlandığına bağlı olarak, işlemi değiştirir. Değiştirme, I / O'ya (işlemin I / O kotasına dahil edilmeyebilir) neden olur ve ayrıca sistemi büyüklük sıralarına göre daha az duyarlı hale getirir. O zaman muhtemelen genel olarak (başkalarının kaynaklara ihtiyaç duymasa da) düşük öncelikli sürecin gerçekten ihtiyaç duyduğu tüm kaynakları elde etmesini istersiniz (bu da tipik bellek sınırlarını geçersiz kılar). CPU paylaşımları burada yardımcı olur.
Jonas Schäfer

@JonasWielicki, tüm süreci değiştirmenin eski "unix yolu" avantajına sahipti. Doğru hatırlıyorsam, HPUX 1990'larda bu sorunu çözmek için bazı araçlar yapabilir.
Ian Ringrose
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.