setcap 명령을 사용하여 기능을 설정하는 방법은 무엇입니까?

setcap 명령을 사용하여 기능을 설정하는 방법은 무엇입니까?

wpa_supplicant를 설정하고 싶습니다.오픈VPN권장 설정과 마찬가지로 루트가 아닌 사용자로 실행합니다.라인샤크. +eip이 예에서 이것이 무엇을 의미하는지 설명하는 문서를 찾을 수 없습니다 .

sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap

답변1

Linux에서 기능이 작동하는 방식은 다음 문서에 설명되어 있습니다.man 7 capabilities.

공정 능력내부에유효한 세트어느쪽에 반대할 것인가권한 확인마치다.파일 기능동안 사용됨프로그램 실행프로세스의 새로운 기능 세트를 계산하기 위해 호출됩니다(다른 프로그램을 실행하려는 경우 1 발생).

파일에는 두 가지 기능 세트가 있습니다.허용된그리고상속 가능한그리고유효한 비트.

프로세스에는 세 가지 기능 세트가 있습니다.효과적인,허용된그리고상속 가능한. 나중에 프로세스의 상속 집합에 추가할 수 있는 기능을 제한하고 호출 중에 기능이 계산되는 방식에 영향을 주는 경계 집합도 있습니다.프로그램 실행. 능력은 다음에서만 얻을 수 있습니다.경계 세트, 추가되지 않았습니다.

프로세스에 대한 권한 확인은 프로세스에 대해 확인됩니다."유효한 세트. 프로세스는 다음을 통해 기능을 향상시킬 수 있습니다.허용된도착하다유효한 세트(사용 카겟그리고syscalls에서 권장되는 API는 다음과 같습니다.cap_get_proc그리고캡 세팅 과정).

상속 가능한그리고경계지허파일 기능동안 역할을 하다프로그램 실행시스템 호출. 기간프로그램 실행, 새로운효과적인그리고허용된세트를 계산하고유전학그리고경계세트는 변경되지 않습니다. 알고리즘은 매뉴얼 페이지에 설명되어 있습니다 capabilities.

P'(permitted) = (P(inheritable) & F(inheritable)) |
                (F(permitted) & cap_bset)

P'(effective) = F(effective) ? P'(permitted) : 0

P'(inheritable) = P(inheritable)    [i.e., unchanged]

어디이전 기능 세트입니다.피'나중에 설정하는 기능이에요프로그램 실행그리고에프파일 기능 집합입니다.

동시에 두 프로세스에 능력이 존재하는 경우'상속 가능한설정 및 파일상속 가능한다음에 추가되는 집합(교차/논리 AND)허용된 세트. 문서허용된 세트(경계 세트에 있는 경우) 여기에 (합집합/논리적 OR)을 추가합니다.

만약에유효한 비트파일 기능 설정에서 모든허용된능력이 다음으로 증가했습니다.효과적인뒤쪽에프로그램 실행.

커널의 함수는 실제로 스레드에 대해 설정되지만 파일 함수의 경우 이러한 구별은 일반적으로 프로세스가 자체 기능을 변경할 때만 관련됩니다.

귀하의 예제 함수에서 cap_net_raw및 가 추가됩니다 cap_net_admin.cap_dac_override유전학그리고허용된지허효과적인비트가 설정되었습니다. 바이너리가 실행되면 프로세스는 다음과 같습니다.효과적인그리고허용된경계 세트에 의해 제한되지 않는 경우 세트됩니다.

[1]십자가시스템 호출, 모든 함수 및 경계 세트는 상위 프로세스에서 복사됩니다. uid에 대한 변경 사항에는 함수가 설정되는 방식에 대한 고유한 의미도 있습니다.효과적인그리고허용된세트.

답변2

파일을 설정하는 기능

sudo setcap 'cap_net_bind_service=ep' file_name

하나의 파일에 여러 기능 설정

sudo setcap 'cap_net_bind_service=ep cap_sys_admin=ep' file_name

파일에서 모든 기능을 제거합니다.

sudo setcap -r file_name

파일의 기능을 확인하세요

getcap file_name

가능한 기능 목록(일부는 매우 흥미롭습니다)

https://linux.die.net/man/7/capability

덫:설정 기능은 실제로 스크립트에서 작동하지 않습니다. Python 스크립트가 제대로 작동하도록 하려면 Python 실행 파일 자체의 기능을 설정해야 합니다. 이는 이상적이지 않습니다.

노트: setcap전체 기능 세트는 항상 런타임에 적용됩니다. 대부분의 경우 setcapwith +또는 -구문을 사용하는 예제는 혼란스럽고 쓰레기 이며 chmod. setcap단일 명령으로 완료되었습니다.

관련 정보