设置 Linux 功能 CAP_SYS_RESOURCE

设置 Linux 功能 CAP_SYS_RESOURCE

我正在尝试在 Ubuntu 10.04 机器上授予用户 CAP_SYS_RESOURCE Linux 功能。我需要此功能以便该用户运行的进程可以写入 /proc/self/oom_adj(是的,我知道此功能已弃用,但我将在内核 2.6.32 上停留一段时间)。

我已经安装了 libcap2 和 libcap2-bin。我在 /etc/security/capability.conf 中授予用户 cap_sys_resource 功能,并已验证 pam_cap.so 已通过 pam 加载,但我仍然无法降低 oom_adj 分数。在对此文件进行任何更改后,我都重新启动了会话,甚至重新启动了。我尝试在 capabilities.conf 中使用 CAP_SYS_RESOURCE 的值(24,来自 /usr/include/linux/capabilities.h)代替名称,但这也无济于事。

$ cat /proc/$$/oom_adj
0
$ echo -1 > /proc/$$/oom_adj
-bash: echo: write error: Permission denied
$ echo 1 > /proc/$$/oom_adj
$ cat /proc/$$/oom_adj
1

$ egrep -v "^#" /etc/security/capability.conf 
cap_sys_resource delete
none *

(是的,用户名已被删除)

据我所知,我已正确获得此功能

$ getpcaps $$
Capabilities for `10366': = cap_sys_resource+i

我是不是漏掉了什么?我是不是做了一些明显错误的事情?任何指点我都非常感谢。

谢谢!

答案1

我从来没有弄清楚如何在会话/进程级别执行此操作,但我使用的解决方法是

$ sudo setcap cap_sys_resource=pe my_program

因此,通过设置基于文件的功能,我能够写入 /proc/self/oom_adj

相关内容