我需要获取执行程序的 Linux 版本可用的功能列表。只是为了让用户可以选择授予文件什么功能。有没有机会使用一些标准库来做到这一点?我设法做到这一点的唯一方法是查看 的边界集cash --print
,但是
- 为什么它显示
...,cap_audit_read,38,39
,而/usr/include/linux/capability.h
说那CAP_LAST_CAP
是CAP_AUDIT_READ(37)
- 如果可能的话,我真的会使用一些功能描述
答案1
以下一项或多项。
命令行:
$ /sbin/capsh --decode=$(grep CapBnd /proc/1/status|cut -f2)
代码( list.c
)中:
#include <stdio.h>
#include <sys/capability.h>
int main(int argc, char **argv) {
for (cap_value_t c = 0; c < cap_max_bits(); c++) {
char *name = cap_to_name(c);
printf("%s\n", name);
cap_free(name);
}
}
编译如下:
$ gcc -o list list.c -lcap
最近的版本capsh
包含了这个capsh --explain=
论点。例如,
$ /sbin/capsh --explain=cap_chown
cap_chown (0) [/proc/self/status:CapXXX: 0x0000000000000001]
Allows a process to arbitrarily change the user and
group ownership of a file.