the seed 엔진을 자체 분석해보고 쓰는 첫 글이 ACL이라는 것은, ACL에 관해서 쓸게 좀 있다는 소리..일 것이다.
이 ACL에 대해서 알아보도록 하자.
ACL이란?
Access Control List의 줄임말이다. 정보 이용 주체가 정보에 대해 가지는 권한을 정해 놓은 목록이다. the seed에 이런 기능이 있는 것은 아무래도 모니위키를 쓰던 리그베다 위키 시절의 잔재가 아닐까 싶다.
the seed의 ACL 구조
더시드엔진에서 ACL은 문서 ACL과 이름공간 ACL로 이루어져 있다. 문서 ACL은 해당 문서 하나에만 적용되지만, 이름공간 ACL은 해당 namespace 안에 있는 모든 문서의 기본값으로 적용된다. 개별 문서 ACL은 이름공간 ACL보다 우선 적용되며, ‘허용’ 규칙이 없으면 거부되는 것이 기본이다. 모든 규칙은 위에서 아래로 순서대로 적용되는데, 예시를 가지고 설명하면 이해하기 편할 것 같다.

위 예시와 같은 경우, 우선 1번 규칙에서 VPNGate라는 ACL Group에 속한 모든 사용자는 거부된다. 그 다음 2번 규칙에 의해 1번 규칙을 적용받지 않는 모든 사용자는 허용된다. 위에서 아래로 규칙을 순서대로 읽어들여 자신에게 적용되는 ACL 규칙이 나타날 때까지만 규칙에 영향을 받는 것이기 때문에 2번 규칙을 적용받는 모든 사용자는 3번 규칙의 영향을 받지 않는 것이다. 즉, 자신에게 적용되는 가장 상단에 있는 ACL 규칙보다 아래에 있는 규칙은 모두 무시된다.
만약 개별 문서 ACL이 존재하지 않는다면 이름공간 ACL을 적용받게 된다. 그럼 이름공간 ACL이 존재하지 않는다면 어떻게 될까? 정답은 ‘모두 거부된다’ 이다. 잠깐, 그러면 해당 이름공간의 ACL 조정 권한을 가진 사람이 정의되어 있지 않으면 어떻게 할까?
이런 상황에서는 nsacl 권한을 가진 사람만이 이 ACL 규칙을 바꿀 수 있다. nsacl 권한은 ‘거부’로 설정된 규칙을 무시하고 ACL을 조정할 수 있는 권한이다.
the seed에서는 읽기, 편집, 이동, 삭제, 토론 생성, 토론 댓글, 편집 요청, ACL 조정의 8가지 동작에 대해 ACL을 설정할 수 있다. 단, 최근 엔진 업데이트 이후 문서 단위로 읽기 ACL을 설정하는 것은 불가능해졌다.
ACL 설정 방식
더시드엔진에서 ACL 규칙을 설정하려면, 우선 해당 문서의 ACL을 설정할 권한이 있어야 한다. ACL 규칙은 크게 3가지 요소로 구성된다.
1. Condition
2. Action
3. Duration

우선 Condition 항목은 ACL을 적용할 대상을 설정한다. 첫 번째 칸은 perm(권한), member(사용자), ip(아이피), geoip(국가), aclgroup(ACL그룹) 중에서 대상의 종류를 설정하는 부분이다. 두 번째 칸은 perm의 경우 권한의 종류이고 member, ip, geoip, aclgroup을 선택할 경우 대상을 입력할 수 있는 칸이 주관식(?)으로 나온다. member의 경우 사용자 ID, ip의 경우 IP(CIDR도 가능), geoip의 경우 GeoIP 국가 코드(KR, US 등), aclgroup은 해당 그룹 이름을 입력하면 된다.
Action 항목은 allow(허용), deny(거부), gotons(이름공간ACL 실행)의 세 가지로 분류되어 대상에 대해 어떤 동작을 취할 것인지 결정한다. 이를 활용해 특정 규칙을 만들고, 그 다음 모든 사용자에 대해 gotons를 설정해 둔다면 이후 단계에는 기존의 이름공간 ACL이 유지된 상태에서 특정 규칙만 추가로 적용할 수 있다.
Duration은 말 그대로 적용할 기간이다. 보통 영구로 설정하는 경우가 많지만, 기간을 설정할 경우 Expiration 란에 만료 시각이 표시된다. 만료 시각이 지나면 UI 상에서 보이지 않게 된다.
더시드엔진에서 저 기능을 사용해서 추가할 때, 입력값을 검증하는데 실제 존재하지 않는 값을 제공한다던가, 존재하지 않는 사용자 / ACLGroup 등을 입력하면 오류 메시지가 뜨며 추가되지 않는다.
결론
ACL을 적용하는 데 있어서 핵심은 순서를 정확히 하여 의도된 대로 규칙이 적용되도록 하는 것이다.
'World Wide Web > the seed' 카테고리의 다른 글
[the seed] 오류 목록 (0) | 2021.06.20 |
---|---|
[the seed] 분석을 시작하며... (0) | 2021.06.15 |