Требуется ли для управления cgroups доступ с правами root?

12

Я пытаюсь работать с группами управления в двух разных операционных системах (Ubuntu и CentOS). Есть несколько вопросов, которые я хотел бы задать.

Я пытаюсь создать контрольную группу с помощью cgcreateкоманды, и похоже, что для этого требуется root-доступ на компьютере. Все примеры, которые я видел до сих пор, ничего не говорят о необходимости быть пользователем root для создания или изменения контрольных групп.

Действительно ли необходимо быть пользователем root? Конечная цель - написать приложение на C ++, которое создает и управляет группами управления для управления ресурсами с помощью API libcgroup. Но приложение C ++ не будет запускаться любым пользователем root. Это может быть любой нормальный пользователь.

Rambo
источник
1
wiki.archlinux.org/index.php/Cgroups содержит некоторую информацию, очевидно , вам потребуется некоторая настройка root (пока я не изучал подробно cgroups).
Мат
Этот сайт не помогает с деталями, хотя. Это просто обзор высокого уровня.
Рэмбо
1
Что ж, он говорит вам, что root может создавать группы, которыми могут управлять не-root пользователи.
Мат
Я изучал cgroups некоторое время назад; эта информация может быть полезна для вас. Однако я делал все это как root, поэтому у меня нет ответа на этот конкретный вопрос.
Wildcard
Вы можете создать группу 'editcgroup', а затем разрешить всем в этой группе делать 'sudo cgcreate' и 'sudo cgdelete'
Джон

Ответы:

4

Нормальный сценарий , который вы установили cgcreate, cgset, cgdelete, cggetи т.д. в качестве корня . В конце концов, программа / сценарий, предназначенный для ограничения использования многих ресурсов, будет выполняться как обычный пользователь. Итак, настройте как root, используйте и запустите как пользователь.

Это делается с -aи -tпараметрами cgcreateкоманды (выполняются как корень). Так уже, когда вы создаете группу. В моем случае:

cgcreate -t ​​monero: monero -a monero: monero -g память, процессор: monerogroup

где monero - имя пользователя будущего пользователя, который будет запускать и запускать программу с ограничениями cgroup. Точная разница между подпараметрами -aи приведена в -tсправочных страницах cgcreate.

человек cgcreate

В большинстве случаев это один и тот же пользователь.

Затем установите ограничения (все еще как root):

cgset -r memory.limit_in_bytes = $ ((4 * 1024 * 1024 * 1024)) монерогруппа

cgset -r cpu.shares = 128 монерогруппа

Проверьте свои записи, если вы хотите:

cgget -g memory: / monerogroup | grep bytes

И затем, в конце концов, переключите пользователя, в моем случае, пользователя monero, и из правой папки:

cgexec -g память, процессор: monerogroup ./monerod

Пользователь не будет иметь никаких проблем с разрешениями или около того, так как вы настроите его специально для него.

oceansailor
источник
2

Помимо последствий для безопасности, вы можете установить setuidбит

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

дать пользователям без прав root, которые запускают эту программу, полномочия root.

Рекомендуется удалить обычный доступ пользователя.

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

и создайте специальную группу, которую вы хотите разрешить использовать cgcreate IE cgusers,

groupadd cgusers

и измените членство в группе этих файлов на эту группу:

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

Все это будет работать на корень, после того, что все пользователи в cgusersгруппе, будет работать cgcreateи cgdeleteкак корень , а не как они сами. Вам просто нужно было бы иметь членов, которым вы хотели бы иметь эту власть в нужной группе.

подливка
источник
1

Cgroups в конечном счете обрабатываются через файловую систему (ы) cgroup. Способность создавать cgroups должна просто быть способностью создавать каталоги под этим / ними и записывать в файлы. Если вы смонтируете FS cgroup с более сложными разрешениями или измените их разрешения на лету, то некоторые пользователи должны иметь возможность делать что-то. Очевидно, что вы не сможете добавить идентификаторы процессов других пользователей в файл задач. Вы сможете добавить только своего пользователя.

Сказав это, я не уверен, что вышесказанное является глобальным. Т.е. есть вероятность, что определенные группы не поддерживают это.

В целом, наилучшим подходом является использование менеджера cgroup, который затем может быть проинструктирован для привязки задач к cgroup. Я считаю, что cgmanager делает что-то подобное.

V13
источник
1

Краткий ответ - нет.

Для создания и назначения прав собственности на группу вы зависите от привилегий root. Нет надежного способа обойти это.

Однако вы можете создать группу и назначить владельца для определенного пользователя или группы.

пользователь

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

группа

$ 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}
Уильям Сандин
источник