본문 바로가기

개발 관련 기타/Linux

Linux) Capabilities

리눅스 Capability

 

도입 배경

- root로 실행 시 processprivilege가 너무 막강함

=> privilege를 세분화할 필요성

- root가 탈취 되도 안전하다

=> capabilities를 통해 권한을 낮춰놓았으니

 

Capability 모델

- Root 권한을 세분화 해서 하나의 capability로 나타냄

- )

= CAP_CHOWN

= CAP_DAC_OVERRIDE

- 파일시스템과 결합되어 사용됨

=> executable 파일에 capabiltiesattach

- 파일과 프로세스는 Inherited Set, Permitted Set, Effective Set, Bounding Set 을 가짐

= Effective Set: 유효한 권한 (필요 시 permitted set에서 가져옴)

= Permitted Set: 가능한 권한

= Bounding Set: permitted set에 추가 할 수 있는 권한

Capability rules

 

아래는 program execution 시 적용되는 룰이다.

 

pI` = pI (1)

pP` = (X & fP) | (pI & fI) (2)

pE` = fE ? pP` : 0 (3)

 

(1) 상속 받은 Set은 그대로 새로운 프로세스의 상속 받은 Set가 된다.

 

(2)

 

(pI & fI) => 파일의 inherited set 일지라도 processinherited set 에도 속해야 permitted에 포함됨

 

(X & fP) => 파일의 permitted set X (bounding set)에 있는 한 무조건 permitted에 포함됨

 

(3)

 

fE ? pP` : 0 => 최초 실행 시 프로세스의 effective set은 파일의 effective set이 존재 시 permitted set이 되거나 null이 된다. 추후 capset() 을 통해 effective set에 추가하거나 뺼 수 있다. 하지만 effective setpermitted setsuperset이 될 수 없다.