DAC은, 유저 ID 및 그룹 ID에 기반한 접근 제어 방식이다.
Access Control Matrix
- subject X object로 이루어진 access matrix로 표현이 가능하다.
- 그치만 유저-자원의 실제 권한 할당 모습을 생각해보면, access matrix는 굉장히 sparse하다. 모든 유저가 모든 파일에 대한 접근을 가지고 있는 시스템은 아예 matrix 자체가 필요 없을테고, 아닌 경우 결국 privileged 유저만이 접근할 수 있는 파일에 대해서는, 모든 일반 유저의 matrix 칸이 비어있을 것이기 때문이다.
- 그래서 공간 효율성을 위해, access control list를 사용한다.
Access Control List
- Access matrix를 column별로, 즉 object별로 어떤 권한을 가지는지 표시한 것이다.
- matrix의 non-empty 셀만을 표현한 것으로, space-efficient하다.
- Object별로 어떤 유저가 어떤 권한을 가지는지를 나타낸다. 따라서, 특정 object에 대한 access right을 알아내는 것에 유용하다.
- 반대로, 특정 유저 기준으로 그 유저가 어떤 자원들에 대한 무슨 권한이 있는지 알아내는 것은 어렵다.
Capability Tickets
- ACL이 Acces matrix의 column-wise representation이라면, capability tickets은 row-wise representation이다.
- 그래서 ACL과 반대로, 유저별 어떤 자원을 가지는지는 알기 쉽고 자원별 어떤 유저에게 권한이 부여되었는지 확인하는 것은 어렵다.
Extended Access Control Matrix
- control matrix에다 subject-subject 관계성을 추가한 것이다.
- 어떤 subject이 다른 subject에 대해 "control"을 가진다는 것은, 권한 부여나 계정 삭제 등의 동작을 실행할 수 있다는 것이다.
- Access control matrix를 A, subject를 S, object를 X라고 표현하면, "S가 자원 X에 대해 접근 권한 alpha를 가진다."는 것은 다음 수식으로 표현할 수 있다:
- 이 matrix를 활용한 access control step은 다음과 같다:
- 1) object마다 access controller를 가진다. 이 controller는 어떤 자원에 대한 접근 요청이 들어왔을 떄, 해당 접근이 허용되는지 확인한다.
- 2) Subject S0는, controller에게 object X에 대한 권한 alpha를 요청한다. 이 요청은 시스템이 다음과 같은 메세지를 controller에게 전달하도록 한다.
-
- 3) Controller는 access matrix A를 읽어서 다음 조건식이 참인지 판별한다.
Copy Flag
- 만약 접근 권한 alpha위에 * 표시가 있다면, 접근 권한을 다른 유저에게 이전할 수 있다는 의미이다. 즉, S0가 접근 권한 alpha를 다른 유저에게 이전할 수 있다는 의미이다. 이전할 때는 *표시를 유지해도 되고 안해도 된다.
System Commands
다음은 여러가지 접근 권한 제어 명령이다. Command라는 요청이 들어왔을 때, Authorization행의 조건을 확인한 후, 만족한다면 Operation을 수행한다.
Implementation of DAC
UNIX file system은 DAC 방식을 구현하여 사용한다.
- r, w, x는 각각 read, write, execute를 나타낸다. 만약 파일 소유자가 다른 유저에게 권한을 새롭게 부여하고 싶다면, 다음과 같은 명령어를 사용하면 된다. chmod 후에 나오는 숫자는 각각 owner class, group class, other class에 속하는 것으로, x권한만 부여하고 싶다면 1을, x와 w를 부여하고 싶다면 3(=1+2)을, r,w,x 모두를 부여하고 싶다면 7(=1+2+4)을 설정하면 된다. 각각은 이진수처럼 작용한다.
- 그런데 여기서, SetUID/GetUID라는 개념이 등장한다. 이 명령어가 사용되는 상황을 예로 들어보자.
- 일반 유저인 A가 패스워드를 변경하고자 한다. UNIX file system에서는 passwd라는 명령어로 패스워드를 변경할 수 있다. 그런데, 패스워드 파일은 /etc/shadow 경로에 있기 때문에, 일반 유저가 접근할 수 없다. 이런 경우, SetUID bit을 설정하면, 유효사용자 값이 프로그램 실행자인 A에서 프로그램 소유자인 root로 변경된다. 그래서 한시적으로 A의 권한이 root로 상승되는 효과를 보게 되는 것이다.
- SetUID/GetUID를 설정하려면, execution bit인 x자리에 s를 사용하면 된다. 이 경우에, 명령어를 입력할 때 계산하는 이진수 앞에 한자리가 더 붙게 된다. 다음 표와 같이 setUID를 표현하고 싶다면 3bit 명령어 앞에 4를, 즉 4777과 같이 사용하면 된다.
명령 | 숫자 |
setUID | 4 |
getUID | 2 |
sticky bit | 1 |
- 만약 setUID와 getUID 둘 다를 사용하고 싶으면 chmod 6777을 사용하면 된다.
- sticky bit은 더이상 사용되지 않는다.
'Information System Security' 카테고리의 다른 글
6-4. Attribute-based access control (ABAC) (0) | 2024.10.24 |
---|---|
6-3. Role-Based Access Control (RBAC) (0) | 2024.10.24 |
6-1. Access Control - basics (0) | 2024.10.23 |
5. Authentication (1) (0) | 2024.10.19 |
댓글