зробить усі процеси певного користувача ким-небудь порушеними


15

На спільному сервері я хотів би мати користувачів із дуже низьким пріоритетом, щоб кожен раз, коли іншому користувачеві (також без кореневих привілеїв) потрібні ресурси, він може знищити будь-який процес з низьким пріоритетом користувачів.

Чи можна дозволити щось подібне?


1
Надайте право вбивати користувача sudo -u всім користувачам, можливо, у групі
Kiwy

4
Я дуже сподіваюсь, що ці користувачі з низьким пріоритетом - це фактичні користувачі людини, а ви та ваші приятелі - чистокровні BOFH . Це робить питання набагато більш інтригуючим.
труба

@DavidFoerster, одне питання полягає в тому, що навіть коли процесор не на 100% з низьким пріоритетом, процес може заповнити кеш процесора тощо. Так само з доступом до диска тощо
Ian Ringrose

Відповіді:


24

Надайте іншим користувачам дозвіл на вбивство процесів як користувача з низьким пріоритетом

sudo -u lowpriouser /bin/kill PID

Користувач може сигналізувати лише про власні процеси, якщо тільки він не має привілеїв root. Використовуючи sudo -uкористувача з правильною настройкою у sudoersфайлі, можна присвоїти особу користувача з низьким пріоритетом і вбити процес.

Наприклад:

%killers ALL = (lowpriouser) /bin/kill

Це дозволило б усім користувачам групи killersпрацювати /bin/killяк lowpriouser.

Дивіться також sudoersпосібник із вашої системи.


У системі OpenBSD те ж саме можна зробити через вбудовану doasутиліту з такою конфігурацією

permit :killers as lowpriouser cmd /bin/kill

Потім

doas -u lowpriouser /bin/kill PID

Дивіться посібники для doasта doas.conf.


Якщо ви дозволите будь-яку команду kill, ви можете зловживати нею, щоб надсилати сигнали, не пов'язані з припиненням, до довільних процесів, що може викликати занепокоєння щодо безпеки.
ліс

@forest Ось чому я не пропоную надати всім можливість використовувати кореневий обліковий запис для запуску kill. Зауважте, що я пропоную використовувати групу користувачів ( killers), не всім користувачам.
Кусалаланда

Але я маю на увазі те, що це дозволило б групі надсилати kill -HUP, а не просто kill -TERM.
ліс

@forest Так. Це дозволяє надсилати сигнали процесам, які належать lowpriouser. Якщо ви хочете обмежити сигнали TERM, тоді напишіть навколо нього скрипт оболонки /bin/killі дозвольте людям використовувати це замість цього /bin/kill.
Кусалаланда

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

5

Ви не повинні вбивати процеси, якщо вони мають низький пріоритет, вони будуть споживати мало ресурсів.

Щоб насправді зробити їх низьким пріоритетом, або змініть їх пріоритет вручну, або використовуйте демон, такий autonice, як я писав для DEC OSF / 1 багато років тому (c. 1994), який шукає довго працюючі завдання і поступово зменшує їх пріоритет, чим довше вони працюють .

EDIT Є пакет, який називається, andякий пропонує цю функціональність для сучасних Unices.


одне питання полягає в тому, що навіть коли процесор не на 100% з низьким пріоритетом, процес може заповнити кеш процесора тощо. Так само з доступом до диска тощо
Ian Ringrose

@IanRingrose, лише ті завдання, які заплановано виконати, можуть займати кеш-пам'ять або виконувати доступ до диска.
Альнітак

4

Я думаю, що ви підходите до проблеми з неправильного кута: Якщо процес запускається з низькими пріоритетними параметрами (CPU, I / O), він не повинен сильно впливати на інші процеси, оскільки його не планується запускати. Що стосується використання пам’яті, якщо основна пам’ять є тісною і процес не планувався тривати протягом тривалого часу (наприклад, через обмеження процесора та вводу / виводу), його «чисті» сторінки видаляються і «брудні» сторінки виконуються або замінено і більше не впливає на ефективність інших процесів.

Висновок: при правильному налаштуванні пріоритетів та достатньому просторі для заміни слід зайвим не вбивати завдання з низьким пріоритетом, щоб зробити «місцем» для більш важливих завдань; натомість ядро ​​подбає про те, щоб укласти перший сон на користь другого.


1
"Низький пріоритет" так само може означати "не важливо" без сенсу "працює із зменшеним пріоритетом процесора". Однак це не є чітким у питанні.
Kusalananda

@Kusalananda: Я погоджуюся, що це не є явним у питанні, але моя відповідь говорить, що це має бути насправді.
Девід Фоерстер

1
Це не все так просто. Навіть процес з низьким пріоритетом може зупинити систему, особливо якщо вона має обмеження в пам'яті: залежно від того, як вони налаштовані, вона зробить процес заміни. Заміна викликає введення-виведення (який може не бути включеним у квоту вводу-виводу процесу), а також зробить систему менш чутливою до порядку набору. Тоді ви, мабуть, також хочете, що в цілому (хоча інші не потребують ресурсів) процес з низьким пріоритетом може фактично отримати всі необхідні йому ресурси (що робить типові обмеження пам'яті неприйнятними). Тут допомагають акції CPU.
Йонас Шефер

@JonasWielicki, старий "unix спосіб" заміни повного процесу мав свою перевагу. Якщо я правильно пригадую, HPUX може отримати деякі інструменти для вирішення цієї проблеми у 90-х роках.
Ян Рінроуз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.