Управление cgroups требуют корневого доступа?

cut(1) Ваш друг:

dig -t any bix.hu | egrep -v "^;;|^;|^$" | sort | cut -c1-16,22-
11
26.03.2017, 11:01
4 ответа

Используйте параллельную оболочку

parallelshell "echo 1" "echo 2" "echo 3"

https://github.com/keithamus/parallelshell

-121--22030-

Можно включить ее в состояние оболочки, например:

[ "$(find . ...)" '!=' '' ] && echo Found || echo Not found

Где ... - условие соответствия, например, -name * .txt .

Некоторые другие примеры:

[ "$(find /etc -name hosts)" ] && echo True || echo False
[ ! -z "$(find /etc -name hosts)" ] && echo True || echo False
-121--27104-

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

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

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

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

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

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

groupadd cgusers

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

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

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

2
27.01.2020, 19:59

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

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

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

1
27.01.2020, 19:59

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

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

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

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

$ 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}
1
27.01.2020, 19:59

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

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

cgcreate -t monero:monero -a monero:monero -g memory,cpu:monerogroup

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

man cgcreate

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

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

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

cgset -r cpu.shares=128 monerogroup

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

cgget -g memory:/monerogroup | grep bytes

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

cgexec -g memory,cpu:monerogroup./monerod

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

7
27.01.2020, 19:59

Теги

Похожие вопросы