sprawić, by wszystkie procesy danego użytkownika mogły być przetwarzane przez kogokolwiek

15

Na wspólnym serwerze chciałbym mieć użytkowników o bardzo niskim priorytecie, tak aby ilekroć inny użytkownik (także bez uprawnień roota) potrzebował zasobów, mógł zabić dowolny proces użytkownika o niskim priorytecie.

Czy można pozwolić na coś takiego?

Aslan986
źródło
1
Daj sudo -u użytkownikowi prawo zabicia wszystkim użytkownikom, którzy mogą być potrzebni w grupie
Kiwy
4
Naprawdę mam nadzieję, że ci użytkownicy o niskim priorytecie są rzeczywistymi użytkownikami ludzkimi, a ty i twoi kumple jesteście rasowymi BOFH . Sprawia, że ​​pytanie jest znacznie bardziej intrygujące.
rura
@DavidFoerster jeden problem jest to, że nawet gdy procesor nie jest w 100% proces niski priorytet może wypełnić cache procesora itd. Podobnie z dostępem do dysku itp
Iana RINGROSE

Odpowiedzi:

24

Zezwól innym użytkownikom na zabijanie procesów jako użytkownik o niskim priorytecie

sudo -u lowpriouser /bin/kill PID

Użytkownik może sygnalizować tylko własne procesy, chyba że ma uprawnienia roota. Używając sudo -uużytkownika z poprawną konfiguracją w sudoerspliku, można przyjąć tożsamość użytkownika o niskim priorytecie i zabić proces.

Na przykład:

%killers ALL = (lowpriouser) /bin/kill

Umożliwiłoby to wszystkim użytkownikom w grupie killersdziałanie /bin/killjako lowpriouser.

Zobacz także sudoersinstrukcję obsługi systemu.


W systemie OpenBSD to samo można zrobić za pomocą natywnego doasnarzędzia o konfiguracji takiej jak

permit :killers as lowpriouser cmd /bin/kill

Następnie

doas -u lowpriouser /bin/kill PID

Zobacz instrukcje obsługi doasi doas.conf.

Kusalananda
źródło
Jeśli pozwolisz żadnego polecenia kill, można nadużywać go do wysyłania sygnałów niezwiązanych z rozwiązania do dowolnych procesów, które mogą być problemem bezpieczeństwa.
las
@forest Dlatego nie sugeruję, aby dać wszystkim możliwość korzystania z konta root do uruchamiania kill. Zauważ też, że sugeruję użycie grupy użytkowników ( killers), nie wszystkich użytkowników.
Kusalananda
Ale mam na myśli to, że pozwoliłoby tej grupie wysyłać kill -HUP, nie tylko kill -TERM.
las
@forest Tak. Umożliwia wysyłanie sygnałów do procesów będących własnością firmy lowpriouser. Jeśli chcesz ograniczyć sygnały TERM, napisz skrypt opakowujący /bin/killi pozwól innym go używać /bin/kill.
Kusalananda
1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
las
5

Nie powinieneś zabijać procesów, jeśli mają niski priorytet, zużyją niewiele zasobów.

Aby faktycznie nadać im niski priorytet, zmień ich priorytet ręcznie lub użyj demona takiego autonice, jaki napisałem dla DEC OSF / 1 wiele lat temu (ok. 1994), który szuka długoterminowych zadań i stopniowo zmniejsza ich priorytet, im dłużej działają .

EDYCJA jest pakiet o nazwie, andktóry oferuje tę funkcjonalność dla nowoczesnych Unices.

Alnitak
źródło
Jednym z problemów jest to, że nawet gdy procesor nie jest w 100% niski priorytet proces może wypełnić cache procesora itd. Podobnie z dostępem do dysku etc
Ian RINGROSE
@IanRingrose tylko zadania, które zostały zaplanowane do uruchomienia, mogą zajmować pamięć podręczną lub uzyskiwać dostęp do dysku.
Alnitak,
4

Myślę, że podchodzisz do problemu z niewłaściwego punktu widzenia: jeśli proces jest uruchamiany z ustawieniami niskiego priorytetu (CPU, I / O), nie powinien on mieć większego wpływu na inne procesy, ponieważ nie zostanie zaplanowany do uruchomienia. Jeśli chodzi o użycie pamięci, jeśli pamięć główna jest napięta i proces nie był zaplanowany na długi czas (np. Z powodu ograniczeń procesora i we / wy), jego „czyste” strony są usuwane, a „brudne” strony są zatwierdzane lub zamienione i nie wpływają już na wydajność innych procesów.

Wniosek: przy odpowiednim ustawieniu priorytetu i wystarczającej przestrzeni wymiany zabijanie zadań o niskim priorytecie nie powinno być konieczne, aby „zrobić miejsce” na ważniejsze zadania; zamiast tego jądro zadba o to, aby ten pierwszy spał na korzyść tego drugiego.

David Foerster
źródło
1
„Niski priorytet” może równie dobrze oznaczać „nieistotny” bez dorozumianego znaczenia „działający ze zmniejszonym priorytetem procesora”. Nie jest to jednak wyraźnie określone w pytaniu.
Kusalananda
@Kusalananda: Zgadzam się, że nie jest to jednoznaczne w pytaniu, ale moja odpowiedź stwierdza, że ​​tak powinno być.
David Foerster,
1
To nie jest takie proste. Nawet proces o niskim priorytecie może zatrzymać system, szczególnie jeśli ma ograniczenia pamięci: w zależności od tego, jak są skonfigurowane, spowoduje to zamianę procesu. Zamiana powoduje We / Wy (które mogą nie zostać uwzględnione w przydziale We / Wy procesu), a także spowoduje, że system będzie mniej reagował na rzędy wielkości. Wtedy prawdopodobnie również chciałbyś tego w ogóle (podczas gdy inni nie potrzebują zasobów), proces o niskim priorytecie może faktycznie uzyskać wszystkie potrzebne zasoby (co sprawia, że ​​typowe limity pamięci nie mają zastosowania). Udostępnia pomoc CPU tutaj.
Jonas Schäfer
@JonasWielicki, stary „uniksowy sposób” wymiany całego procesu miał swoją przewagę. Jeśli dobrze pamiętam, HPUX może kilka narzędzi do rozwiązania tego problemu w latach 90.
Ian Ringrose