since MoniWiki 1.1.2
모니위키의 SecurityPlugin의 한가지
Contents
2. 사용자 정의 그룹 @Group 그리고 @Group의 priority ¶
##@그룹이름 사용자리스트 [priority] @Guest Anonymous # priority를 지정하지 않으면 기본값 2 @Kiwirian foobar,kiwi,hello123 20 # @Kiwirain 그룹의 priority를 잡는다.
Anonymous 사용자는 @Guest로 지정되어 있으며, @Guest는 미리 정의된 그룹이 아닙니다.
3. ACL 타입 ¶
allow
: 허용
deny
: 제한
protect
: 비밀번호 제한이 가능한 몇몇 POST액션에 대해 (모든 액션이 관리비번으로 제한가능하지는 않습니다)
- 일부 POST액션은 관리자 비밀번호로 제한을 걸어둘 수 있는 액션은 protect 가능한 액션입니다. protect 액션은 제한된 allow이며, 일부 POST액션만 지원합니다. 예) do_post_savepage()는 post 액션이며, 일반 do_goto()같은 액션과는 달리 관리자 비밀번호로 액션을 제한을 할 수 있습니다.
- 일부 POST액션은 관리자 비밀번호로 제한을 걸어둘 수 있는 액션은 protect 가능한 액션입니다. protect 액션은 제한된 allow이며, 일부 POST액션만 지원합니다. 예) do_post_savepage()는 post 액션이며, 일반 do_goto()같은 액션과는 달리 관리자 비밀번호로 액션을 제한을 할 수 있습니다.
*
는 모든 액션을 가리키며, 페이지 이름은 regex가 가능합니다.
# 페이지이름 @그룹/특정사용자 allow/deny 액션리스트 FoobarPage @ALL allow * FoobarPage babo deny edit,diff,info HelpOn.* @ALL deny edit,savepage
3.1. 간단한 적용의 일부 ¶
@Guest Anonymous // @Guest 사용자 그룹 정의 * @ALL deny * // 모든 페이지(*)를 모든 사용자(@ALL)에서 모든 액션(*)을 거부(deny) * @ALL allow ticket // 모든 페이지를 모든 사용자에게 ticket 액션을 허락(allow) * @ALL allow read,userform,rss_rc,aclinfo,fortune,deletepage,fixmoin,ticket // 여러 줄로 나눠쓰기 가능 * @User allow * // 모든 페이지(*)를 일반 가입 사용자에게(@User) 허락(*) WikiSandBox @Guest allow edit,info,diff // WikiSandBox 페이지를 @Guest 그룹에 edit,info,diff 액션을 허용(allow) WikiSandBox Foobar deny edit // 사용자 Foobar는 WikiSandbox 편집 못하게 함
3.2. 완전한 적용의 예 ¶
//로 시작되는 줄은 설명줄입니다.
# acl.default.php # <?php exit()?> // 파일은 php이지만 형식은 php가 아닌 일반 텍스트다. # Please don't modify the lines above # # A sample Access Control Lists file for Moniwiki # @Guest Anonymous // @Guest 사용자 그룹 정의 * @ALL deny * // 모든 페이지(*)를 모든 사용자(@ALL)에서 모든 액션(*)을 거부(deny) * @ALL allow ticket // 모든 페이지(*)를 모든 사용자(@ALL)에게 ticket 액션을 허락(allow) ticket은 가입 폼에 나오는 로봇가입방지 captcha * @User allow * // 모든 페이지(*)를 일반 가입 사용자에게(@User) 허락(*) # some pages are allowed to edit WikiSandBox @Guest allow edit,info,diff // WikiSandBox 페이지를 @Guest 그룹에 edit,info,diff 액션을 허용(allow) # some POST actions support protected mode using admin password * @ALL protect deletefile,deletepage,rename,rcspurge,rcs,chmod,backup,restore // 모든 페이지(*)에 대해 모든 사용자의(@ALL) detetefile,deltetepage 등등의 protect 가능한 액션을 protect # some actions allowed to @ALL * @ALL allow read,userform,rss_rc,aclinfo,fortune,deletepage,fixmoin,ticket # some pages have restrict permission MoniWiki @ALL deny edit,uploadfile,diff // MoniWiki 페이지를 @ALL 모든 사용자에게 edit,upload,diff등의 일부 액션을 거부
4.1. 마지막 ACL 항목이 적용된다 ¶
explicit하게 지정할 경우 최종 ACL 항목이 적용된다.
wildcard를 쓴 경우도 역시 최종 ACL 항목이 적용된다.
allow read
+deny read
=deny read
deny read
+allow read
=allow read
wildcard를 쓴 경우도 역시 최종 ACL 항목이 적용된다.
allow *
+deny *
=deny *
모든 액션을 거부
deny *
+allow *
=allow *
모든 액션을 승인
4.2. explicit하게 지정해야 한다 ¶
wildcard를 쓴 것 보다 explicit하게 지정된 것이 먼저 적용된다. (순서에 상관 없다)
deny *
+allow edit,info
= edit와 info 액션만 가능: explicit하게 지정된 액션만 허락
allow *
+deny info,diff
= info/diff 이외의 액션이 모두 허용: explicit하게 지정된 액션만 거부
deny info,diff
+allow *
= 위의 경우와 같다. explicit하게 지정된 액션인 info, diff만 거부
deny *
+ allow read
는 아파치의 Order allow,deny
와 같다. 즉, explicit하게 지정된 allow에 대해 먼저 검사하여 액션이 read일때만 허락하고 나머지 액션은 deny.
deny edit
+ allow *
은 그 반대로 Order deny,allow
가 된다.
4.3. 예 ¶
모든 페이지에 대해서 읽기만 가능하게, ProtectedPage에 대해서는 읽기도 거부
----
주의: 모든 경우, explicit하게 지정될 경우에 효력이 발생한다.
마지막 줄
* @ALL deny * * @ALL allow read ProtectedPage @ALL deny readProtectedPage는
deny *
+ allow read
+ deny read
= deny *
이 된다.
----
주의: 모든 경우, explicit하게 지정될 경우에 효력이 발생한다.
* @ALL deny * * @ALL allow read ProtectedPage @ALL deny *ProtectedPage는
deny *
+ allow read
+ deny *
이 된다: explicit하게 허락된 read가 허용된다.
마지막 줄
ProtectedPage @ALL deny *
는 무시되게 되는 것이다.
5. priority가 다른 경우 ACL의 성립 과정 ¶
앞절의 설명은 priority가 같은 경우에 대한 일반적인 설명이었다. 그룹의 priority를 두었을 때는 어떻게 적용될까?
5.3. 예제 3 ¶
* @ALL deny * * @ALL allow read,ticket,info,diff,titleindex,bookmark,pagelist ProtectedPage @All deny read,ticket,info,diff,titleindex,bookmark,pagelist
- 모든 사용자(@ALL)에게 allow를 제외한 모든 액션 거부.
- ProtectedPage는 edit,savepage를 제외하고 모두 불허
- 이 경우, allow를 explicit하게 한 모든 액션에 대해 explicit하게 deny를 걸어주어야 된다.
deny *
라고만 하면 안된다.
- 이 경우, allow를 explicit하게 한 모든 액션에 대해 explicit하게 deny를 걸어주어야 된다.
* @ALL deny * * @ALL allow show,ticket,titleindex,bookmark,pagelist * @User allow edit,savepage ProtectedPage @User deny * # 이것만으로는 의도대로 작동 안한다. # 다음을 explicit하게 명시해야 의도대로 작동한다. ProtectedPage @User deny edit,savepage
- 일반 등록 사용자(@User)는 edit,savepage 허락.
- ProtectedPage는 모두 불허
- 이 경우 등록 사용자에 대해
@User deny *
+@User allow edit,savepage
이므로 edit,savepage만 허용된다.
allow edit,savepage
라고 explicit하게 정의된 것을 다시 취소시켜야 의도대로 작동하는 것이다. 따라서ProtectedPage @User deny edit,savepage
라고 써 주어야 한다.
- 이 경우 등록 사용자에 대해
5.4. 연습 ¶
1) 그룹 priority가 같은 항목끼리 합쳐지고, 2) 그룹 priority가 높은 항목이 우선적으로 적용된다.
config.php에
----
위 내용과 통합 필요
#keywords MoniWikiTip
#title 모니위키 권한 설정 (ACL)
ACL을 활성화하면 위키 속도가 묘하게 느려지는 것 같다. 고로, 위키는 그냥 오픈상태에서 사용하는 게 편하다.
####### @ALL 그룹의 priority는 1이다. @Guest Anonymous # @ALL을 제외한 모든 그룹의 priority는 그 값이 지정되지 않으면 2 이다. @Group1 peter,john 20 # priority = 20 @Group2 simon,soo # default group priorty = 2 * @ALL allow * # group priority = 1 * @ALL deny backup,restore * @Guest deny * # group priority = 2 * @Group1 deny * # User defined @Group1 group * @Group1 allow read,info,diff * @Group2 deny info,diff
- peter와 john:
allow read,info,diff
+deny *
= read,info,diff만 허용
- Anonymous (@Guest):
deny *
: 모두 거부 (@Guest그룹의 priority가 높으므로 @ALL에 대해 허용된 것과 무관하게 거부된다)
- 다른 모든 사용자(@ALL):
deny backup,resotre
+allow *
(Order Deny,Allow)
- @Group1 :
allow read,info,diff
+deny *
(Order Allow,Deny)
- @Group2 :
deny info,diff
+@ALL deny backup,restore
+allow *
: priority가 같은 항목이 합쳐진다.
$acl_debug=1
옵션을 넣으면, 어떤 식으로 적용될지를 보여줍니다.
----
위 내용과 통합 필요
#keywords MoniWikiTip
#title 모니위키 권한 설정 (ACL)
ACL을 활성화하면 위키 속도가 묘하게 느려지는 것 같다. 고로, 위키는 그냥 오픈상태에서 사용하는 게 편하다.
Contents
6. 권한 설정과 ACL ¶
위키위키의 기본적인 정신은 누구나 페이지를 편집하고 공유할 수 있다는 것이지만, 개인용이나 특정 집단(동아리나 스터디 그룹 등)이 사용하려면 "권한을 제한"하는 것이 필요하다.
위와 같은 권한 설정을 위해 모니위키에서는 ACL 플러그인을 v1.1.2 부터 제공하고 있다.
ACL을 사용하는 방법은 MoniWikiACL을 참고하면 되지만, 좀 많이 헷갈린다. 그런 사람들(본인 포함)을 위해서 ACL 사용 방법과 현재 이 위키에 적용하고 있는 설정을 예시로 내보이려 한다.
예 1 : 가입과 열람 자체를 막아 관리자 이외에는 접근 불가능하게 함
예 2 : 위키 자체는 열어두고, 일부 팀원들에게만 권한을 부여
예 3 : 특정 페이지는 관리자만 열람/수정할 수 있도록 권한 부여
7. ACL 활성화하기 ¶
config.php 파일 안에 다음의 구문을 추가해서, ACL을 활성화 한다.
$control_read=1; //읽기 제한 on $no_register=0; //1: 회원 가입 금지, 0: 회원 가입 가능 $security_class="acl"; //acl plugin 활성화
8. ACL rule 만들기 ¶
ACL이 활성화 되었다면, 누구에게 어떤 페이지를 어떻게 할 수 있는 권한 규칙을 만들어야 한다. config 폴더 안에 acl.default.php.sample라는 규칙 샘플 파일이 있는데, .sample 부분을 삭제해서 acl.default.php로 이름을 변경하면 ACL에서 규칙을 사용하게 된다.
규칙은 그룹 설정과 권한 설정의 두가지로 구분된다.
8.1. 그룹 설정 ¶
아래 문법에서 '_'는 tab 문자를 대신한다.
acl.default.php안에서 #은 주석을 의미한다.
그룹 설정 문법 : "@그룹명_그룹원_그룹_우선순위"
@Wikimaster icehit3 20 # Group priority = 20 @User # 위키 가입자들이 자동으로 User에 속하게 된다. @All # 위키를 방문한 모든 사람들이 포함된 그룹
9. 예제 : 비로그인 사용자 편집 금지, 일부 페이지 접근 금지 ¶
규칙
See also : MoniWikiACL
- 위키 관리자(@WikiMasters)는 모든 기능 사용 가능
- 위키 관리자만의 사적인 페이지 운용
- 위키 관리자만의 사적인 페이지 운용
- 비로그인 사용자(Anonymous)는 페이지 생성 및 편집 불가
@WikiMasters icehit3,파초 * Anonymous deny edit,diff,info,raw,restore,backup ssun @ALL deny * ssun @ALL allow userform,randompage ssun @WikiMasters allow *----
See also : MoniWikiACL