两个很有用的系统命令getcap和setcap

getcap 和 setcap 是 Linux 中用于管理文件能力(capabilities)的命令行工具。在现代Linux系统中,权限模型不再局限于传统的用户和组权限,而是引入了能力的概念,这是一种更细粒度的权限控制机制。能力系统允许将原本只有root用户才能执行的操作分解成一系列独立的能力,这样就可以把这些能力赋予非root用户或进程,而无需给他们完整的root权限。

getcap
getcap 命令用于查看一个或多个文件已经拥有的能力。它可以显示哪些文件具有附加的能力,以及这些能力是什么。例如,如果你想知道一个二进制文件是否具有特定的网络权限,你可以运行:

bash
getcap /path/to/binary
这将返回类似以下的输出,表明文件的能力:

/path/to/binary = cap_net_bind_service=ep
这里的 cap_net_bind_service=ep 表示文件有 cap_net_bind_service 能力,并且在有效集(effective)中被启用。

setcap
setcap 命令用于设置或修改文件的能力。你可以使用它来赋予一个非root用户执行的程序特定的系统权限,而无需使该程序以root权限运行。例如,如果你想要一个程序能够绑定到低于1024的端口,你需要 cap_net_bind_service 能力,可以这样设置:

bash
sudo setcap 'cap_net_bind_service=+ep' /path/to/binary
这里,+ep 表示将 cap_net_bind_service 添加到有效集(effective)和许可能力集(permitted)中。sudo 是必要的,因为设置能力通常需要root权限。

注意事项
不要随意使用 setcap,因为它可以显著增加攻击面,如果滥用或配置不当,可能会导致安全风险。
文件能力通常与二进制文件关联,而不是脚本或其他类型的文件。
能力系统是内核级别的,所以它适用于任何使用该文件的进程,无论该进程是如何启动的。
getcap 和 setcap 通常与 libcap 库一起使用,这是一个用于管理Linux能力的库。
使用这两个命令时,理解每个能力的具体含义以及它们如何影响程序的行为是非常重要的。在生产环境中,谨慎使用能力,确保遵循最小权限原则,以增强系统的安全性。
[root@tmp]# setcap 'cap_net_raw,cap_net_admin=+ep' a.out
[root@tmp]# setcap 'cap_net_admin=+ep' a.out
[root@tmp]# getcap a.out

各种能力:
CAP_CHOWN:修改文件属主的权限
CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
CAP_FSETID:允许设置文件的setuid位
CAP_KILL:允许对不属于自己的进程发送信号
CAP_SETGID:允许改变进程的组ID
CAP_SETUID:允许改变进程的用户ID
CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
CAP_NET_BROADCAST:允许网络广播和多播访问
CAP_NET_ADMIN:允许执行网络管理任务
CAP_NET_RAW:允许使用原始套接字
CAP_IPC_LOCK:允许锁定共享内存片段
CAP_IPC_OWNER:忽略IPC所有权检查
CAP_SYS_MODULE:允许插入和删除内核模块
CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
CAP_SYS_CHROOT:允许使用chroot()系统调用
CAP_SYS_PTRACE:允许跟踪任何进程
CAP_SYS_PACCT:允许执行进程的BSD式审计
CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT:允许重新启动系统
CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
CAP_SYS_RESOURCE:忽略资源限制
CAP_SYS_TIME:允许改变系统时钟
CAP_SYS_TTY_CONFIG:允许配置TTY设备
CAP_MKNOD:允许使用mknod()系统调用
CAP_LEASE:允许修改文件锁的FL_LEASE标志

使用 setcap 设置的文件能力通常是持久性的,这意味着一旦你用 setcap 命令为某个文件设置了特定的能力,这些设置会保存在文件的元数据中,即使系统重启之后,这些设置也不会丢失。因此,通常情况下,系统重启之后不需要重新设置 setcap。

但是,有几种情况需要注意,可能会导致这些设置丢失或需要重新设置:

文件被替换或删除:如果设置了能力的文件被删除或替换了(例如,通过软件升级或手动替换),新文件将不再拥有之前设置的能力,这时需要重新设置。
存储介质问题:如果存储这些设置的文件系统或磁盘发生损坏,可能导致能力设置丢失。
外部配置管理或安全策略:某些自动化配置管理系统或安全策略(如SELinux、AppArmor等)可能会在系统启动时覆写或重置文件的能力设置,需根据具体配置来确定。
总的来说,正常情况下,系统重启不影响 setcap 的设置,但维护系统时应留意上述特殊情况。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值