Linux
“ep”能力是什麼意思?
root@macine:~# getcap ./some_bin ./some_bin =ep
“ep”是什麼意思?這個二進製文件的功能是什麼?
# getcap ./some_bin ./some_bin =ep
該二進製文件從一開始就具有允許 (
p
) 和有效 (e
) 的所有功能。在能力的文本表示中,前導
=
等同於**all=
**. 從cap_to_text(3)
手冊頁:如果主要操作符是
=
,並且沒有提供能力列表,則假定操作列表引用所有能力。例如,以下三個子句彼此等價(並表示完全空的能力集)all=
:=
;cap_chown,<every-other-capability>=
.這樣的二進製文件可以隨心所欲,僅受能力邊界集的限制,在典型的桌面系統上,它包括所有內容(否則 setuid 二進製文件
su
將無法按預期工作)。請注意,這只是以下文本表示的“陷阱”
libcap
: 在將列印security.capability
的文件的擴展屬性中,所有有意義的位都有效;對於空的, (後面沒有任何東西)將被列印出來。getcap``/file/path =ep
security.capability``/file/path =``=
如果有人仍然不服氣,這裡有一個小實驗:
# cp /bin/ping /tmp/ping # will wipe setuid bits and extented attributes # su user -c '/tmp/ping localhost' ping: socket: Operation not permitted # setcap =ep /tmp/ping # su user -c '/tmp/ping localhost' # will work because of cap_net_raw PING localhost(localhost (::1)) 56 data bytes 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.073 ms ^C # setcap = /tmp/ping # su user -c '/tmp/ping localhost' ping: socket: Operation not permitted
請注意,空文件功能也與已刪除功能 (
capset -r /file/path
) 不同,空文件功能將在文件執行時阻止 Ambient 集被繼承。文件功能的一個微妙之處
=ep
在於,如果邊界集不是完整的,那麼核心將阻止其=ep
上的程序執行(如手冊capabilities(7)
頁的“安全檢查功能啞二進製文件”部分所述)。