Capabilities (简体中文)
Jump to navigation
Jump to search
能力(capability) (POSIX 1003.1e, capabilities(7))用更小的粒度控制超级管理员权限,可以避免使用 root 权限。软件开发者应该为二进制文件赋予最小权限,而不是使用强大的setuid。很多软件包用了能力, 比如 iputils提供的ping
使用的CAP_NET_RAW(能力的一种) 。例如ping
可以被普通用户执行(和setuid模式一样),同时减少了ping
的潜在安全隐患。
Contents
设置方法
在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
参阅
- Man Page capabilities(7) setcap(8) getcap(8)
- DeveloperWiki:Security#Replacing setuid with capabilities[broken link: invalid section]