1 概念
setcap 是一个 Linux 命令,用于设置文件的 POSIX 能力。这些能力允许某些二进制文件在没有 root 权限的情况下执行特定操作,以提高系统安全性。该命令通常用于提供更少的特权访问,而不是将权限完全授予 root 用户。
2 语法
setcap 命令的语法如下:
setcap [-q] <cap>|<cap>=<ep> <file> ...
其中, 表示一个或多个需要设置的 POSIX 能力, 表示需要设置的能力所需的权限。 是需要设置能力的二进制文件或命令的路径。
3 POSIX 能力的完整列表
CAP_AUDIT_CONTROL:允许启用和禁用内核审计记录
CAP_AUDIT_READ:允许读取审计日志条目
CAP_AUDIT_WRITE:允许写入审计日志条目
CAP_BLOCK_SUSPEND:允许阻止挂起和恢复系统
CAP_CHOWN:允许修改文件所有权
CAP_DAC_OVERRIDE:允许忽略文件和目录的访问权限
CAP_DAC_READ_SEARCH:允许读取目录并执行文件
CAP_FOWNER:允许修改文件的所有者
CAP_FSETID:允许在文件上设置 SUID 和 SGID 位
CAP_IPC_LOCK:允许锁定共享内存段
CAP_IPC_OWNER:允许设置 IPC 对象的所有者
CAP_KILL:允许向任何进程发送信号
CAP_LEASE:允许设置文件租约
CAP_LINUX_IMMUTABLE:允许设置 Linux 不可变标志
CAP_MAC_ADMIN:允许管理 MAC 配置
CAP_MAC_OVERRIDE:允许覆盖 MAC 配置
CAP_MKNOD:允许创建设备文件和 FIFO
CAP_NET_ADMIN:允许进行各种网络管理操作
CAP_NET_BIND_SERVICE:允许绑定到低于 1024 的端口
CAP_NET_BROADCAST:允许广播网络消息
CAP_NET_RAW:允许进行原始套接字操作
CAP_SETFCAP:允许修改文件的能力
CAP_SETGID:允许修改组 ID
CAP_SETPCAP:允许修改进程的能力
CAP_SETUID:允许修改用户 ID
CAP_SYS_ADMIN:允许进行各种系统管理操作
CAP_SYS_BOOT:允许重启系统
CAP_SYS_CHROOT:允许在新根目录下启动进程
CAP_SYS_MODULE:允许加载和卸载内核模块
CAP_SYS_NICE:允许提高进程优先级
CAP_SYS_PACCT:允许查看系统帐户
CAP_SYS_PTRACE:允许使用 ptrace 进行调试
CAP_SYS_RAWIO:允许进行裸磁盘和网络 IO 操作
CAP_SYS_RESOURCE:允许修改系统资源限制
CAP_SYS_TIME:允许修改系统时钟
CAP_SYS_TTY_CONFIG:允许更改 tty 设备的设置
CAP_SYSLOG:允许读取和写入系统日志
CAP_WAKE_ALARM:允许唤醒系统
除了上述列表中列出的 POSIX 能力,还有一些特定于某些系统或应用程序的额外能力。
以下是一些特定能力的示例:
CAP_AUDIT_WRITE:在某些系统上用于写入审计记录
CAP_NET_ADMIN, CAP_NET_RAW:在某些系统上用于进行 DHCP 配置
CAP_SYS_PTRACE:在某些应用程序中用于调试进程
CAP_SYS_ADMIN:在某些应用程序中用于管理容器或虚拟机
请注意,不是所有的 Linux 内核都支持所有的 POSIX 能力。如果在运行 setcap 命令时出现错误,可能是因为您正在尝试设置不受支持的能力。在使用 setcap 命令设置 POSIX 能力时,请务必仔细评估它们对系统安全性的影响,并且尽可能仅授予应用程序所需的最少特权。
4 实例
将 /usr/bin/ping 命令的 CAP_NET_RAW 能力设置为允许非 root 用户执行:
sudo setcap cap_net_raw+ep /usr/bin/ping
将 /usr/bin/traceroute6 命令的 CAP_NET_RAW 能力设置为允许非 root 用户执行:
sudo setcap cap_net_raw+ep /usr/bin/traceroute6
将 /usr/bin/sudo 命令的 CAP_SETUID 和 CAP_SETGID 能力设置为允许非 root 用户执行:
sudo setcap cap_setuid,cap_setgid+ep /usr/bin/sudo
需要注意的是,使用 setcap 命令需要谨慎,因为它可以在没有 root 权限的情况下授予特权,从而可能会导致系统安全性问题。建议仅在确实需要时使用,并且应谨慎评估每个设置的影响。
5 +ep和+eip区别
+ep和+eip是setcap命令中可用的两个选项,用于设置程序的能力。这两个选项之间的区别如下:
+ep表示“effective capability”和“permitted capability”的组合,即程序将拥有指定的能力,并且该能力将被视为程序的有效能力和允许能力。程序将能够使用这些能力来执行需要特权的操作,例如对网络接口进行更改等。但是,程序的访问权限将受到限制,因为程序的权限将基于其用户ID和组ID,以及当前进程的有效权限和组ID。
+eip表示“effective capability”、“permitted capability”和“inheritable capability”的组合,即程序将拥有指定的能力,并且该能力将被视为程序的有效能力、允许能力和可继承能力。程序将能够使用这些能力来执行需要特权的操作,并且可以继承这些能力,以便将它们传递给由程序启动的子进程。这使得子进程能够继承程序的特权,而无需再次运行setcap命令。
因此,如果您想要设置程序的能力,并确保子进程可以继承这些能力,那么应该使用+eip选项。如果您只想要设置程序的能力,并且不需要子进程继承这些能力,则可以使用+ep选项。请注意,为程序添加这些特权可能会带来潜在的安全风险,因此应该谨慎使用,并仅在确保了解其风险和影响的情况下使用。
Linux setcap命令详解
2518

被折叠的 条评论
为什么被折叠?



