DokuWiki

It's better when it's simple

사용자 도구

사이트 도구


ko:acl

접근 권한 제어

DokuWiki 는 다른 대부분의 위키처럼 기본적으로 매우 오픈되어 있습니다. 모든 사람이 페이지 생성,수정,삭제가 가능하게 되있습니다. 어찌되었든 종종 모든 페이지나 일부 페이지들에 대해 접근을 제한하는 것이 좋은 경우가 있습니다. 바로 Access Control Lists (ACL)을 통해 이런 문제를 해결할 수 있습니다.

이 페이지는 DokuWiki에서 ACL이 동작되는 기본적인 방법과 옵션 설정하는 법에 설명합니다. 자세한 정보가 필요하거나 의문점이 있다면 discussion:acl 페이지를 참조하기 바랍니다.

:!: 경고: DokuWiki의 ACL 기능은 꽤 오래전부터 포함되어 있었고 안정적인 상태이지만 어쨋든, 위키에서 허가받지 않은 사용자들이 접근하는 것을 우려한다면 인터넷에 절대 연결하지 말기

설정

DokuWiki에서 ACL이 동작되도록 하려면, 최소한 기본 ACL이 하나 이상 필요합니다. 단순히 예제 파일들 conf/acl.auth.php.distconf/users.auth.php.distconf/acl.auth.phpconf/users.auth.php로 복사하면 로그인 페이지가 동작될 것입니다. 환경옵션 설정할 필요가 있을 수도 있습니다. 공개적인 등록과 함께 기본 텍스트 파일 인증이 가능하도록 local.php파일에 추가할 예제 코드를 보도록 합니다.

  $conf['useacl']       = 1;        // ACL이 가능하게
  $conf['superuser']    = '@admin'; // 관리자 그룹은 superuser

useacl 옵션은 ACL기능을 가능하게 합니다. 일단 ACL기능이 사용가능하게 되면 “로그인”버튼이 모든 위키 페이지 아래쪽에 나타나게 되고 사용자는 등록이 가능합니다. superuser 옵션은 DokuWiki에서 모든 것(새로운 ACL 제한을 추가하는 것을 포함)을 할 수 있는 사용자를 설정할 수 있습니다. 단일 사용자나 그룹(@으로 시작)이 될 수 있습니다. ACL이 지원되게 DokuWiki를 설치했다면 브라우저를 사용하여 “로그인”버튼을 누른 후 나오는 “등록” 링크를 선택하여 최소한 사용자 1명을 등록합니다.(만일 “등록”링크를 볼 수 없다면 conf/users.auth.php 파일 퍼미션이 잘못되어서 어떤 데이타도 쓸 수 없기 때문입니다. 그 후 conf/users.auth.php를 수정하여 적어도 한 사용자를 “user”그룹에서 “admin”그룹으로 변경합니다. 만일 “admin” 그룹에 속하는 사용자로 로그인을 하게되면 추가적인 “관리”버튼이 보이게 됩니다.

이 곳에서 추가 보안 기능이 활성화 가능합니다:

  $conf['openregister'] = 0;        // 사용자는 더 이상 새로 등록이 불가능합니다.(기본 설정은 1)

위의 설정으로 더 이상 새 사용자가 로그인 폼에서 등록이 불가능하며, 사용자는 단지 관리자에 의해서만 추가가 가능합니다.(웹 관리 인터페이스나 직접 conf/users.auth.php을 수정해서 가능).

몇가지 추가 환경 설정이 가능합니다만, 대부분의 사람들에게는 기본 설정으로도 충분합니다.

$conf['autopasswd']  = 1;                // 자동으로 암호를 생성 후에 사용자에게 이메일로 보냄
$conf['passcrypt']   = 'smd5';           // 암호화 방법 결정(smd5,md5,sha1,ssha,crypt,mysql,my411)
$conf['defaultgroup']= 'user';           // 새로운 사용자들에게 할당되는 기본 그룹 
$conf['profileconfirm'] = '1';           // 사용자 프로필 변경시 암호 확인 여부
$conf['authtype']     = 'plain';         // 일반 텍스트 백엔드(default)
  • autopasswd을 0으로 바꾸면 사용자는 등록시 자신의 암호를 직접 입력해야합니다. 이 방법은 정상적인 이메일 주소 등록을 보장할 수 없는 단점이 있습니다.
  • passcrypt은 암호를 저장할 때 쓰이는 암호화 방법을 결정합니다.
  • defaultgroup은 말 그대로 모든 새로운 사용자에게 기본적으로 제공되는 그룹을 뜻합니다.
  • profileconfirm을 0으로 설정하면 로그인 사용자가 자신의 프로필(실제 이름, 암호, 이메일 주소)을 변경시 암호 확인 작업을 하지 않도록 해줍니다.
  • DokuWiki는 사용자와 그룹의 데이타에 접근하는 여러가지 방법이 있습니다.기본적으로는 자신의 plaintext 백-엔드 사용하도록 되있으며 authtype 옵션으로 바꿀 수 있습니다. 사용가능한 백-엔드를 보려면 backends 페이지를 참조하면 됩니다.

사용자 관리

사용자는 사용자 관리 플러그인을 통해 추가, 삭제, 수정이 가능합니다. openregister옵션은 사용자 스스로 등록할 수 있게 해줍니다. 수작업으로 사용자를 직접 추가하기 위해서는 plain backend문서를 참조하기 바랍니다.

접근 제한

접근 제한은 페이지이름공간에 관한 내용입니다. 퍼미션(접근 제한)은 읽기, 수정, 생성, 업로드, 삭제 5가지로 분류됩니다. 각각 가장 높은 퍼미션은 낮은 퍼미션을 포함할 수 있는데, 가장 낮은 것은 읽기이고 가장 높은 것은 삭제입니다.합니다. 생성, 업로드, 삭제 퍼미션은 단지 이름공간에만 적용되는 것을 주의하기 바랍니다.

DokuWiki는 사용자에게 주어진 권한을 검사할 때 사용자 이름과 사용자가 속한 그룹에 맞는 규칙(rule)을 사용합니다. 가장 높은 퍼미션이 사용되도록 설정되도록 되어 있으며 먼저 페이지에 대한 퍼미션을 확인 후 적용되는 규칙이 발견될 때까지 모든 상위 이름공간을 검사합니다.

접근 제한 규칙을 추가하기 위해서, 먼저 제한하고 싶은 페이지로 이동합니다. 그리고 관리버튼을 눌러서 관리자 화면을 엽니다.( superuser만 가능) Access Control List Management(접근 제어 목록 관리)를 선택하면 현재 페이지에 대한 제한 사항들을 보여주는 다음과 같은 표를 보여줍니다.

Example of an ACL-Restriction

표의 가장 위 부분에 제한 사항이 추가됩니다. 현재 페이지나 페이지가 속한 이름공간들1)에서 적용 범위를 선택해야 합니다. 권한을 부여하거나 거부할 사용자나 그룹을 선택합니다. 그리고 마지막으로 실제 적용하고 싶은 권한을 선택합니다. 어떤 권한도 선택하지 않는다면 페이지나 이름공간을 특정사용자나 그룹이 접근하는 것을 효율적으로 막을 수 있습니다.

주의: 삭제권한은 미디어 파일들에만 적용됩니다. 페이지들은 수정권한만 있으면 누구라도 삭제하거나 복구할 수 있습니다. 삭제 권한없이 업로드 권한만 가졌다면 이미 존재하는 미디어 파일을 교체할 수 없습니다.

특수한 그룹

ALL. 로그인하지 않은 사용자를 포함해 모든 사람들은 ALL 그룹에 속합니다. 모든 사용자(기본 설정)에게 접근 제한을 부여하기 위해 이 그룹을 사용하고 몇몇 선택된 사용자들에게 퍼미션을 해제할 수 있습니다. 예를 들어 위 그림을 보면, upload그룹에 속한 사람 외에는 어떤 사람도 업로드가 허용되 있지 않습니다.

user. 모든 자기 스스로 등록한 사용자들은 기본적으로(자동) 'user'그룹에 속하도록 되있습니다. 이 권한은 '로그인'사용자들에게 부여해 보기 바랍니다. 이 그룹의 이름은defaultgroup옵션을 통해 바꿀 수 있습니다. “user”그룹은 plain-text인증 백-엔드를 사용할 때 자동으로 모든 사용자가 속하게 되는 실제 그룹입니다. 만일 다른 백-엔드를 사용한다는 해당 백-엔드에서 제공되는 그룹들을 사용할 필요가 있습니다.

배경 지식

접근 제어 정보는 conf/acl.auth.php파일에 저장됩니다. 만일 ACL 관리 화면을 사용하고 싶다면 웹서버에 의해 쓰기가능해야합니다. :!: 직접 파일을 수정하지 말고 대신 관리 화면을 사용하기 바랍니다.

빈 행들과 쉘에서 쓰이는 주석문들은 무시됩니다. 각 행들은 공백문자로 구분되는 3개 항목들이 있습니다.

  • 제한하고 싶은 자원(resource). 페이지 이름이나 이름공간를 뜻합니다. 이름공간는 뒤에 *을 붙여 표시됩니다.(아래 보기)
  • 그룹이나 사용자 이름. 그룹은 뒤에 @을 붙여 표시됩니다.
  • 권한 단계(아래 보기)

정수로 표시되는 7단계의 권한이 있습니다. 높은 단계는 낮은 단계를 포함하고 있습니다. 만일 수정이 가능하다면 읽기 역시 가능합니다. 어찌되었든 255admin 권한은 conf/acl.auth.php파일에서는 사용될 수 없습니다. 단지 superuser설정에 적용되도록 내부적으로만 사용되는 권한입니다.

이름 레벨 적용 권한 DokuWiki 상수
none 0 페이지, 이름공간 권한 없음 – 절대 접근 불가 AUTH_NONE
read 1 페이지, 이름공간 읽기 가능 AUTH_READ
edit 2 페이지, 이름공간 존재하는 페이지는 수정 가능 AUTH_EDIT
create 4 이름공간 새로운 페이지 생성 가능 AUTH_CREATE
upload 8 이름공간 미디어 파일 업로드 가능 AUTH_UPLOAD
delete 16 이름공간 미디어 파일 변경,삭제 가능 AUTH_DELETE
admin 255 관리 플러그인 관리자만 변경할 수 있는 superuser2) AUTH_ADMIN

예를 들면:

1: *                     @ALL        4
2: *                     bigboss    16
3: start                 @ALL        1
4: marketing:*           @marketing  8
5: devel:*               @ALL        0
6: devel:*               @devel      8
7: devel:*               bigboss    16
8: devel:funstuff        bigboss     0
9: devel:*               @marketing  1
10: devel:marketing       @marketing  2

각 행의 의미를 살펴봅시다:

  1. 주 이름공간의 권한을 설정합니다. 모든 사용자가 페이지의 수정이나 생성이 가능하도록 허용합니다. 단 업로드는 허용하지 않았습니다.
  2. 사용자bigboss에게 모든 권한을 허용합니다.
  3. start페이지는 모든 사용자가 읽기만 가능하도록 허용합니다.
  4. marketing이름공간을 설정합니다. marketing그룹의 모든 사용자는 업로드가 가능하도록 허용합니다. - 다른 사용자들은 1행의 규칙에 적용되므로 아직까지 생성이나 수정이 가능합니다. bigboss는 2행의 권한을 물려 받았으므로 파일 업로드와 삭제가 가능합니다.
  5. 지금은 devel 이름공간의 접근은 제한됩니다. 누구라도 접근할 수 없습니다.
  6. 실제로 어떤 사람에게도 적용되지 않습니다. – devel그룹 소속 사용자들에게만 권한을 부여했습니다.
  7. 그리고 물론 bigboss에게는 허용됩니다. – 그리고 그는 파일 삭제와 업로드가 허용되는 유일한 사용자입니다.
  8. 어찌되었든 devel소속 사용자들은 상사(bigboss)가 funstuff 페이지를 보는 것을 원하지 않습니다. – 정확히 들어 맞는 페이지들은 이름공간 권한보다 앞선다는 것을 기억하기 바랍니다.
  9. marketing팀 역시 devel이름공간의 모든 것들을 읽을수 있습니다.
  10. 마지막으로 marketing 소속 사용자들은 devel:marketing 페이지를 수정할 수 있습니다.

파일에서 순서는 상관없다는 것을 반드시 주의하기 바랍니다. 파일은 한번에 파싱(parsing)되고나서 현재 해당 페이지/사용자 조합에 완전히 들어 맞는 권한을 찾으려고 시도합니다. 만일 들어 맞는 권한이 발견되는 경우 더 이상의 권한 검색은 하지 않습니다. 만일 들어 맞는 권한이 발견되지 않는다면 현재 페이지에 대한 그룹 권한을 확인합니다. 만일 권한이 이번에도 발견되지 않으면 다음으로 상위 이름공간의 권한 검사를 계속합니다.

위 예제에서 bigboss 사용자에 대한 권한을 알 수 있습니다. 이 사용자는 2행에서 모든 권한이 주어졌지만, 7행에서 다시 devel:* 이름공간의 완전한 접근을 얻을 필요가 있습니다. 만일 7행이 없었다면, devel 이름공간 내에 있는 페이지에 대해서 bigboss사용자에 대한 첫번째 매치는 5행입니다. 그 이유는 bigbossALL그룹 소속이기 때문입니다.

(주) //bigboss// 가 예를 들어 devel:xxx 라는 페이지를 변경하려고 한다고 가정하자.
     1. devel:xxx bigboss page_update 권한이 있는가를 check한다. --> X
     2. devel:xxx group_of_bigboss page_update 권한이 있는가를 check한다. --> X
     3. devel:xxx bigboss parent_of_page_update 권한이 있는가를 check한다. --> 7행에 의하여 O 따라서 4까지 진행되지 않는다.
     4. devel:xxx group_of_bigboss parent_of_page_update 권한이 있는가를 check한다. --> X
     // 의미가 맞는지 확인 필요

주의: 특수문자(예를 들어 공백문자)가 들어간 사용자와 그룹명을 설정하기 위해 URL escape처리가 필요합니다. 이것은 0 ~ 127byte범위내의 특수문자에 대해서만 적용됩니다. ACL 파일은 UTF-8 인코딩을 사용하기 때문에 어떤 멀티바이트 문자들이라도 있는 그대로 쓰여질 수 있습니다. 이 것은 plain가 아닌 다른 백-엔드를 사용할 때나 적용 가능합니다. plain 백-엔드는 어떤 특수문자도 허용하지 않습니다.

번역

english version: dokuwiki-2006-11-06.

Add your email here if you created translated or modified whole or part of this page.

  • jk Lee - real mail domain is gmail, not zoo.com for spam filtering 2007-2-6 created
1)
최상위 이름공간는 *
ko/acl.txt · 마지막으로 수정됨: 2017-07-09 13:07 저자 175.213.101.92

별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki