在Linux系统安全中,capabilities机制是内核提供的一种细粒度权限控制方式,它允许程序以非root用户身份执行需要root权限的操作。getcap命令用于检查文件的capabilities设置,这是系统管理员排查安全风险的重要工具。
capabilities基础
capabilities将root权限分解为多个独立的权限位,如CAP_NET_ADMIN、CAP_SYS_ADMIN等。通过给特定程序赋予相应capabilities,可以实现最小权限原则。
使用getcap命令检查程序设置
# 检查单个程序的capabilities
getcap /usr/bin/ping
# 输出示例:
/usr/bin/ping = cap_net_raw+ep
# 递归检查目录下所有程序
getcap -r /usr/bin/
# 使用详细模式查看所有信息
getcap -v /usr/bin/sudo
实际安全配置案例
假设发现系统中存在异常的capabilities设置:
# 查找所有具有网络管理权限的程序
getcap -r /usr/bin/ 2>/dev/null | grep -i cap_net
# 检查sudo程序的capabilities(应该为空)
getcap /usr/bin/sudo
如果发现sudo被设置为具有CAP_SETUID能力,这可能是安全风险。
安全配置实践
- 恢复默认设置:
# 移除特定程序的capabilities
setcap -r /usr/bin/sudo
- 限制敏感程序权限:
# 检查并限制ping程序的capabilities
getcap /usr/bin/ping
# 若发现异常,恢复默认设置
setcap -r /usr/bin/ping
- 定期审计:
# 创建安全审计脚本
#!/bin/bash
find /usr/bin -type f -exec getcap {} \; | grep -E "(CAP_|=)"
通过getcap命令可以有效监控和管理程序的capabilities设置,及时发现并修复权限配置异常。这是维护Linux系统安全的重要手段。

讨论