LINUX经验之setcap允许普通用户监听指定的1024以下的端口

允许用户监听指定的1024以下的端口,使用setcap提供可执行的附加权限,以便程序可以绑定到端口< 1024:
setcap ‘cap_net_bind_service=+ep’ /path/to/program
#######################################################
撤消这些权限的正确方法是什么?
解决方法:
要从文件中删除功能,请使用-r标志
setcap -r /path/to/program
这将导致程序没有功能.

其他setcap用法

1.背景

安装 Wireshark 的时候,有一步是给 dumpcap 读网卡的权限,使得普通用户也可以使用 Wireshark 进行抓包。

# setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/dumpcap

那么 setcap 是个啥玩意呢?

从前,要使被普通用户执行的某个程序有特殊权限,一般我们会给这个程序设置suid,于是普通用户执行该程序时就会以root的身份来执行。
比如,/usr/bin/passwd 这个可执行文件就带有suid,普通用户执行它时会以root身份执行,所以 passwd 才能读取并修改 /etc/shadow 文件。

[root@rhel671 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd

[root@rhel671 ~]# ls -l /etc/shadow
----------. 1 root root 945 Sep 11 16:22 /etc/shadow

可以看到,使用 suid 有一个弊端,那就是以 root 身份执行的程序有了所有特权,这会带来安全风险。
Kernel 从 2.2 版本开始,提供了 Capabilities 功能,它把特权划分成不同单元,可以只授权程序所需的权限,而非所有特权。

2.用 /bin/ping 测试

在 RHEL6 中,普通用户能执行 ping 命令是因为 /bin/ping 设置了 suid 。

[root@rhel671 ~]# ls -l /bin/ping
-rwsr-xr-x. 1 root root 38200 Dec 11  2014 /bin/ping

将 /bin/ping 的 suid 去除,普通用户则无法执行 ping.

[root@rhel671 ~]# chmod 755 /bin/ping
[root@rhel671 ~]# ls -l /bin/ping
-rwxr-xr-x. 1 root root 38200 Dec 11  2014 /bin/ping
[testuser@rhel671 ~]$ ping www.baidu.com
ping: icmp open socket: Operation not permitted

在 root 用户下,用 setcap 命令给 /bin/ping 这个可执行文件加上 “cap_net_admin,cap_net_raw+ep” 权限,普通用户即可使用 ping.

[root@rhel671 ~]# setcap 'cap_net_admin,cap_net_raw+ep' /bin/ping
[root@rhel671 ~]# getcap  /bin/ping
/bin/ping = cap_net_admin,cap_net_raw+ep
[testuser@rhel671 ~]$ ping www.baidu.com
PING www.a.shifen.com (119.75.217.109) 56(84) bytes of data.
64 bytes from 119.75.217.109: icmp_seq=1 ttl=47 time=4.08 ms
64 bytes from 119.75.217.109: icmp_seq=2 ttl=47 time=4.13 ms

3.Extended attributes

在 Linux 中的 Capabilities 是通过 extended attributes 中的 security 命名空间实现的。主流的 Linux 文件系统都支持 Extended attributes,包括 Ext2, Ext3, Ext4, Btrfs, JFS, XFS 和 Reiserfs.

[root@rhel671 ~]# getfattr -d -m "security\\." /bin/ping
# file: bin/ping
security.capability=0sAQAAAgAwAAAAAAAAAAAAAAAAAAA=

4.备注

setcap 一般用于二进制可执行文件。setcap 用于脚本文件时无效(比如以 #!/bin/python 开头的脚本文件)
CAPABILITIES(7) 文档有较为详尽的说明,推荐阅读。

5.参考文献

https://wiki.archlinux.org/index.php/Capabilities
https://wiki.archlinux.org/index.php/DeveloperWiki:Security#Replacing_setuid_with_capabilities
https://wiki.archlinux.org/index.php/File_permissions_and_attributes#Extended_attributes
http://man7.org/linux/man-pages/man7/capabilities.7.html CAPABILITIES(7)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值