Ram*_*mbo 14 linux not-root-user cgroups privileges
我正在尝试在两个不同的操作系统(Ubuntu 和 CentOS)上使用控制组。我想问的问题很少。
我正在尝试使用该cgcreate命令创建一个控制组,看起来它需要对机器进行 root 访问。到目前为止,我看到的所有示例都没有说明需要成为 root 用户才能创建或修改控制组。
真的有必要成为root用户吗?最终目标是编写一个 C++ 应用程序,该应用程序创建和管理控制组以使用 libcgroup API 控制资源。但是 C++ 应用程序不会由任何 root 用户运行。它可以是任何普通用户。
小智 6
正常的情况是,你设置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 | 字节
然后最终切换用户,在我的例子中是用户 monero,并从正确的文件夹中切换:
cgexec -g 内存,cpu:monerogroup ./monerod
用户在权限方面不会有任何困难,因为您专门为他设置了权限。
撇开这一点的安全影响不谈,您可以设置该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是以他们自己的身份运行。您只需要让您希望在正确的组下拥有此权力的成员即可。
| 归档时间: |
|
| 查看次数: |
3792 次 |
| 最近记录: |