Wie kann ich Linux-Gruppen als Benutzer ohne Rootberechtigung erstellen und verwenden?

21

Wie kann ich als Benutzer ohne Rootberechtigung Gruppen erstellen und verwenden ?

Zum Beispiel kann ich als Nicht-Root-Benutzer:

  • Erstellen Sie eine Kontrollgruppe mit Zugriff auf eine CPU
  • Erstellen Sie einen neuen Prozess in dieser Gruppe

?

Ich habe zuerst hier gefragt , aber keine vollständige Antwort erhalten. Ich habe auch nach Stackoverflow gefragt , aber die Frage wurde als "Off Topic" geschlossen.

Adam Monsen
quelle

Antworten:

18

Das können Sie als normaler Benutzer nicht. Sie können jedoch eine cgroup als root einrichten und von Ihrem Benutzer konfigurierbar machen.

Wenn Sie nicht bereits die standardmäßigen cgroups-Controller haben, die von z. B. systemd gemountet wurden:

$ sudo mount -t tmpfs cgroup_root /sys/fs/cgroup
$ sudo mkdir /sys/fs/cgroup/cpuset
$ sudo mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset

Erstellen Sie eine cgroup:

$ sudo mkdir /sys/fs/cgroup/cpuset/${USER}
$ sudo chown -R ${USER} /sys/fs/cgroup/cpuset/${USER}

Sie können jetzt die Konfiguration Ihrer cgroup als normaler Benutzer ändern:

$ echo 0-3 > /sys/fs/cgroup/cpuset/${USER}/cpuset.cpus

Fügen Sie dieser Gruppe einen Prozess hinzu:

$ ./my_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/tasks

Oder erstellen Sie eine Untergruppe:

$ mkdir /sys/fs/cgroup/cpuset/${USER}/subgroup
$ echo 0-1 > /sys/fs/cgroup/cpuset/${USER}/subgroup/cpuset.cpus
$ ./my_other_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/subgroup/tasks
chris
quelle
Wie würden Sie die Untergruppe löschen? rm -rscheitert für mich
hbogert
1
rm -rwürde versuchen, die Dateien zuerst zu löschen, was fehlschlägt. Verwenden Sie rmdir, um eine C-Gruppe zu entfernen.
Dennis B.
Sie können nicht, rmdirbis die tasksDatei leer ist. root müsste sich die Aufgabendatei in der Untergruppe ansehen und jede PID dort in die Aufgabendatei der Root-C-Gruppe eintragen ( /dev/cpuset/tasksauf meinem RHEL 6.7 [Kernel 2.6.32-358] -Box, aber es /sys/fs/cgroup/cpuset/taskskönnte hier angebracht sein).
Mike S
1

Wenn Sie Ubuntu verwenden, können Sie (der Root-Benutzer) cgroup-lite installieren und der Datei /etc/cgconfig.conf hinzufügen, einschließlich der Benutzer, die die Konfiguration der cgroup ändern können. Es läuft beim Booten.

Andernfalls können Sie (der Root-Benutzer) Ihr eigenes Skript hinzufügen, das während des Startvorgangs ausgeführt werden soll.

Ken Sharp
quelle
0

Es gibt eine Reihe von Artikeln über LWN zu cgroups, siehe Teil 1 , oder sehen Sie sich die Suche dort an. Systemd enthält eine Reihe von Hilfsprogrammen zum Verwalten von (von cgroups zwischengespeicherten) Prozessen.

vonbrand
quelle
Dieser Link für Teil 1 sollte wahrscheinlich stattdessen auf lwn.net/Articles/531114 verweisen .
Chris
In dem verlinkten LWN-Artikel geht es um Namespaces, in lwn.net/Articles/604609 geht es um cgroups.
Dennis B.