我正在尝试与两个不同操作系统(Ubuntu和CentOS)上的控制组一起工作。我想问的问题很少。
我正在尝试使用cgcreate
命令创建一个控制组,并且它似乎需要在计算机上进行root访问。到目前为止,我所看到的所有示例都没有提到需要成为创建或修改控制组的root用户。
真的有必要成为root用户吗?最终目标是编写一个C ++应用程序,该应用程序使用libcgroup API创建和管理控制组以控制资源。但是C ++应用程序不会由任何root用户运行。它可以是任何普通用户。
我正在尝试与两个不同操作系统(Ubuntu和CentOS)上的控制组一起工作。我想问的问题很少。
我正在尝试使用cgcreate
命令创建一个控制组,并且它似乎需要在计算机上进行root访问。到目前为止,我所看到的所有示例都没有提到需要成为创建或修改控制组的root用户。
真的有必要成为root用户吗?最终目标是编写一个C ++应用程序,该应用程序使用libcgroup API创建和管理控制组以控制资源。但是C ++应用程序不会由任何root用户运行。它可以是任何普通用户。
Answers:
正常的情况是,你设置cgcreate
,cgset
,cgdelete
,cgget
,等了为根。最终,打算被限制吸收大量资源的程序/脚本将作为普通用户执行。因此,以root用户身份设置,以用户身份使用和执行。
这是通过命令的-a
和-t
参数cgcreate
(以root用户身份执行)完成的。所以当您建立一个小组时。就我而言:
cgcreate -t monero:monero -a monero:monero -g内存,cpu:monerogroup
其中monero是将在cgroup限制下执行和运行程序的将来用户的用户名。有关-a
和-t
子参数之间的细微差别,请参见的手册页cgcreate
。
男子cgcreate
在大多数情况下,这是同一位用户。
然后,设置限制(仍以root用户身份):
cgset -r memory.limit_in_bytes = $(((4 * 1024 * 1024 * 1024))monerogroup
cgset -r cpu.shares = 128 monerogroup
如果需要,请检查您的输入:
cgget -g内存:/ monerogroup | grep字节
然后最终从正确的文件夹切换用户(在我的情况下为monero):
cgexec -g内存,cpu:monerogroup ./monerod
用户在权限上不会有任何困难,因此您可以为用户专门设置权限。
除了安全性问题,您可以设置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
所有这一切都将通过root身份运行,在此之后,在所有的用户cgusers
群,将运行cgcreate
并cgdelete
为根,而不是为自己。您只需要在适当的组中拥有想要拥有此权限的成员即可。
简短的答案是没有。
对于cgroup的创建和所有权分配,您依赖于root特权。没有可靠的方法来解决它。
但是,您可以创建一个cgroup并将所有权分配给某个用户或组。
用户
$ 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}