linuxcap命令
linuxcap命令详细介绍
在 Linux 系统中,cap 通常指与 Linux 能力(Capabilities) 相关的功能或工具。Linux 能力机制将传统的 root 超级权限细分为多个独立的能力(如网络原始套接字、设置进程优先级等),允许进程仅获取所需的最小权限,从而提升系统安全性。
以下是与 Linux 能力相关的常用命令和工具:
1.
getcap:查看文件的能力
getcap 用于查询某个可执行文件被赋予的能力。
语法:
bash
getcap 选项 文件路径
常用选项:
-v:验证文件的能力是否有效(如文件被修改后,能力可能失效)。-r:递归检查目录下的所有文件(仅超级用户可用)。
示例:
bash
getcap /usr/bin/ping
输出中的 cap_net_raw+ep 表示该文件被赋予了 cap_net_raw 能力(允许使用原始网络套接字),且能力在执行时有效(e)、可继承(p)。
2.
setcap:设置文件的能力
setcap 用于为可执行文件添加或移除能力。需注意:只有超级用户(或拥有 cap_setpcap 能力的进程)可使用此命令。
语法:
bash
setcap 选项 文件路径
能力表达式格式:cap_name[+|-][eip],其中:
cap_name:能力名称(如cap_net_raw、cap_dac_override等)。+:添加能力;-:移除能力。e:执行时有效(effective);i:可继承(inheritable);p:允许提升(permitted)。
示例:
bash
setcap /usr/local/myapp
setcap /usr/bin/ping
3.
capsh:能力调试工具
capsh 是一个用于调试和操作能力的交互式工具,可查看当前进程的能力、模拟能力环境等。
常用操作:
- 查看当前进程的能力:
bashcapsh输出包含当前进程的允许能力(
Bounding set)、有效能力(Effective)、可继承能力(Inheritable)等。 - 模拟指定能力的 shell:
bashcapsh all cap_net_raw --
- 计算能力的数值表示:
bashcapsh cap_net_raw
常见能力示例
Linux 定义了约 40 种能力,以下是部分常用能力:
| 能力名称 | 描述 |
|---|---|
cap_net_raw |
使用原始网络套接字(如 ping 命令) |
cap_net_bind_service |
绑定 1024 以下的特权端口(如 80/443) |
cap_dac_override |
绕过文件访问权限检查(如读取其他用户文件) |
cap_kill |
向其他进程发送信号(如 kill 命令) |
cap_setuid |
修改进程的 UID(如切换用户) |
注意事项
- 能力仅对 可执行文件 有效(通过
setcap设置),或通过编程方式在进程中动态调整(如使用cap_set_proc系统调用)。 - 若文件被修改(如重新编译),之前设置的能力可能失效,需重新用
setcap配置。 - 能力机制是对传统
SUID权限的替代方案,更细粒度的权限控制可提升系统安全性。
通过这些工具,你可以灵活管理进程的权限,避免因使用 root 或 SUID 带来的高风险。