리눅스 Capability
도입 배경
- root로 실행 시 process의 privilege가 너무 막강함
=> privilege를 세분화할 필요성
- root가 탈취 되도 안전하다
=> capabilities를 통해 권한을 낮춰놓았으니
Capability 모델
- Root 권한을 세분화 해서 하나의 capability로 나타냄
- 예)
= CAP_CHOWN
= CAP_DAC_OVERRIDE
- 파일시스템과 결합되어 사용됨
=> executable 파일에 capabilties를 attach 함
- 파일과 프로세스는 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 일지라도 process의 inherited 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 set은 permitted set의 superset이 될 수 없다.
'개발 관련 기타 > Linux' 카테고리의 다른 글
Linux) DAC의 한계 [Limitations of Discretionary Access Control] (0) | 2020.11.04 |
---|---|
Linux) C에서 mkdir -p 처럼 디렉토리 만드는 방법 (0) | 2020.06.16 |