管理 cgroup 是否需要 root 访问权限?

Ram*_*mbo 14 linux not-root-user cgroups privileges

我正在尝试在两个不同的操作系统(Ubuntu 和 CentOS)上使用控制组。我想问的问题很少。

我正在尝试使用该cgcreate命令创建一个控制组,看起来它需要对机器进行 root 访问。到目前为止,我看到的所有示例都没有说明需要成为 root 用户才能创建或修改控制组。

真的有必要成为root用户吗?最终目标是编写一个 C++ 应用程序,该应用程序创建和管理控制组以使用 libcgroup API 控制资源。但是 C++ 应用程序不会由任何 root 用户运行。它可以是任何普通用户。

小智 6

正常的情况是,你设置cgcreatecgsetcgdeletecgget,等了为。最终,旨在限制吸收许多资源的程序/脚本将以普通用户身份执行。因此,以 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 | 字节

然后最终切换用户,在我的例子中是用户 monero,并从正确的文件夹中切换:

cgexec -g 内存,cpu:monerogroup ./monerod

用户在权限方面不会有任何困难,因为您专门为他设置了权限。


Gra*_*avy 2

撇开这一点的安全影响不谈,您可以设置该setuid

chmod +s /bin/cgcreate
chmod +s /bin/cgdelete
Run Code Online (Sandbox Code Playgroud)

为运行该程序的非 root 用户提供 root 权限。

建议删除普通用户访问权限

chmod 550 /bin/cgcreate
chmod 550 /bin/cgdelete
Run Code Online (Sandbox Code Playgroud)

并创建一个您希望允许使用 cgcreate IE 的特殊组cgusers

groupadd cgusers
Run Code Online (Sandbox Code Playgroud)

并将这些文件的组成员身份更改为该组:

chgrp cgusers /bin/cgcreate
chgrp cgusers /bin/cgdelete
Run Code Online (Sandbox Code Playgroud)

所有这些都将由 root 运行,之后cgusers组中的所有用户都将以 root 身份运行,cgcreate而不cgdelete是以他们自己的身份运行。您只需要让您希望在正确的组下拥有此权力的成员即可。