cset как non-root для установки соответствия процессоров процессам
Я играл с cset, чтобы установить привязку процессора к запущенным процессам. Я воссоздаю встроенную функцию "щит" вручную с помощью set и proc, чтобы добавить некоторые подмножества для определенных потоков моего приложения. У меня есть скрипт bash, который вызывает cset для создания наборов и перемещения правильных потоков в правильные наборы. Работает при запуске с sudo.
Теперь я бы хотел, чтобы этот скрипт выполнялся другим пользователем, у которого нет полномочий sudo. Я достаточно доверяю этому пользователю, чтобы отвечать за cset, но не хочу раскрывать широкие возможности root.
Я думал, что CAP_SYS_NICE - который необходим для sched_setaffinity, который я просто предполагаю, что cset должен использовать - в сценарии будет достаточно, но это не сработало. Я попытался расширить CAP_SYS_NICE на программу cset (которая является тонкой оболочкой Python для библиотеки Python cset). Нет кости. Вывод cap_to_text в моих сценариях CAP_SYS_NICE'd: "=cap_ipc_lock,cap_sys_nice,cap_sys_resource+eip" (он имеет ipc_lock и sys_resource по другим причинам; я думаю, что имеет значение только sys_nice).
Есть идеи?
3 ответа
Скорее просто дайте этому пользователю ограниченное разрешение sudo на запуск только этого сценария, например:
bob ALL=(root) NOPASSWD: /usr/local/bin/cset.sh
Удалить NOPASSWD:
если вы хотите, чтобы пользователь прошел аутентификацию с помощью своего пароля.
Хотя cgroups, кажется, заменяет cset/cpusets (как сказал ewwhite), я все равно продолжил работу со старым методом, потому что он был более знаком и все еще работает.
Что касается проблемы с разрешениями, моя конкретная проблема была решена с помощью cset для создания дерева внутри / cpusets, с которым я sudo chown -R root:myusergroup /cpusets/mytree
а также sudo chmod -R g+rwX /cpusets/mytree
, После этого пользователи в myusergroup
способны перемещать процессы внутри дерева echo $MYPID >> /cpusets/mytree/subtree/tasks
, К сожалению, кажется, что cset не работает без полного разрешения для всех / cpusets - я считаю, что он пытается перечитывать весь каталог / cpusets каждый раз, когда вы запускаете команду - поэтому мне пришлось прибегнуть к этому ручному методу перемещения процессов.
Я не говорю, что это идеальное решение для всех, но оно лучше всего сработало с моим прошлым и ситуацией.
Я всегда думал о cset как об инструменте SuSE. Я использовал его на RHEL еще в EL5, но с EL6 cgroups - предпочтительный метод для управления экранированием.
Я бы, вероятно, пошел по пути sudo, ограничивая доступ к определенным командам, необходимым для размещения процессов ваших пользователей в щите.