Intereting Posts
Установка зависимостей в качестве пользователя без root Есть ли способ разрешить все IP-адреса PIA VPN со сценарием? Выяснение того, что вращается жестким диском точка доступа nmcli wifi не отображается Модуль xhci_hcp постоянно обнаруживает устройства Обработка запятой в строковых значениях в файле CSV Можно ли установить весь жесткий диск (раздел) как цель iscsi? Сценарий Bash, создающий нежелательные файлы Объедините два файла по очереди с символом тройного канала разделителя «|||» Примечание и определение с помощью Vi: при запуске выделите теги и теги отображения в окне предварительного просмотра Поддерживает ли fetchmail SSL или TLS при использовании SMTP для пересылки электронной почты? Параллельная гостевая vcpu-операция на KVM подстановка команд в одинарных кавычках для псевдонима Конфигурируемый кеш DNS для Linux Как заменить недопустимые символы на подчеркивание с помощью Perl?

Можно ли заставить члена группы запускать что-то, что разрешено только судьей, как он сам?

Линия sudoers – это

%game_servers ALL= NOPASSWD:/usr/bin/renice 

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

Я не мог определить ответ от man sudoers , у которых возникла идея изменить ALL=(root:root) на ALL= , что оказалось плохой идеей

ALL=() – синтаксическая ошибка.

Вы хотите, чтобы члены группы могли только renice свои собственные процессы. Это поведение по умолчанию без записи sudoers . По умолчанию они могут renice свои собственные значения в пределах 0 - 19 .

Наличие доступа sudo к renice позволяет им увеличить этот диапазон от -20 to 19 а также процессы renice не принадлежащие им.

Запустив man renice , я не вижу никаких параметров, которые позволят вам делать то, что вы хотите сделать. Если у пользователей есть sudo доступ к команде renice , то они могут добавить в него опции, которые позволят им renice любой процесс.

Я думаю, что ваше решение состоит в том, чтобы удалить запись в файле sudoers . Тогда ваши пользователи могут только renice свои собственные процессы. Они потеряют способность устанавливать свои хорошие значения в значения от -20 and -1 , но это компромисс, требуемый здесь.

Используйте обертку вокруг renice , что-то вроде:

 #!/bin/sh priority="$1" pid="$2" owner=`ps -h -o uid $pid` if [ $owner != ${SUDO_UID} ]; then echo "Only your own processes can be reniced" >&2 exit 1 fi renice $priority $pid 

Обратите внимание, что этот пример является хрупким и подвержен условиям гонки из-за задержки между проверкой прав собственности и изменением приоритета.