сделать все процессы данного пользователя убиваемыми кем-либо

15

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

Можно ли допустить что-то подобное?

Aslan986
источник
1
Предоставьте пользователю sudo -u право на уничтожение всем пользователям, которые, возможно, необходимы в группе
Kiwy
4
Я действительно надеюсь, что эти пользователи с низким приоритетом являются настоящими людьми, а вы и ваши приятели чистокровными BOFH . Это делает вопрос намного более интригующим.
труба
@DavidFoerster, одна проблема заключается в том, что даже когда процессор не имеет 100% низкого приоритета, процесс может заполнить кэш процессора и т. Д. Аналогично с доступом к диску и т. Д.
Ян Рингроз

Ответы:

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.

Кусалананда
источник
Если вы разрешите любую команду уничтожения, вы можете использовать ее для отправки сигналов, не связанных с завершением, произвольным процессам, что может быть проблемой безопасности.
лес
@forest Вот почему я не предлагаю давать всем возможность использовать учетную запись root для запуска kill. Обратите внимание, что я предлагаю использовать группу пользователей ( killers), а не всех пользователей.
Кусалананда
Но я имею в виду, что это позволило бы этой группе отправлять kill -HUP, а не только kill -TERM.
лес
@ лес Да. Это позволяет отправлять сигналы процессам, принадлежащим lowpriouser. Если вы хотите ограничить сигналы TERM, тогда напишите сценарий оболочки оболочки /bin/killи позвольте людям использовать его вместо /bin/kill.
Кусалананда
1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
лес
5

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

Чтобы на самом деле сделать их низко приоритетными, либо измените их приоритет вручную, либо используйте демон, подобный тому, autoniceкоторый я написал для DEC OSF / 1 много лет назад (ок. 1994 г.), который ищет долгосрочные задания и постепенно уменьшает их приоритет по мере увеличения времени их выполнения. ,

РЕДАКТИРОВАТЬ есть пакет под названием, andкоторый предлагает эту функциональность для современных Unices.

Альнитак
источник
одна проблема заключается в том, что даже когда процессор не имеет 100% низкого приоритета, процесс может заполнить кэш процессора и т. д. Аналогично с доступом к диску и т. д.
Ian Ringrose
@IanRingrose только задачи, запланированные для выполнения, могут занимать кэш или осуществлять доступ к диску.
Альнитак
4

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

Вывод: при правильной настройке приоритета и достаточном пространстве подкачки нет необходимости убивать задания с низким приоритетом, чтобы освободить место для более важных задач; вместо этого ядро ​​позаботится о том, чтобы усыпить первое в пользу второго.

Дэвид Фёрстер
источник
1
«Низкий приоритет» может также означать «не важно» без подразумеваемого значения «работа с пониженным приоритетом процессора». Это не указано явно в вопросе.
Кусалананда
@Kusalananda: я согласен, что это не ясно в вопросе, но мой ответ утверждает, что это должно быть на самом деле.
Дэвид Фёрстер,
1
Это не так просто, хотя. Даже процесс с низким приоритетом может остановить систему, особенно если он имеет ограничения памяти: в зависимости от того, как они настроены, процесс будет заменен. Замена приводит к вводу / выводу (который может не включаться в квоту ввода / вывода процесса), и это также делает систему менее чувствительной на порядки. Тогда вы, вероятно, также захотите, чтобы в целом (в то время как другим не нужны ресурсы), процесс с низким приоритетом может фактически получить все необходимые ему ресурсы (что делает неприменимыми типичные ограничения памяти). Здесь могут помочь общие ресурсы процессора.
Йонас Шефер
@JonasWielicki, старый «unix-способ» выгрузки полного процесса имел свое преимущество. Если я правильно помню, HPUX может использовать некоторые инструменты для решения этой проблемы в 1990-х годах.
Ян Рингроз