无需完全 root 访问权限即可读取 /proc/<pid>/fd/<fd>

Arn*_*len 2 linux security root linux-kernel linux-capabilities

我有一个程序(https://github.com/raboof/connbeat),它依赖于/proc/[pid]/fd/*查找给定(网络)inode 的进程。

/proc/[pid]/fd只能由 root 读取,但为了安全起见,我想尽可能地放弃权限。

有没有什么方法可以(有效地)获得进程和索引节点之间的关系,而不需要完全的 root 权限?也许我可以有选择地授予某些系统调用使用功能的访问权限?

tom*_*x86 5

为了能够读取您需要的所有进程的文件描述符:

  • CAP_DAC_READ_SEARCH - 用于访问 /proc/[pid]/fd
  • CAP_SYS_PTRACE - 读取 /proc/[pid]/fd/* 下的符号链接

您可以将您的程序限制为仅具有这两种功能。readdir()然后,您可以使用普通 API 调用(例如或readlink()或任何您喜欢的其他方式)来访问相关信息。

有关这两种功能的更广泛描述,请参阅功能(7)