Benötigt die Verwaltung von cgroups Root-Zugriff?


12

Ich versuche mit Kontrollgruppen auf zwei verschiedenen Betriebssystemen (Ubuntu und CentOS) zu arbeiten. Es gibt einige Bedenken, die ich stellen möchte.

Ich versuche, mit dem cgcreateBefehl eine Kontrollgruppe zu erstellen , und es sieht so aus, als ob Root-Zugriff auf dem Computer erforderlich ist. Alle Beispiele, die ich bisher gesehen habe, sagen nichts darüber aus, dass ich der Root-Benutzer sein muss, um Kontrollgruppen zu erstellen oder zu ändern.

Ist es wirklich notwendig, der Root-Benutzer zu sein? Das Endziel besteht darin, eine C ++ - Anwendung zu schreiben, die Kontrollgruppen erstellt und verwaltet, um Ressourcen mithilfe der libcgroup-API zu steuern. Die C ++ - Anwendung wird jedoch von keinem Root-Benutzer ausgeführt. Es könnte jeder normale Benutzer sein.


1
wiki.archlinux.org/index.php/Cgroups enthält einige Informationen. Sie müssen anscheinend einige Einstellungen von root vornehmen (ich habe cgroups selbst noch nicht im Detail betrachtet).
Mat

Diese Website hilft jedoch nicht bei den Details. Es ist nur eine allgemeine Übersicht.
Rambo

1
Nun, es sagt Ihnen, dass root Gruppen einrichten kann, die von Nicht-Root-Benutzern verwaltet werden können.
Mat

Ich habe mich vor einiger Zeit ausführlich mit Gruppen befasst . Diese Informationen können für Sie von Nutzen sein. Allerdings habe ich alles als root gemacht, daher habe ich keine Antwort auf diese spezielle Frage.
Wildcard

Sie könnten eine 'editcgroup'-Gruppe bilden und dann jedem in dieser Gruppe erlauben,' sudo cgcreate 'und' sudo cgdelete 'zu machen
John Militer

Antworten:


4

Das normale Szenario ist , dass Sie eingestellt cgcreate, cgset, cgdelete, cggetusw. , wie oben Wurzel . Schließlich wird das Programm / Skript, das daran gehindert werden soll, an vielen Ressourcen zu saugen, als normaler Benutzer ausgeführt. Also als root einrichten, als Benutzer verwenden und ausführen.

Dies erfolgt mit den Parametern -aund -tdes cgcreateBefehls (als root ausgeführt). Also schon beim Einrichten einer Gruppe. In meinem Fall:

cgcreate -t ​​monero: monero -a monero: monero -g Speicher, CPU: Monerogruppe

Dabei ist monero der Benutzername des zukünftigen Benutzers, der das Programm mit den Einschränkungen der Gruppe ausführen und ausführen wird. Den feinen Unterschied zwischen den Parametern -aund finden -tSie in den Manpages von cgcreate.

Mann cgcreate

In den meisten Fällen ist dies derselbe Benutzer.

Richten Sie dann die Einschränkungen ein (immer noch als Root):

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

cgset -r cpu.shares = 128 Monerogruppe

Überprüfen Sie Ihre Eingaben, wenn Sie möchten:

cgget -g Speicher: / monerogroup | grep Bytes

Und dann irgendwann Benutzer wechseln, in meinem Fall Benutzer Monero, und aus dem richtigen Ordner:

cgexec -g Speicher, CPU: Monerogruppe ./monerod

Der Benutzer hat keine Schwierigkeiten mit Berechtigungen oder so, wenn Sie sie speziell für ihn einrichten.


2

Abgesehen von den Auswirkungen auf die Sicherheit können Sie das setuidBit setzen

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

um Nicht-Root-Benutzern, die dieses Programm ausführen, Root-Power zu geben.

Die Empfehlung wäre, dann den normalen Benutzerzugriff zu entfernen

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

und erstellen Sie eine spezielle Gruppe, die Sie für die Verwendung von cgcreate IE zulassen möchten cgusers.

groupadd cgusers

und ändern Sie die Gruppenmitgliedschaft für diese Dateien in diese Gruppe:

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

All dies würde von root ausgeführt, danach werden alle Benutzer in der cgusersGruppe ausgeführt cgcreateund cgdeleteals root statt als sie selbst. Sie müssten nur Mitglieder haben, die diese Macht unter der richtigen Gruppe haben möchten.


1

Cgroups werden letztendlich über die cgroup-Dateisysteme verwaltet. Die Fähigkeit, Gruppen zu erstellen, sollte lediglich die Fähigkeit sein, Verzeichnisse unter diesen Gruppen zu erstellen und in Dateien zu schreiben. Wenn Sie die cgroup-FSs mit umfangreicheren Berechtigungen bereitstellen oder ihre Berechtigungen im laufenden Betrieb ändern, sollten bestimmte Benutzer in der Lage sein, Aufgaben zu erledigen. Offensichtlich können Sie die Prozess-IDs des Prozesses anderer Benutzer nicht zur Aufgabendatei hinzufügen. Sie können nur die Ihrer Benutzer hinzufügen.

Trotzdem bin ich mir nicht sicher, ob das oben Gesagte global ist. Dh es besteht die Möglichkeit, dass bestimmte Gruppen dies nicht unterstützen.

Insgesamt besteht der beste Ansatz darin, einen cgroup-Manager zu verwenden, der dann angewiesen werden kann, einer cgroup Aufgaben zuzuordnen. Ich glaube, dass cgmanager so etwas macht.


1

Kurze Antwort ist nein.

Für die Erstellung und Eigentumszuweisung einer cgroup sind Sie auf Root-Berechtigungen angewiesen. Es gibt keinen zuverlässigen Weg, um das Problem zu umgehen.

Sie können jedoch eine cgroup erstellen und einem bestimmten Benutzer oder einer bestimmten Gruppe den Besitz zuweisen.

Benutzer

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

Gruppe

$ 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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.