Linux Capability

常見三種用法:
1. 傳統上需要 SUID 的可執行檔,現在改紀錄它需要的 capabilities:
例: ping 在 Fedora 下不需要 SUID:
$ getcap /bin/ping
/bin/ping = cap_net_raw+ep
(要送 ICMP 封包需要開所謂 raw socket: socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) )

2. 啟動時是 root 的 process, 自請降權

3. 負責管理系統服務的 init 程式,幫系統服務降權。以 systemd 為例,要確保某 daemon 絕對不能 ptrace:

[Service]
ExecStart=…
CapabilityBoundingSet=~CAP_SYS_PTRACE

http://0pointer.de/blog/projects/security.html(跳到 "Taking Away Capabilities From Services") 你看 Caveat 那段,它描述要完整列舉別人寫的程式所需的 capabilites 不易。而 Security 背景的人又常嫌 Linux capabilities 分的太粗。

不知是否已普及地被使用

Google Code Search 關門前,我們找 capset(), capsetp(), cap_set_proc() 呼叫者即可看這個 API 有沒有人用、別人怎麼用,現在麻煩多了。我懂得從 Linux distro 的套件相依性看出來:

$ rpm -qf /lib64/libcap.so.2 --provides -qf /lib64/libcap-ng.so.0 --provides
libcap.so.2()(64bit) 
libcap-ng.so.0()(64bit) 
...

$ sudo repoquery -C --whatrequires 'libcap.so.2()(64bit)' --whatrequires 'libcap-ng.so.0()(64bit)' --queryformat '%{name}' | sort -u ( 共78個套件 )
asterisk
...
avahi
bind
...
chrony
cifs-utils
...
dbus
dhclient
dhcp
dnsperf
dovecot
explain
glibc-common
gnome-keyring
iputils
irqbalance
kismet
ladvd
...
libexplain
libsmbclient
libvirt
lxc
mcstrans
miredo-client
murmur
nfs-utils
nscd
ntp
opendchub
openscap
openswan
proftpd
pure-ftpd
quagga
ricci
rpm
rtkit
samba
setroubleshoot-server
smartmontools
squid
suricata
syslog-ng
systemd
terminatorX
vdr
vsftpd
wireshark
wodim
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License