Linux

“ep”能力是什麼意思?

  • July 11, 2021
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)頁的“安全檢查功能啞二進製文件”部分所述)。

引用自:https://unix.stackexchange.com/questions/515881