setcap用法


setcap用法

轉載自:https://feichashao.com/capabilities_basic/

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.備注

  1. setcap 一般用於二進制可執行文件。setcap 用於腳本文件時無效(比如以 #!/bin/python 開頭的腳本文件)
  2. 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM