我正在尝试在 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