====== 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.