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, ограничивая доступ к определенным командам, необходимым для размещения процессов ваших пользователей в щите.

Другие вопросы по тегам