====== 접근 권한 제어 ======
[[DokuWiki]] 는 다른 대부분의 위키처럼 기본적으로 매우 오픈되어 있습니다.
모든 사람이 페이지 생성,수정,삭제가 가능하게 되있습니다.
어찌되었든 종종 모든 페이지나 일부 페이지들에 대해 접근을 제한하는 것이 좋은 경우가 있습니다.
바로 //Access Control Lists// (ACL)을 통해 이런 문제를 해결할 수 있습니다.
이 페이지는 DokuWiki에서 ACL이 동작되는 기본적인 방법과 옵션 설정하는 법에 설명합니다.
자세한 정보가 필요하거나 의문점이 있다면 [[wiki:discussion:acl|discussion:acl]] 페이지를 참조하기 바랍니다.
:!: **경고:** DokuWiki의 ACL 기능은 꽤 오래전부터 포함되어 있었고 안정적인 상태이지만 어쨋든, 위키에서 허가받지 않은 사용자들이 접근하는 것을 우려한다면 인터넷에 절대 연결하지 말기 바랍니다.
===== 설정 =====
DokuWiki에서 ACL이 동작되도록 하려면, 최소한 기본 ACL이 하나 이상 필요합니다. 단순히 예제 파일들 ''conf/acl.auth.php.dist''과 ''conf/users.auth.php.dist''을 ''conf/acl.auth.php''과 ''conf/users.auth.php''로 복사하면 로그인 페이지가 동작될 것입니다.
[[config|환경]]옵션 설정할 필요가 있을 수도 있습니다.
공개적인 등록과 함께 기본 텍스트 파일 인증이 가능하도록 ''local.php''파일에 추가할 예제 코드를 보도록 합니다.
$conf['useacl'] = 1; // ACL이 가능하게
$conf['superuser'] = '@admin'; // 관리자 그룹은 superuser
[[config#useacl]] 옵션은 ACL기능을 가능하게 합니다. 일단 ACL기능이 사용가능하게 되면 "로그인"버튼이 모든 위키 페이지 아래쪽에 나타나게 되고 사용자는 등록이 가능합니다. [[config#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)
* [[config#autopasswd]]을 0으로 바꾸면 사용자는 등록시 자신의 암호를 직접 입력해야합니다. 이 방법은 정상적인 이메일 주소 등록을 보장할 수 없는 단점이 있습니다.
* [[config#passcrypt]]은 암호를 저장할 때 쓰이는 암호화 방법을 결정합니다.
* [[config#defaultgroup]]은 말 그대로 모슨 새로운 사용자에게 기본적으로 제공되는 그룹을 뜻합니다.
* [[config#profileconfirm]]을 0으로 설정하면 로그인 사용자가 자신의 프로필(실제 이름, 암호, 이메일 주소)을 변경시 암호 확인 작업을 하지 않도록 해줍니다.
* DokuWiki는 사용자와 그룹의 데이타에 접근하는 여러가지 방법이 있습니다.기본적으로는 자신의 [[.auth:plain|plaintext]] 백-엔드 사용하도록 되있으며 [[config#authtype]] 옵션으로 바꿀 수 있습니다. 사용가능한 백-엔드를 보려면 [[.auth:backends]] 페이지를 참조하면 됩니다.
===== 사용자 관리 =====
사용자는 [[plugin:usermanager|사용자 관리 플러그인]]을 통해 추가, 삭제, 수정이 가능합니다.
[[config#openregister]]옵션은 사용자 스스로 등록할 수 있게 해줍니다.
수작업으로 사용자를 직접 추가하기 위해서는 [[.auth:plain|plain backend]]문서를 참조하기 바랍니다.
===== 접근 제한 =====
접근 제한은 [[pagename|페이지]]와 [[namespaces|네임스페이스]]에 관한 내용입니다.
퍼미션(접근 제한)은 //읽기//, //수정//, //생성//, //업로드//, //삭제// 5가지로 분류됩니다. 각각 가장 높은 퍼미션은 낮은 퍼미션을 포함할 수 있는데, 가장 낮은 것은 **읽기**이고 가장 높은 것은 **삭제**입니다.합니다. 생성, 업로드, 삭제 퍼미션은 단지 네임스페이스에만 적용되는 것을 주의하기 바랍니다.
DokuWiki는 사용자에게 주어진 권한을 검사할 때 사용자 이름과 사용자가 속한 그룹에 맞는 규칙(rule)을 사용합니다.
가장 높은 퍼미션이 사용되도록 설정되도록 되어 있으며 먼저 페이지에 대한 퍼미션을 확인 후 적용되는 규칙이 발견될 때까지 모든 상위 네임스페이스를 검사합니다.
접근 제한 규칙을 추가하기 위해서, 먼저 제한하고 싶은 페이지로 이동합니다. 그리고 ''관리''버튼을 눌러서 관리자 화면을 엽니다.(
[[config#superuser]]만 가능) //Access Control List Management(접근 제어 목록 관리)//를 선택하면 현재 페이지에 대한 제한 사항들을 보여주는 다음과 같은 표를 보여줍니다.
{{wiki:acladmin.png|Example of an ACL-Restriction}}
표의 가장 위 부분에 제한 사항이 추가됩니다. 현재 페이지나 페이지가 속한 네임스페이스들((최상위 네임스페이스는 ''*''))에서 적용 범위를 선택해야 합니다. 권한을 부여하거나 거부할 사용자나 그룹을 선택합니다. 그리고 마지막으로 실제 적용하고 싶은 권한을 선택합니다. 어떤 권한도 선택하지 않는다면 페이지나 네임스페이스를 특정사용자나 그룹이 접근하는 것을 효율적으로 막을 수 있습니다.
주의: 삭제권한은 미디어 파일들에만 적용됩니다. 페이지들은 수정권한만 있으면 누구라도 삭제하거나 복구할 수 있습니다. 삭제 권한없이 업로드 권한만 가졌다면 이미 존재하는 미디어 파일을 교체할 수 없습니다.
=== 특수한 그룹 ===
**ALL**. 로그인하지 않은 사용자를 포함해 모든 사람들은 ALL 그룹에 속합니다. 모든 사용자(기본 설정)에게 접근 제한을 부여하기 위해 이 그룹을 사용하고 몇몇 선택된 사용자들에게 퍼미션을 해제할 수 있습니다. 예를 들어 위 그림을 보면, ''upload''그룹에 속한 사람 외에는 어떤 사람도 업로드가 허용되 있지 않습니다.
**user**. 모든 자기 스스로 등록한 사용자들은 기본적으로(자동) 'user'그룹에 속하도록 되있습니다. 이 권한은 '로그인'사용자들에게 부여해 보기 바랍니다. 이 그룹의 이름은[[config#defaultgroup]]옵션을 통해 바꿀 수 있습니다. "user"그룹은 plain-text인증 백-엔드를 사용할 때 자동으로 모든 사용자가 속하게 되는 실제 그룹입니다. 만일 다른 백-엔드를 사용한다는 해당 백-엔드에서 제공되는 그룹들을 사용할 필요가 있습니다.
===== 배경 지식 =====
접근 제어 정보는 ''conf/acl.auth.php''파일에 저장됩니다. 만일 ACL 관리 화면을 사용하고 싶다면 웹서버에 의해 쓰기가능해야합니다. :!: 직접 파일을 수정하지 말고 대신 관리 화면을 사용하기 바랍니다.
빈 행들과 쉘에서 쓰이는 주석문들은 무시됩니다. 각 행들은 공백문자로 구분되는 3개 항목들이 있습니다.
* 제한하고 싶은 자원(resource). [[pagename|페이지 이름]]이나 [[namespace|네임스페이스]]를 뜻합니다. 네임스페이스는 뒤에 ''*''을 붙여 표시됩니다.(아래 보기)
* 그룹이나 사용자 이름. 그룹은 뒤에 ''@''을 붙여 표시됩니다.
* 권한 단계(아래 보기)
정수로 표시되는 7단계의 권한이 있습니다. 높은 단계는 낮은 단계를 포함하고 있습니다. 만일 수정이 가능하다면 읽기 역시 가능합니다. 어찌되었든 //255//의 //admin// 권한은 ''conf/acl.auth.php''파일에서는 사용될 수 없습니다. 단지 [[config#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 | 관리 플러그인 | 관리자만 변경할 수 있는 superuser(([[config#superuser]]참조)) | 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
각 행의 의미를 살펴봅시다:
- 주 네임스페이스의 권한을 설정합니다. 모든 사용자가 페이지의 수정이나 생성이 가능하도록 허용합니다. 단 업로드는 허용하지 않았습니다.
- 사용자//bigboss//에게 모든 권한을 허용합니다.
- start페이지는 모든 사용자가 읽기만 가능하도록 허용합니다.
- ''marketing''네임스페이스를 설정합니다. //marketing//그룹의 모든 사용자는 업로드가 가능하도록 허용합니다. - 다른 사용자들은 1행의 규칙에 적용되므로 아직까지 생성이나 수정이 가능합니다. //bigboss//는 2행의 권한을 물려 받았으므로 파일 업로드와 삭제가 가능합니다.
- 지금은 ''devel'' 네임스페이스의 접근은 제한됩니다. 누구라도 접근할 수 없습니다.
- 실제로 어떤 사람에게도 적용되지 않습니다. -- //devel//그룹 소속 사용자들에게만 권한을 부여했습니다.
- 그리고 물론 //bigboss//에게는 허용됩니다. -- 그리고 그는 파일 삭제와 업로드가 허용되는 유일한 사용자입니다.
- 어찌되었든 //devel//소속 사용자들은 상사(//bigboss//)가 ''funstuff'' 페이지를 보는 것을 원하지 않습니다. -- 정확히 들어 맞는 페이지들은 네임스페이스 권한보다 앞선다는 것을 기억하기 바랍니다.
- //marketing//팀 역시 ''devel''네임스페이스의 모든 것들을 읽을수 있습니다.
- 마지막으로 //marketing// 소속 사용자들은 ''devel:marketing'' 페이지를 수정할 수 있습니다.
파일에서 **순서는 상관없다**는 것을 반드시 주의하기 바랍니다. 파일은 한번에 파싱(parsing)되고나서 현재 해당 페이지/사용자 조합에 완전히 들어 맞는 권한을 찾으려고 시도합니다. 만일 들어 맞는 권한이 발견되는 경우 더 이상의 권한 검색은 하지 않습니다. 만일 들어 맞는 권한이 발견되지 않는다면 현재 페이지에 대한 그룹 권한을 확인합니다. 만일 권한이 이번에도 발견되지 않으면 다음으로 상위 네임스페이스의 권한 검사를 계속합니다.
위 예제에서 //bigboss// 사용자에 대한 권한을 알 수 있습니다. 이 사용자는 2행에서 모든 권한이 주어졌지만, 7행에서 다시 devel:* 네임스페이스의 완전한 접근을 얻을 필요가 있습니다. 만일 7행이 없었다면, devel 네임스페이스 내에 있는 페이지에 대해서 //bigboss//사용자에 대한 첫번째 매치는 5행입니다. 그 이유는 //bigboss// 가 //ALL//그룹 소속이기 때문입니다.
(주) //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 인코딩을 사용하기 때문에 어떤 멀티바이트 문자들이라도 있는 그대로 쓰여질 수 있습니다. 이 것은 [[.auth:plain]]가 아닌 다른 백-엔드를 사용할 때나 적용 가능합니다. plain 백-엔드는 어떤 특수문자도 허용하지 않습니다.
===== 번역 =====
//english version: dokuwiki-2006-11-06. //
//Add your email here if you created translated or modified whole or part of this page.//
* //[[bootmeta@zoo.com|jk Lee]] - real mail domain is gmail, not zoo.com for spam filtering
2007-2-6 created//