Czy zarządzanie grupami wymaga dostępu do konta root?


12

Próbuję pracować z grupami kontrolnymi na dwóch różnych systemach operacyjnych (Ubuntu i CentOS). Jest kilka obaw, o które chciałbym zapytać.

Próbuję utworzyć grupę kontrolną za pomocą cgcreatepolecenia i wygląda na to, że wymaga ona dostępu do konta root na komputerze. Wszystkie przykłady, które do tej pory widziałem, nie mówią nic o potrzebie bycia użytkownikiem root do tworzenia lub modyfikowania grup kontrolnych.

Czy naprawdę trzeba być użytkownikiem root? Ostatecznym celem jest napisanie aplikacji C ++, która tworzy grupy kontrolne i zarządza nimi w celu kontrolowania zasobów za pomocą interfejsu API libcgroup. Ale aplikacja C ++ nie będzie uruchamiana przez żadnego użytkownika root. Może to być każdy normalny użytkownik.


1
wiki.archlinux.org/index.php/Cgroups ma trochę informacji, najwyraźniej będziesz potrzebować trochę konfiguracji przez roota (najwyraźniej jeszcze nie zaglądałem szczegółowo w cgroups).
Mat.

Ta strona nie pomaga jednak w szczegółach. To tylko ogólny przegląd.
Rambo,

1
Mówi ci, że root może konfigurować grupy, którymi mogą zarządzać użytkownicy inni niż root.
Mat

I spojrzał cgroups obszernie jakiś czas temu; informacje te mogą być dla Ciebie przydatne. Jednak robiłem to wszystko jako root, więc nie mam odpowiedzi na to pytanie.
Wildcard

Możesz utworzyć grupę „editcgroup”, a następnie zezwolić wszystkim członkom tej grupy na wykonywanie „sudo cgcreate” i „sudo cgdelete”
John Militer 21.04.16

Odpowiedzi:


4

Normalny scenariusz jest to, że można ustawić cgcreate, cgset, cgdelete, cgget, itd. Jako użytkownik root . Ostatecznie program / skrypt, który ma być powstrzymany od zasysania wielu zasobów, zostanie wykonany jako zwykły użytkownik. Więc skonfiguruj jako root, użyj i wykonaj jako użytkownik.

Odbywa się to za pomocą parametrów -ai polecenia (wykonywanego jako root). Tak więc już po utworzeniu grupy. W moim przypadku:-tcgcreate

cgcreate -t ​​monero: monero -a monero: monero -g pamięć, cpu: monerogroup

gdzie monero to nazwa użytkownika przyszłego użytkownika, który uruchomi i uruchomi program z ograniczeniami cgroup. Aby poznać drobną różnicę między -ai -tpodparametrami, patrz strony podręcznika man cgcreate.

człowiek cgcreate

W większości przypadków jest to ten sam użytkownik.

Następnie skonfiguruj ograniczenia (nadal jako root):

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

cgset -r cpu.shares = 128 monerogrupa

Sprawdź swoje wpisy, jeśli chcesz:

cgget -g memory: / monerogroup | bajty grep

A potem ostatecznie przełącz użytkownika, w moim przypadku monero użytkownika, i z odpowiedniego folderu:

cgexec -g memory, cpu: monerogroup ./monerod

Użytkownik nie będzie miał trudności z uprawnieniami lub tak, jak skonfigurujesz je specjalnie dla niego.


2

Pomijając to, możesz ustawić setuidbit

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

aby dać użytkownikom innym niż root, którzy uruchamiają ten program root uprawnienia.

Zaleca się wówczas usunięcie normalnego dostępu użytkownika

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

i utwórz specjalną grupę, w której chcesz zezwolić na korzystanie z cgcreate IE cgusers,

groupadd cgusers

i zmień członkostwo grupy w tych plikach na tę grupę:

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

Wszystko to będzie uruchamiane przez użytkownika root, po czym wszyscy użytkownicy w cgusersgrupie będą działać cgcreatei cgdeletejako root zamiast samych siebie. Potrzebujesz tylko członków, którzy chcieliby mieć tę władzę w odpowiedniej grupie.


1

Grupy C są ostatecznie obsługiwane przez systemy plików cgroup. Zdolność do tworzenia cgroups powinna być jedynie zdolnością do tworzenia katalogów pod tym / nimi i zapisywania do plików. Jeśli podłączysz FS cgroup z bardziej złożonymi uprawnieniami lub zmienisz ich uprawnienia w locie, to niektórzy użytkownicy powinni mieć możliwość robienia rzeczy. Oczywiście nie będzie można dodawać identyfikatorów procesów innych użytkowników do pliku zadań. Będziesz mógł dodać tylko swojego użytkownika.

Powiedziawszy to, nie jestem pewien, czy powyższe ma charakter globalny. Tzn. Istnieje szansa, że ​​niektóre grupy nie obsługują tego.

Ogólnie rzecz biorąc, najlepszym rozwiązaniem jest użycie menedżera grupy, który może zostać poinstruowany o powiązaniu zadań z grupą. Uważam, że cgmanager robi coś takiego.


1

Krótka odpowiedź to nie.

Przy tworzeniu i przypisywaniu własności do grupy cG jest zależny od uprawnień roota. Nie ma niezawodnego sposobu na obejście tego.

Można jednak utworzyć grupę cgroup i przypisać własność określonemu użytkownikowi lub grupie.

Użytkownik

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

Grupa

$ 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}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.