##@그룹이름 사용자리스트 [priority] @Guest Anonymous # priority를 지정하지 않으면 기본값 2 @Kiwirian foobar,kiwi,hello123 20 # @Kiwirain 그룹의 priority를 잡는다.
# 부분 IP, CIDR 등등도 모두 지원. @Block 123.123.0.0/255.255.0.0, 123.12, 123.125.0/16
* @Block deny * // 모든 페이지(*)를 @Block 사용자그룹에 대해 모든 액션(*)을 거부(deny)
allow
: 허용
deny
: 제한
protect
: 비밀번호 제한이 가능한 몇몇 POST액션에 대해 (모든 액션이 관리비번으로 제한가능하지는 않습니다)
*
는 모든 액션을 가리키며, 페이지 이름은 regex가 가능합니다.
# 페이지이름 @그룹/특정사용자 allow/deny 액션리스트 FoobarPage @ALL allow * FoobarPage babo deny edit,diff,info HelpOn.* @ALL deny edit,savepage
@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 편집 못하게 함
# 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등의 일부 액션을 거부
allow read
+ deny read
= deny read
deny read
+ allow read
= allow read
allow *
+ deny *
= deny *
모든 액션을 거부
deny *
+ allow *
= allow *
모든 액션을 승인
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
가 된다.
* @ALL deny * * @ALL allow read ProtectedPage @ALL deny readProtectedPage는
deny *
+ allow read
+ deny read
= deny *
이 된다.
* @ALL deny * * @ALL allow read ProtectedPage @ALL deny *
deny *
+ allow read
+ deny *
이 된다: explicit하게 허락된 read가 허용된다.
마지막 줄 ProtectedPage @ALL deny *
는 무시되게 되는 것이다.
* @ALL deny * * @ALL allow read,ticket,info,diff,titleindex,bookmark,pagelist ProtectedPage @All deny read,ticket,info,diff,titleindex,bookmark,pagelist
deny *
라고만 하면 안된다.
* @ALL deny * * @ALL allow show,ticket,titleindex,bookmark,pagelist * @User allow edit,savepage ProtectedPage @User deny * # 이것만으로는 의도대로 작동 안한다. # 다음을 explicit하게 명시해야 의도대로 작동한다. ProtectedPage @User deny edit,savepage
@User deny *
+ @User allow edit,savepage
이므로 edit,savepage만 허용된다.
allow edit,savepage
라고 explicit하게 정의된 것을 다시 취소시켜야 의도대로 작동하는 것이다. 따라서 ProtectedPage @User deny edit,savepage
라고 써 주어야 한다.
####### @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
allow read,info,diff
+ deny *
= read,info,diff만 허용
deny *
: 모두 거부 (@Guest그룹의 priority가 높으므로 @ALL에 대해 허용된 것과 무관하게 거부된다)
deny backup,resotre
+ allow *
(Order Deny,Allow)
allow read,info,diff
+ deny *
(Order Allow,Deny)
deny info,diff
+ @ALL deny backup,restore
+ allow *
: priority가 같은 항목이 합쳐진다.
$acl_debug=1
옵션을 넣으면, 어떤 식으로 적용될지를 보여줍니다.