Estou tentando trabalhar com grupos de controle em dois sistemas operacionais diferentes (Ubuntu e CentOS). Há algumas preocupações que eu gostaria de perguntar.
Estou tentando criar um grupo de controle usando o cgcreate
comando e parece que requer acesso root na máquina. Todos os exemplos que eu vi até agora não dizem nada sobre a necessidade de ser o usuário raiz para criar ou modificar grupos de controle.
É realmente necessário ser o usuário root? O objetivo final é escrever um aplicativo C ++ que crie e gerencie grupos de controle para controlar recursos usando a API libcgroup. Mas o aplicativo C ++ não será executado por nenhum usuário root. Pode ser qualquer usuário normal.
linux
not-root-user
privileges
cgroups
Rambo
fonte
fonte
Respostas:
O cenário normal é que você definir
cgcreate
,cgset
,cgdelete
,cgget
, etc. como raiz . Eventualmente, o programa / script destinado a ser impedido de sugar para muitos recursos será executado como um usuário normal. Portanto, configure como root, use e execute como usuário.Isso está sendo feito com os parâmetros
-a
e-t
docgcreate
comando (executado como root). Então, quando você configura um grupo. No meu caso:onde monero é o nome de usuário do futuro usuário que executará e executará o programa com as restrições do cgroup. Para a diferença fina entre os subparâmetros
-a
e,-t
consulte as páginas de manual decgcreate
.Na maioria dos casos, esse é o mesmo usuário.
Em seguida, configure as restrições (ainda como root):
Marque suas entradas se desejar:
E então, eventualmente, alterne o usuário, no meu caso, o usuário monero e da pasta correta:
O usuário não terá nenhuma dificuldade com as permissões ou então você o configurou especificamente para ele.
fonte
Implicações de segurança desta parte, você pode definir o
setuid
bitpara fornecer aos usuários não raiz que executam esse programa a capacidade de raiz.
A recomendação seria remover o acesso normal do usuário
e crie um grupo especial que você deseja permitir usar o cgcreate IE
cgusers
,e altere a associação ao grupo nesses arquivos para esse grupo:
Tudo isso seria executado pelo root, depois todos os usuários do
cgusers
grupo executarãocgcreate
ecgdelete
como root em vez de como eles próprios. Você só precisa ter membros que você gostaria de ter esse poder no grupo certo.fonte
Os Cgroups são finalmente tratados pelo (s) sistema (s) de arquivos cgroup. A capacidade de criar cgroups deve ser apenas a capacidade de criar diretórios sob esse / eles e gravar em arquivos. Se você montar os FSs do cgroup com permissões mais elaboradas ou alterar suas permissões rapidamente, determinados usuários deverão poder fazer as coisas. Obviamente, você não poderá adicionar os IDs do processo de outros usuários ao arquivo de tarefas. Você só poderá adicionar seu usuário.
Dito isto, não tenho certeza se o acima é global. Ou seja, há uma chance de que certos cgroups não suportem isso.
No geral, a melhor abordagem é usar um gerenciador de cgroup que pode ser instruído a associar tarefas a um cgroup. Eu acredito que o cgmanager faz algo assim.
fonte
Resposta curta é não.
Para criação e atribuição de propriedade de um cgroup, você depende dos privilégios de root. Não há maneira confiável de contornar isso.
No entanto, você pode criar um cgroup e atribuir propriedade a um determinado usuário ou grupo.
Do utilizador
Grupo
fonte