"ep" 기능은 무엇을 의미합니까?

"ep" 기능은 무엇을 의미합니까?
root@macine:~# getcap ./some_bin
./some_bin =ep

"ep"은(는) 무슨 뜻인가요? 이 바이너리에는 어떤 기능이 있나요?

답변1

# 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)맨페이지).

답변2

이것은 능력이 아닙니다.

유효한 집합과 허용된 집합을 의미합니다.

이는 이러한 능력이 허용된 세트( )에 들어가고 , 허용된 모든 능력이 유효한 세트( ) p에 복사된다는 의미입니다.e

레거시 프로그램(아마도 오늘날 대부분의 프로그램) 에 사용됩니다 e. 즉, 기능을 이해하지 못하여 자체적으로 허용된 기능에서 유효한 기능으로 복사할 수 없는 프로그램에 사용됩니다.

@mosvy가 지적했듯이 빈 세트가 보이는 이유에 대해 라이브러리 작성자는 모두를 없음과 혼동했습니다(무한대와 0은 가장 혼란스러운 두 숫자입니다).

관련 정보