====== Listas de controle de acesso (ACL)s ======
DokuWiki - como a maioria dos wikis - é muito aberta por padrão. Todo mundo tem permissão para criar, editar e excluir páginas. No entanto, por vezes, faz sentido para restringir o acesso a certas ou todas as páginas. Isto é, quando o Access Control List (ACL) entra em jogo. Esta página dá uma visão geral de como ACLs trabalhar em DokuWiki e como eles são configurados.
{{ :aclexample.png |}}
===== Configuração e instalação =====
ACLs podem ser habilitadas no instalador e uma política inicial ACL é definida lá também. Para habilitar manualmente ACLs, habilite a opção [[doku>config:useacl|useacl]] e crie uma cópia dos arquivos de exemplo ''conf/acl.auth.php.dist'' e ''conf/users.auth.php.dist''. Renomeie os arquivos para ''conf/acl.auth.php'' e ''conf/users.auth.php'', respectivamente.
==== Veja também ====
Existem mais algumas opções de configuração e recursos que se relacionam com a autenticação, registro do usuário e ACL configuração. Por favor, verifique suas respectivas páginas wiki para obter mais informações:
* Configuração da opção [[config:useacl]] - permitir uso de ACL
* Configuração da opção [[config:superuser|superuser]] - configurar superusuários com direitos de concessão de ACL
* Configuração da opção [[config:defaultgroup|defaultgroup]] - o grupo padrão para que novos usuários são adicionados
* [[plugin:usermanager|Gerenciamento de Usuários]] - gerenciamento de usuários
* [[auth|Backends de autenticação]] - identificar os usuários de diferentes fontes de dados
* [[pt-br:faq:regdisable]] - substitui ''$conf[openregister]''
:!: AVISO: do DokuWiki ACL recurso foi incluída por algum tempo e deve ser bastante estável. No entanto, se você está preocupado com o risco de usuários não autorizados acessam informações no seu wiki, você nunca deve colocá-lo em um computador acessível a partir da Internet.
===== Restrições de acesso =====
Restrições de acesso podem ser atribuídas a páginas e [[doku>namespaces|namespaces]]. Há sete permissões: //nenhum//, //ler//, //editar//, //criar//, //enviar//, //excluir// e //administrador//. As permissões superiores incluem as inferiores, com //leitura// sendo a mais inferior e //excluir// a mais alta. Permissões para //criar//, //enviar// e //excluir// aplicam-se apenas a namespaces e não às páginas.
Regras que foram atribuídas para namespaces aplicam-se a arquivos de mídias do namespaces, bem como para namespaces de página.
Quando o DokuWiki verifica os direitos que deve atribuir a um usuário, ele usa todas as regras correspondentes ao nome do usuário ou os grupos que ele ou ela pertence e a regra que define a permissão do usuário é escolhida de acordo com o seguinte processo:
* Regras que correspondem mais perto do namespace da página são preferidas sobre as regras que correspondem mais longe - nós chamamos isso de "correspondência específica".
* Quando mais de uma regra corresponde ao mesmo nível, é preferível a regra que dá o maior nível de acesso.
Os usuários estão nos grupos que foram atribuídos no gerenciador de usuários (ou o servidor de autenticação). No entanto, existem dois **grupos** que são um pouco especiais:
* **@ALL** - Todos, mesmo os usuários não autenticados, são membros do grupo 'ALL'. Você pode usar este grupo para restringir o acesso para todos os usuários (como uma configuração padrão) e depois relaxar as permissões para alguns usuários selecionados.
* **@user** - Todos os utilizadores auto registrados são, por padrão, automaticamente um membro do grupo 'user'. Use isso para dar permissões a usuários autenticados. O nome deste grupo é configurado através da opção [[doku>config:defaultgroup]]. Ao contrário do grupo virtual 'ALL', o grupo 'user' é um grupo verdadeiro ao qual todos os usuários são adicionados automaticamente ao utilizar o mecanismo de autenticação simples. Se você usar um backend diferente, você precisa usar os grupos fornecidos por este mecanismo. Os grupos são representados internamente e na Administração da ACL por um prefixo ''@'' para o nome do grupo.
==== Editando ACLs ====
Para adicionar ou alterar regras de acesso, você deve usar a Administração de ACL que está disponível a partir do menu "Administrar". Faça login como superusuário, clique em "Administrar" e escolha "Administração da Lista de Controles de Acesso". Uma descrição detalhada da sua interface pode ser encontrada [[doku>plugin:acl|aqui]].
Basicamente, existem três passos para adicionar uma nova regra de ACL:
- selecione o namespace ou página para restringir a partir da árvore de navegação superior esquerdo
- escolha a quem a regra de ACL deve ser aplicada
- selecionando um grupo conhecido ou usuário no menu suspenso
- ou selecionando "Usuário:" ou "Grupo:" e digitando o nome do grupo ou usuário no campo de texto
- definir a permissão adequada
As regras existentes podem ser alteradas ou apagadas na tabela na parte inferior da Administração da ACL.
==== Exemplos de ACLs ====
Nesta seção vamos explicar como as regras de acesso funcionar, usando um exemplo de configuração que se parece com isso na Administração da ACL:
{{ :aclexample.png |}}
Vamos dar uma olhada em cada linha:
- Isso define a permissão para todos no espaço de nomes principal, permitindo que todos possam editar e criar páginas. No entanto enviar não é permitido.
- É atribuído permissões totais ao usuário //bigboss//.
- Agora, o acesso para o namespace ''desen'' é restrito. Ninguém está autorizado a fazer qualquer coisa.
- Bem, isso não é realmente verdade - atribuímos aos membros do grupo //devel// direitos completos aqui.
- E, claro, o usuário //bigboss// é permitido, também, e ele é o único que pode apagar arquivos enviados.
- E o grupo de //marketing// pode ler tudo no namespace ''devel'', mas apenas ler.
- No entanto, o grupo //devel// não quer que seu patrão veja a página ''funstuff'' - lembre-se: "correspondências específicas" substituem permissões de namespace.
- E, finalmente, o grupo //marketing// está autorizado a editar a página ''devel:marketing'' também.
- Em seguida, as permissões para o namespace ''marketing'' são definidos. Todos os membros do grupo //marketing// tem permissão para enviar lá - outros usuários correspondem a linha #1 para que eles ainda podem criar e editar. O usuário //bigboss// herda seus direitos de linha #2 para que ele possa enviar e apagar arquivos.
- A última linha, finalmente, restringe a página inicial como somente-leitura para todos. Somente os superusuários poderão editar essa página.
Vamos dar uma olhada em um segundo exemplo para entender melhor a **correspondência específica**:
{{ :aclexample2.png |}}
Desta vez, nós olhamos as regras que irá corresponder para diferentes usuários ao tentar acessar a página ''private:bobspage''.
- Abby, um usuário regular
- três regras correspondem: #1, #2, #4
- regra #4 é a mais próxima, ela corresponde ao nível de namespace por isso tem precedência sobre as outras três regras anteriores
- nível de permissões de Abby é ''None'' (Nenhum)
- bob, um usuário regular
- quatro regras correspondem: #1, #2, #4, #6
- regra #6 é aplicada devido a sua correspondência exata
- nível de permissão de Bob é ''Delete'' (Excluir)
- bob se esquece de fazer o login e tenta acessar a sua página
- duas regras correspondem: #1 & #4
- regra #4 está mais perto, Bob ganha nível de permissão ''None'' (Nenhum) enquanto não está logado
- charlie, um membro do grupo //staff//
- cinco regras correspondem: #1, #2, #3, #4, #5
- duas regras correspondem ao nível de namespace, a regra #5 atribui a charlie o maior nível de permissão em relação as outras regras então ela é escolhida - o nível de permissão de Charlie é ''Delete'' (Excluir)
Note que a regra #5 parece duplicar a regra #3. Sem a regra #5, os membros do grupo //staff// não seriam capaz de acessar o namespace ''private'' porque o comportamento da regra #4 seria mantê-los fora.
===== Informações avançadas =====
Restrições de acesso são salvas em um arquivo chamado ''conf/acl.auth.php'', o que deve possuir permissões de escrita pelo servidor web se você quiser usar a interface de Administração da ACL descrita acima. Não é recomendado para editar este arquivo manualmente. Use a interface de administração em seu lugar.
Linhas vazias e comentários no estilo shell (''#'') são ignorados. Cada linha contém 3 campos separados por espaço em branco:
* O recurso a restringir. Este pode ser um nome de página ou de um namespace. Namespaces são marcados por um asterisco adicional (veja exemplos abaixo).
* Um nome de grupo ou usuário. Nomes de grupos são marcados por um prefixo ''@''.
* Um nível de permissão (ver abaixo).
Há 7 níveis de permissão representados por um número inteiro. Níveis superiores incluem os inferiores (se você pode editar, você pode ler também). No entanto, a administração de permissão 255 não pode ser usada no arquivo ''conf/acl.auth.php''. Ela só é usada internamente por correspondência contra a opção [[doku>config:superuser|superuser]].
^Nome ^Nível ^aplica-se a ^Permissão ^constante do DokuWiki^
|none |0 |páginas, namespaces |nenhuma permissão-bloqueio total |AUTH_NONE|
|read |1 |páginas, namespaces |permissão de leitura |AUTH_READ|
|edit |2 |páginas, namespaces |páginas existentes podem ser editadas |AUTH_EDIT|
|create |4 |namespaces |novas páginas podem ser criadas |AUTH_CREATE|
|upload |8 |namespaces |arquivos de mídia podem ser enviados |AUTH_UPLOAD|
|delete |16 |namespaces |arquivos de mídia podem ser sobrescritos ou excluídos |AUTH_DELETE|
|admin |255 |plugins de administração |superusuário((veja [[doku>config:superuser]])) pode alterar as configurações de administrador |AUTH_ADMIN|
Aqui está um exemplo de configuração correspondente ao Exemplo 1 dado acima:
* @ALL 4
* bigboss 16
devel:* @ALL 0
devel:* @devel 8
devel:* bigboss 16
devel:* @marketing 1
devel:funstuff bigboss 0
devel:marketing @marketing 2
marketing:* @marketing 8
start @ALL 1
Por favor note que a **ordem não importa** no arquivo. O arquivo é analisado como um todo, em seguida, uma correspondência para a combinação de página/usuário atual é procurada. Quando for encontrada uma correspondência mais adequada, a verificação é abortada. Se nenhuma correspondência for encontrada, permissões de grupo para a página atual são verificadas. Se nenhuma correspondência for encontrada, a verificação continua no próximo namespace superior.
:!: **Nota**: Para configurar os usuários ou grupos com caracteres especiais (como espaços em branco), você precisa escapá-los com caracteres especiais em HTML. Isso só se aplica a caracteres especiais no intervalo abaixo de 128 bytes. O arquivo ACL usa codificação UTF-8 então multibytechars podem ser escritos como são.
:!: **Nota**: Quando se utiliza ''$conf['authtype'] = 'ad';'' e nomes de grupo com espaços necessitam ser escritos no arquivo ''conf/acl.auth.php'' substituindo os espaços com um "%5f", em vez de "%20". Isso ocorre porque os nomes de grupo com espaços são convertidos pela primeira vez em sublinhados "_", que são "%5F".
:!: **Nota**: A permissão //excluir// afeta apenas arquivos de mídia. As páginas podem ser excluídas (e restauradas) por todos com pelo menos permissão de //editar//. Alguém que tem permissões de //enviar//, mas não permissões de //excluir//, não pode sobrescrever arquivos de mídia existentes.
==== Wildcards de usuário ====
É possível usar curingas (//wildcards//) de usuário e de grupo nas ACLs. Isto pode ser útil para wikis com muitos usuários registados, se você quiser dar a cada usuário ou grupo um espaço de nomes pessoal onde só ele/ela tem acesso de gravação, e você não quiser editar as ACLs para cada um deles. Para conseguir isso ''%USER%'' é substituído pelo nome de usuário do usuário conectado no momento e ''%GROUP%'' por todos os grupos deste usuário.
No exemplo, um usuário conectado ganha permissões totais (enviar/excluir) para o namespace de usuário ''user::*'' e revogar todo o acesso a outros namespaces localizados no namespace ''user:*''.
Nesse caso, o usuário autenticado tem acesso apenas ao próprio namespace e não tem acesso aos namespaces de usuários (nem mesmo exibe os nomes de namespaces) de outros usuários.
#
# Conceder acesso total ao namespace do usuário conectado
user:%USER%:* %USER% 16
#
# Permitir navegar no próprio namespace através do índice
user: %USER% 1
#
# Permitir acesso somente-leitura para a página inicial localizada no namespace "user"
user:start %USER% 1
#
# Desativar todos os acessos aos namespaces dos usuários não sejam de propriedade do usuário conectado
# (inclui a visualização de namespaces por meio do índice)
user:* @user 0
#
# Permitir que os membros do grupo 'group' editem páginas no namespace 'group'
%GROUP%:* %GROUP% 2
:!: **Nota**: a versão 2009-12-25c "Lemming" tem alguma ressalva. Se você adicionar, atualizar ou remover entradas ACL através da interface de administração, o DokuWiki irá substituir ''%USER%'' no segundo campo do ACL para ''%25USER%25'' (este é o bug [[https://bugs.dokuwiki.org/index.php?do=details&task_id=1955|bug FS #1955]]). Para evitar isso, altere permissões apenas manualmente (editando o arquivo ''conf/acl.auth.php'') ou altere o arquivo manualmente após cada operação na interface de administração, pois ''%25USER%25'' não funciona como esperado, somente ''%USER%'' deve ser utilizado em ''conf/acl.auth.php''. Este bug foi corrigido nas versões mais recentes.
:!: **Nota**: O curinga mudou de ''@'' para ''%'' em Dezembro de 2008 - se você estiver atualizando de uma versão mais antiga você precisa ajustar a sua configuração de ACL de acordo.