Ubuntu 22.04下cgroups v2环境普通用户无法执行cgexec的问题
解决cgroups v2下普通用户无法使用cgexec的问题
原因
cgroups v2采用了更严格的权限控制模型,和v1的权限机制不兼容,原v1里cgcreate -t/-a的权限设置方式在v2中无法直接生效。
解决步骤
1. 确认系统使用cgroups v2
执行命令验证:
mount | grep cgroup2
若输出包含cgroup2 on /sys/fs/cgroup type cgroup2,则系统使用v2版本。
2. 启用目标控制器(以memory为例)
cgroups v2需要先在根cgroup中启用对应控制器,才能在子cgroup中使用:
sudo sh -c 'echo "+memory" >> /sys/fs/cgroup/cgroup.subtree_control'
如果需要永久生效,可将该命令加入/etc/rc.local或创建systemd服务。
3. 创建cgroup并设置正确权限
用cgcreate创建cgroup后,确保普通用户拥有该cgroup目录的读写权限:
sudo cgcreate -g memory:qqq sudo chown -R caj:caj /sys/fs/cgroup/qqq
4. 验证普通用户执行权限
现在普通用户可正常使用cgexec:
cgexec -g memory:qqq ls
替代方案:使用systemd-run(推荐)
在systemd管理的系统中,推荐用systemd-run替代cgexec,无需手动调整cgroup权限:
systemd-run --user --scope -p MemoryMax=512M ls
该命令会自动为当前用户创建临时cgroup并限制内存,无需sudo权限。
内容的提问来源于stack exchange,提问作者Chris Jefferson
相关产品推荐
相关产品推荐

