Capabilities (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Capabilities翻译,最后翻译时间:2016-05-09,点击这里可以查看翻译后英文页面的改动。

能力(capability) (POSIX 1003.1e, capabilities(7))用更小的粒度控制超级管理员权限,可以避免使用 root 权限。软件开发者应该为二进制文件赋予最小权限,而不是使用强大的setuid。很多软件包用了能力, 比如 iputils提供的ping 使用的CAP_NET_RAW(能力的一种) 。例如ping可以被普通用户执行(和setuid模式一样),同时减少了ping的潜在安全隐患。

设置方法

在linux中,能力是通过命名空间security下的extended attributes (xattr(7))实现。主流linux都支持扩展属性,包括Ext2,Ext3,Ext4,Btrfs,JFS,XFS,和Reiserfs。 下面的例子展示了用getcap显示ping命令的能力,然后通过使用getfattr显示相同的编码后的数据。

$ getcap /bin/ping
/bin/ping = cap_net_raw+ep
$ getfattr -d -m "^security\\." /bin/ping
# file: bin/ping
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=

扩展属性可以通过cp -a自动复制, 但是其他的命令需要一个特别的参数,比如: rsync -X

在Arch中, 能力可以通过包安装脚本iputils.install设置。

管理和维护

如果一个包有过度宽松的能力设置将会被认为是一个错误(bug), 所以这种情况应该被报告出来, 而不是在这里指出.等同于root访问权限的能力(CAP_SYS_ADMIN)或者仅仅等同于root访问(CAP_DAC_OVERRIDE)的能力, 因为Arch不支持任何MAC/RBAC系统,所以不当错误(bug).

Warning: 太多能力能让小的特权升级. 查看例子和解释需要看Brad Spengler的帖子 False Boundaries and Arbitrary Code Execution.

从capabilities受益的其他程序

下面软件包不包含 setuid 属性的文件,但是需要 root 权限才能执行。通过启用一些能力,一般用户就可以使用软件。

beep

# setcap cap_dac_override,cap_sys_tty_config+ep /usr/bin/beep

chvt

# setcap cap_dac_read_search,cap_sys_tty_config+ep /usr/bin/chvt

iftop

# setcap cap_net_raw+ep /usr/bin/iftop

mii-tool

# setcap cap_net_admin+ep /usr/bin/mii-tool

有用的命令

找到 setuid-root 文件:

$ find /usr/bin /usr/lib -perm /4000 -user root

找到 setgid-root 文件:

$ find /usr/bin /usr/lib -perm /2000 -group root

参阅