La gestion des groupes de contrôle nécessite-t-elle un accès root?

12

J'essaie de travailler avec des groupes de contrôle sur deux systèmes d'exploitation différents (Ubuntu et CentOS). Il y a peu de préoccupations que je voudrais poser.

J'essaie de créer un groupe de contrôle à l'aide de la cgcreatecommande, et il semble qu'il nécessite un accès root sur la machine. Tous les exemples que j'ai vus jusqu'à présent ne disent rien sur la nécessité d'être l'utilisateur root pour créer ou modifier des groupes de contrôle.

Est-il vraiment nécessaire d'être root? L'objectif final est d'écrire une application C ++ qui crée et gère des groupes de contrôle pour contrôler les ressources à l'aide de l'API libcgroup. Mais l'application C ++ ne sera exécutée par aucun utilisateur root. Il peut s'agir de n'importe quel utilisateur normal.

Rambo
la source
1
wiki.archlinux.org/index.php/Cgroups a quelques informations, vous aurez besoin d' une configuration par root apparemment (je n'ai pas encore regardé en détail cgroups moi-même).
Mat
Ce site Web n'aide cependant pas avec les détails. Ce n'est qu'un aperçu de haut niveau.
Rambo
1
Eh bien, cela vous dit que root peut configurer des groupes gérables par des utilisateurs non root.
Mat
J'ai étudié les groupes de discussion il y a un certain temps; ces informations peuvent vous être utiles. Cependant, je faisais tout en tant que root, donc je n'ai pas la réponse à cette question particulière.
Wildcard
Vous pouvez créer un groupe «editcgroup», puis autoriser tous les membres de ce groupe à faire «sudo cgcreate» et «sudo cgdelete»
John Militer

Réponses:

4

Le scénario est normale que vous définissez cgcreate, cgset, cgdelete, cgget, etc. comme racine . Finalement, le programme / script destiné à ne pas aspirer de nombreuses ressources sera exécuté en tant qu'utilisateur normal. Donc, configurez en tant que root, utilisez et exécutez en tant qu'utilisateur.

Cela se fait avec les paramètres -aet -tde la cgcreatecommande (exécutée en tant que root). Donc déjà lorsque vous créez un groupe. Dans mon cas:

cgcreate -t ​​monero: monero -a monero: monero -g mémoire, cpu: monerogroup

où monero est le nom d'utilisateur du futur utilisateur qui exécutera et exécutera le programme avec les restrictions cgroup. Pour la différence fine entre les sous -a- -tparamètres et, reportez-vous aux pages de manuel de cgcreate.

homme cgcréer

Dans la plupart des cas, il s'agit du même utilisateur.

Ensuite, configurez les restrictions (toujours en tant que root):

cgset -r memory.limit_in_bytes = $ ((4 * 1024 * 1024 * 1024)) monogroupe

cgset -r cpu.shares = 128 monerogroup

Vérifiez vos entrées si vous souhaitez:

cgget -g mémoire: / monerogroup | octets grep

Et puis finalement changer d'utilisateur, dans mon cas, l'utilisateur monero, et à partir du bon dossier:

cgexec -g mémoire, cpu: monerogroup ./monerod

L'utilisateur n'aura aucune difficulté avec les autorisations ou ainsi que vous le configurez spécifiquement pour lui.

oceansailor
la source
2

Les implications de sécurité de ce côté, vous pouvez mettre le setuidbit

chmod +s /bin/cgcreate
chmod +s /bin/cgdelete

pour donner aux utilisateurs non root qui exécutent ce programme le pouvoir root.

La recommandation serait de supprimer ensuite l'accès utilisateur normal

chmod 550 /bin/cgcreate
chmod 550 /bin/cgdelete

et créez un groupe spécial que vous souhaitez autoriser à utiliser cgcreate IE cgusers,

groupadd cgusers

et changez l'appartenance au groupe sur ces fichiers à ce groupe:

chgrp cgusers /bin/cgcreate
chgrp cgusers /bin/cgdelete

Tout cela serait exécuté par root, après quoi tous les utilisateurs du cgusersgroupe s'exécuteront cgcreateet en cgdeletetant que root au lieu d'être eux-mêmes. Vous auriez juste besoin d'avoir des membres que vous voudriez avoir ce pouvoir dans le bon groupe.

Sauce
la source
1

Les groupes de contrôle sont finalement gérés via le ou les systèmes de fichiers cgroup. La possibilité de créer des groupes de contrôle devrait simplement être la capacité de créer des répertoires sous celui-ci et d'écrire dans des fichiers. Si vous montez les FS cgroup avec des autorisations plus élaborées, ou si vous modifiez leurs autorisations à la volée, certains utilisateurs devraient pouvoir faire des choses. De toute évidence, vous ne pourrez pas ajouter les ID de processus du processus d'autres utilisateurs au fichier de tâches. Vous ne pourrez ajouter que votre utilisateur.

Cela dit, je ne suis pas sûr que ce qui précède soit mondial. Autrement dit, il est possible que certains groupes de contrôle ne prennent pas en charge cela.

Dans l'ensemble, la meilleure approche consiste à utiliser un gestionnaire de groupe de contrôle qui peut ensuite être chargé d'associer des tâches à un groupe de contrôle. Je crois que cgmanager fait quelque chose comme ça.

V13
la source
1

La réponse courte est non.

Pour la création et l'attribution de propriété d'un groupe de contrôle, vous dépendez des privilèges root. Il n'y a aucun moyen fiable de contourner ce problème.

Cependant, vous pouvez créer un groupe de contrôle et attribuer la propriété à un certain utilisateur ou groupe.

Utilisateur

$ u=$(whoami)
$ sudo mkdir /sys/fs/cgroup/cpuset/${u}
$ sudo chown -R ${u}: /sys/fs/cgroup/cpuset/${u}

Groupe

$ g=MYGROUP && grep ^${g}: /etc/group || echo "Your group doesn't exist. Run \"mkgroup $g\" and repeat this command before you continue." 
$ sudo mkdir /sys/fs/cgroup/cpuset/${g}
$ sudo chgrp -R ${g} /sys/fs/cgroup/cpuset/${g}
William Sandin
la source