Eu tenho jogado com cset para definir a afinidade da CPU para processos em execução. Estou recriando a função interna "blindagem" manualmente com set e proc, para adicionar alguns subconjuntos para threads específicos do meu aplicativo. Eu tenho um script bash que está chamando cset para criar os conjuntos e mover os segmentos corretos para os conjuntos corretos. Funciona quando executado com o sudo.
Agora eu gostaria de tornar esse script executável por outro usuário, que não possui poderes de sudo. Confio neste usuário o suficiente para ser responsável pelo cset, mas não quero abrir os amplos poderes do root.
Eu pensei que CAP_SYS_NICE - que é necessário para sched_setaffinity, que eu presumo que o cset deve usar - no script seria suficiente, mas não funcionou. Tentei estender CAP_SYS_NICE para o programa cset (que é um invólucro python fino para a biblioteca cset python). Sem dados. A saída de cap_to_text nos meus scripts CAP_SYS_NICE'd é "= cap_ipc_lock, cap_sys_nice, cap_sys_resource + eip" (possui ipc_lock e sys_resource por outros motivos; acho que apenas sys_nice é relevante).
Alguma ideia?
Respostas:
Em vez disso, apenas dê a esse usuário permissão sudo restrita para executar apenas esse script, por exemplo:
Remova
NOPASSWD:
se você deseja que o usuário se autentique com sua senha.fonte
Eu sempre pensei no cset como uma ferramenta SuSE. Eu o usei no RHEL no EL5, mas com o EL6, o cgroups é o método preferido para lidar com a blindagem.
Eu provavelmente seguiria a rota sudo, limitando o acesso aos comandos específicos necessários para colocar os processos de seus usuários no escudo.
fonte
Enquanto o cgroups parece substituir o cset / cpusets (como o ewwhite disse), eu continuei com o método antigo de qualquer maneira, porque era mais familiar e ainda funciona.
Para a questão da permissão, meu problema específico foi resolvido usando primeiro o cset para criar uma árvore dentro de / cpusets com a qual eu
sudo chown -R root:myusergroup /cpusets/mytree
esudo chmod -R g+rwX /cpusets/mytree
. Depois disso, os usuáriosmyusergroup
podem mover processos pela árvoreecho $MYPID >> /cpusets/mytree/subtree/tasks
. Infelizmente, o cset parece não funcionar sem permissão total em todos os / cpusets - acredito que ele tenta reler todo o diretório / cpusets toda vez que você executa um comando - então tive que recorrer a esse método manual de mover processos.Não estou dizendo que é a solução ideal para todos, mas funcionou melhor com meus antecedentes e situação.
fonte