Restringindo o acesso ao MediaWiki

Em alguns casos, no uso da ferramenta Wiki, pode ser necessário restringir o acesso ao conteúdo apenas a usuários registrados.

Uma das mais proeminentes ferramentas de wiki é o MediaWiki, usado na Wikipedia. Mas volta e meia é preciso um pouco mais que a interface web para resolver alguns problemas comuns.

Em outro artigo, compartilhei como configurar URLs amigáveis no mediawiki.

Agora, como podemos restringir o acesso apenas a usuários registrados?

1 - Edite o arquivo de configuração do MediaWiki - LocalSettings.php adicionando as seguites opções ao final do arquivo:
# Permitir o acesso a determinados conteúdos
$wgWhitelistRead = array(
  "P%C3%A1gina_principal",
  "Especial:Userlogin",
  "-",
  "MediaWiki:Monobook.css"
);

# Restringindo o resto
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['*']['edit'] = false;

# Restringindo o registro de novos usuários
# mude para true para permitir novos registros
$wgGroupPermissions['*']['createaccount'] = false;
2 - Caso queria permitir que os usuários atuais convidem outras pessoas, adicione também:
#Permite que usuarios conhecidos criem contas
$wgGroupPermissions['user']['createaccount'] = true;

Update (04/12/2009) : caso queira que apenas administradores possam criar usuários, use a seguinte opção no lugar da citada acima:
#Permite que usuarios conhecidos criem contas
$wgGroupPermissions['sysop']['createaccount'] = true;

Outro grupo válido para esta configuração é 'bureaucrat' , que inclui os usuários no grupo Burocratas.

Mais informações (em inglês) : http://www.mediawiki.org/wiki/Manual:$wgGroupPermissions

3 - Melhorando o texto da página de autenticação
Apesar de estar tudo funcionando bem a esta altura, uma coisa ainda pode incomodar. A mensagem da tela de acesso negado pode ser um pouco confusa e feia.

O título da página é "Erro" e a mensagem é "Autenticação Requisitada"

Para deixar isso mais bonito, acesse a página de edição das mensagens do MediaWiki, via web mesmo, no endereço Especial:Todas_as_mensagens do seu wiki. As mensagens que procuramos aqui são: loginreqlink, loginreqpagetext e loginreqtitle

Mas o problema é: o título da página (na janela do browser) continua sendo "Erro", e esta mensagem é a mesma usada em outros erros. Então, para mudar isso precisamos dar uma pequena "mexidinha" no código do mediawiki. Nada demais, apenas mudar a chamada da mensagem errorpagetitle para loginreqtitle.

Encontramos essa chamada no arquivo include/OutputPage.php, lá pela linha 978:

  $this->setPageTitle( wfMsg( 'loginreqtitle' ) );
  $this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );

e mudamos para

  $this->setPageTitle( wfMsg( 'loginreqtitle' ) );
  $this->setHTMLTitle( wfMsg( 'loginreqtitle' ) );

e pronto!

Comentários

imagem de Leonardo Dias

Realmente fácil e direto .. me ajudou mesmo. Obrigado pelo post!

imagem de lourenzo

Imagina!

É um prazer ajudar!

Um abraço

Lourenzo Ferreira

imagem de wikiphantom

Olá!!!

Precisei destas informações por duas vezes, e agora aproveito para agradecer!

Parabéns!

imagem de lourenzo

Que bom!

É muito legal saber que as informações que compartilho são úteis, afinal é meu objetivo ao blogar.

Obrigado pela visita!

Lourenzo Ferreira

imagem de Rodrigo

Galera, to sofrendo pra caramba aqui com o MediaWiki porque quando eu cadastro um usuário (o cadastro de usuários esta bloqueado) eu não consigo atribui-lo ao grupo de "Usuários", e com isso ele passa a ter acesso às Páginas Especiais, podendo mudar várias configurações.

Como eu faço pra mudar isso, e deixar só os usuários Administradores e Burocratas com acesso ás páginas especiais?

imagem de lourenzo

Olá!

Pelo que sei, os usuários comuns apenas podem alterar configurações relativas a suas contas.

Nunca cheguei a esse nível de especificidade de bloquear todas as páginas especiais para usuários comuns, mas com certeza este tipo de configuração deve ser mostrado no manual do MediaWiki.

Consultar: http://www.mediawiki.org/wiki/Manual:Contents

Lourenzo Ferreira

imagem de Rafael

É possível deixar alguns conteúdos para que usuário não registrados somente os veja?

Outros conteúdos só para os usuários registrados?

E só administrador editar/postar o conteúdo?

imagem de lourenzo

O jeito mais simples seria simplesmente adicionar as páginas que quer que apareçam apenas para os usuários na configuração:

$wgWhitelistRead = array(
  "P%C3%A1gina_principal",
  "Especial:Userlogin",
  "-",
  "MediaWiki:Monobook.css",
  "Outra_Pagina",
  "Por aí vai..."
);

Mais detalhes sobre a configuração do mediawiki neste aspecto podem ser encontrados em:

Adicionalmente, esta extensão pode ser útil. Nunca testei, mas me parece promissora.
http://www.mediawiki.org/wiki/Extension:Permissions

Lourenzo Ferreira

imagem de Daniela

Olá,

gostaria de agradecer a disponibilização destas dicas, são muito úteis!
E gostaria também de saber se tem como proteger uma página para que somente um grupo de usuários possa editá-la, e gostaria também de saber se tem como criar outros grupos de usuários que já vêm definidos na mediawiki.

Obrigada!

imagem de lourenzo

Olá!

Quem bom que foi de ajuda!

Nunca precisei usar esse nível de especificidade, mas sei que nas versões mais recentes do MediaWiki é possível bloquear uma página para que só possa ser editada por um determinado Grupo.

Há uma aba 'bloquear' que aparece para quem tem privilégios de administrador/burocrata

Para criar grupos, creio que é necessário alterar opções no LocalSettings.php, como a seguinte página (em inglês) informa.

Lourenzo Ferreira

imagem de Daniela

Que página? Acho que você esqueceu de colocar o link...

imagem de Edmilson

Boa tarde,
gostaria de saber se posso excluir um usuário existente na wiki, ou criar um grupo de usuários que não tenha acessoa a nada, mesmo que cadastrados.

Agradeço desde já.

imagem de lourenzo

olá!
Talvez esta extensão ( http://www.mediawiki.org/wiki/Extension:Deleteuser ) possa ajudar.

Lourenzo Ferreira

imagem de lourenzo

Desculpe...
O link é http://www.mediawiki.org/wiki/Manual:$wgGroupPermissions

Lourenzo Ferreira

imagem de Marcelo Gomes

Muito bom seu blog. Parabéns. Por favor como faço para criar novos usuários e coloca-los em grupos determinados?

Abraço.

Marcelo

imagem de lourenzo

Olá!
Obrigado pela visita.

Para adicionar um usuário, basta utilizar a página Especial:Userlogin
Em seguida, basta utilizar a página Especial:Userrights para adicionar os grupos.

Lourenzo Ferreira

imagem de Anônimo

Olá Lourenzo, sobre a restrição de usuários anônimos poderem ler somente determidado conteúdo do wiki, só conseguir fazer se colocar o wiki em inglês (en), em português dá erro.

Se eu colocar a língua em inglês e o código abaixo funciona:

$wgGroupPermissions['*']['read'] = false;

$wgWhitelistRead = array ( "Main_Page", "Special:Userlogin", "MediaWiki:Common.css",
"MediaWiki:Common.js", "MediaWiki:Monobook.css", "MediaWiki:Monobook.js", "-");

Uso a versão 1.5.0, será que é por problemas de caracteres especiais?

No firefox com o Wiki em português fica Página_principal e no IE6 fica P%C3%A1gina_principal...

Obrigado.

imagem de lourenzo

Olá!
Este artigo mostra como fazer exatamente o que está procurando, em português. Leia com atenção o código que foi postado.

E você precisa colocar nas configurações o nome da página em UTF-8 codificado para urls, igual aparece no IE6:

P%C3%A1gina_principal

Lourenzo Ferreira

imagem de Anônimo

Obrigado pela atenção!

Bom, mesmo com sua dica não funcionou :(

imagem de lourenzo

Parece que está dando certo sim, só falta mudar o título.
Estranhamente o mediawiki mostra o título 'Erro' quando se está tentando acessar uma página não autorizada.

Especial:Userlogin está funcionando.

Você pode tentar também adicionar o item 'Página_principal' à lista.

Abs

Lourenzo Ferreira

imagem de Anônimo

Em termos sim! Mas quando um usuário anônimo acessa a página inicial, deveria ser mostrado o conteúdo da página inicial e não o Especial:Userlogin, correto?

Grato.

imagem de Luciano

Cara, vc conseguiu fazer funcionar?
estou com o mesmo problema que vc teve, tá foda, já tentei um monte aqui e não funciona.
Se vc conseguiu fazer funcionar, por favor, me ajude!

Abraço!

imagem de Guilherme Vilas Boas

Cara, Obrigado de verdade!
Salvou uma vida aqui hehehe...muito obrigado!

imagem de lourenzo

:D

Lourenzo Ferreira

imagem de Aline França

Olá.
Estou a procura de uma solução para restringir não só o acesso de pessoas não registradas, pois isso já fiz, eu quero restringir o registro, para que só o administrador crie contas com login e senha.

Você pode me ajudar?

imagem de lourenzo

Olá!

É simples, basta substituir:

$wgGroupPermissions['user']['createaccount'] = true;

por:

$wgGroupPermissions['sysop']['createaccount'] = true;

aí somente quem estiver no grupo sysop (administradores) poderá criar usuários

ou ainda:

$wgGroupPermissions['bureaucrat']['createaccount'] = true;

Nesse último caso os usuários adicionados ao grupo 'burocratas' poderão criar contas.

Para mais opções, o manual (em inglês) fica localizado em:

http://www.mediawiki.org/wiki/Manual:$wgGroupPermissions

Lourenzo Ferreira

imagem de Rafael Costa

Boa Tarde, primeiramente, gostaria de parabenizar pelo blog e queria dizer qe fiz os passos acima e realmente funcionou,

mais eu gostaria de tirar uma duvida por fora com vc
estou criando um wiki mais eu gostaria qe apenas
pessoas autorizadas conseguisem ver o conteudo
ou seja ao entrar no meu wiki, primeira coisa qe apareceria
é o login e senha, e apenas pessoas autorizadas acessasem

sera qe isso é possivel?
vc tem conhecimento sobre isso ?
desde ja agradeço amigo

imagem de lourenzo

Olá!

Basta seguir os mesmos passos do artigo, apenas substituindo

# Permitir o acesso a determinados conteúdos
$wgWhitelistRead = array(
  "P%C3%A1gina_principal",
  "Especial:Userlogin",
  "-",
  "MediaWiki:Monobook.css"
);

Por:

# Permitir o acesso a determinados conteúdos
$wgWhitelistRead = array(
  "Especial:Userlogin",
  "-",
  "MediaWiki:Monobook.css"
);

Lourenzo Ferreira

imagem de Thiago Cruz

Pessoal, no meu sistema funcionou colocando o seguinte:

$wgWhitelistRead = array("Página_principal".....

[]'s
Thiago

imagem de Aurelio Machado

Boa tarde! Gostei muito do Blog.
Existe a possibilidade de deixar aberto para que todo mundo visualize e que somente os usuários logados possam editar?
Mas depois de editado somente iria aparecer no wiki depois que um moderador aceite o conteudo!
Isso é possivel?
Como fazer upload de figuras?
Obrigado

imagem de lourenzo

Olá! Obrigado!

A conf para restringir a edição aos usuários autenticados é:

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = true;

Lourenzo Ferreira

imagem de Aurelio Machado

E como colocar um moderador?

imagem de lourenzo

Até onde sei, o Mediawiki não é feito pra isso, acho que não tem moderação desse tipo. Tem revisão posterior, até mesmo por causa do fluxo de uso.

Imagina um monte de pessoas editando uma mesma página e isso indo para a moderação, cada edição mudando a frase atualmente publicada para uma diferente.

Mas de toda form, pode ser que encontre alguma informação no http://www.mediawiki.org/wiki/MediaWiki

Lourenzo Ferreira

imagem de duques

Boa noite, parabens pelo blog e pelo post..mto significativo.

Estou precisando deixar meu wiki, da seguinte forma:

- apenas o administrador criar e editar conteúdo;
- sem possibilidade do se cadastrar usuários;
- todos podem ver o conteúdo.

mto obrigado.

imagem de lourenzo

Olá!
É só usar as seguintes configurações:

$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = true;
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = true;

Lourenzo Ferreira

imagem de duques

Obrigado Lourenzo..funcionou corretamente

imagem de duques

Somente mais um dúvida como faço pra alterar a logo?

desde já obrigado

imagem de lourenzo

Bom, basta subir a imagem para o servidor, encontrar o endereço absoluto ou relativo à raiz da imagem (ex: /img/logo.png ou http://exemplo.com/img/logo.png) e adicionar a seguinte linha ao arquivo de configuração:

  $wgLogo = '/img/logo.png';

(onde /img/logo pode ser substituído por uma URL absoluta ou relativa à raiz)

Att,

Lourenzo Ferreira

imagem de Jorge

Como eu edito o arquivo LocalSettings.php, para habilitar o carregamento de arquivo da um erro quando eu tento abrir a wiki.

imagem de lourenzo

Olá!
Por favor, mande um pouco mais de detalhes sobre o erro e sobre o que precisa fazer.

Att,

Lourenzo Ferreira

imagem de Jorge

Estou tentando habilitar o carregamento de arquivos so que quando salvo o arquivo LocalSettings.php da este erro:

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/home/ntebelem/www/wikipapachibe/LocalSettings.php:1) in /htdocs/home/ntebelem/www/wikipapachibe/includes/WebResponse.php on line 16

imagem de lourenzo

Olá!
Isto significa que você deve ter deixado algum caracter (um espaço, uma quebra de linha) antes de <?php ou depois de ?>

Você precisa remover o ?> do final e garantir que <?php é a primeira sequência de caracteres do arquivo.

Lourenzo Ferreira

imagem de Jorge Andrade

Obrigado ja resolvi, agora tenho outro erro quando tento enviar as fotos ta dando este erro: Warning: mkdir() [function.mkdir]: SAFE MODE Restriction in effect. The script whose uid is 2714 is not allowed to access /htdocs/home/ntebelem/www/wikipapachibe/images/thumb/Walter.jpg owned by uid 99 in /htdocs/home/ntebelem/www/wikipapachibe/includes/GlobalFunctions.php on line 2012

imagem de lourenzo

Cara, esse erro é de permissões no servidor, que rodando no safe mode não está permitindo acesso à pasta.

Você precisa configurar as permissões do seu servidor.

Lourenzo Ferreira

imagem de Renato

Parabéns Lourenzo, beleza de conteúdo!
Bom, cara gostaria de um help se possivel.
Na minha página Wiki tenho o seguinte:
Menu e sub-itens, exemplo, gostaria de fazer os sub-itens apontarem para o Menu (que é uma pág com outro conteúdo), mas porém queria que abrissem diretamente no conteúdo respectivo dentro da nova página (Menu), tipo como acontece quando temos o click na página principal e é redirecionado como âncora para o conteúdo que estari abaixo.

imagem de lourenzo

Olá!
Obrigado.

Talvez você possa codificar esta página utilizando HTML puro, o que vai demandar entender de HTML e detalhes da documentação sobre formatação no mediawiki.

Editando a página que forma o Menu, você poderá criar qualquer tipo de menu.

Adicionalmente, você pode se informar na documentação sobre skins e personalizar a skin em uso para fornecer um menu do tipo que quiser.

Att,

Lourenzo Ferreira

imagem de Guilherme Monteiro

Bom dia!

Uma vez restringido a que apenas os utilizadores registados possam registar novos utilizadores, existe forma de ficar registado na base de dados, quem convidou (registou) quem?
Se sim, como?

Obrigado!

imagem de Guilherme Monteiro

Boa tarde!

É possível retirar a etiqueta "histórico" a um determinado perfil de utilizadores?
Se sim, como?

Obrigado!

imagem de RichardSmS

Olá Lourenzo. Agradeço pelo poste, estou trabalhando com o MediaWiki e ainda tenho algumas duvidas sobre a ferramenta e seu poste foi bem claro na explicação. Queria saber se você sabe usar, se já usou, o InterWiki, pois queria um site com versões em inglês e português e pelo tutorial no site do MediaWiki, fiquei um pouco confuso sobre o uso. Agradeço desde já!

imagem de lourenzo

Olá.

Nunca utilizei este InterWiki, mas o mediawiki de fato é complicado para tornar multilingual, não é algo natural da plataforma, tanto que para cada idioma da Wikipedia, a instalação do MediaWiki é outra.

Att,

Lourenzo Ferreira

imagem de leandro

Boa tarde Lourenzo, preciso de uma ajuda por favor, gostaria de bloquear o meu mediawiki para qualquer endereço e liberar apenas para a minha rede interna atraves das conf's do media wiki. Como eu posso fazer isso?

imagem de Gregori

Olá, muito bom o artigo! Apesar de fazer tempo que ele foi escrito, espero que consiga me ajudar nessa:
Preciso permitir algumas páginas para usuários não logados e restringir outras, tipo tem que permitir a página principal mas barrar outras, só que com o código

# Permitir o acesso a determinados conteúdos
$wgWhitelistRead = array(
"P%C3%A1gina_principal",
"Especial:Userlogin",
"-",
"MediaWiki:Monobook.css"
);

ele me barra tudo, mesmo se eu trocar de Pagina_principal, para outra página, ele barra tudo.
É assi mesmo ou estou fazendo errado?

Abraço

imagem de lourenzo

Olá!

Essa instrução é para quando a wiki está em idioma Português, e este array é uma lista de páginas permitidas (vide nome Whitelist Read).

É indicado adicionar o CSS, a página de login, a home e a string "-" na documentação do mediawiki, mas você poderia adicionar quaisquer outras páginas que são liberadas para acesso anonimo.

Att,

Lourenzo Ferreira

imagem de Leonardo

ola gostaria de restringir paginas por grupos de usuarios tem como você me passar algumas dicas? obrigado!

imagem de Rogério

Bom dia, gostei muito do seu artigo, me ajudou bastante...porem preciso de mais ajudas.
Tenho aqui na empresa alguns artigos que somente a TI pode ver, assim como outros somente a diretoria pode ver.
Teria como eu fazer algo do tipo?
Onde TI e diretoria veja tudo. Financeiro apenas alguns artigos de TI e tudo de financeiro, e assim por diante.

Obrigado.

Rogério

imagem de alexandre

muito bom esse post ajudou muito com problemas que eu estive enfrentando com o mediawiki, só gostaria de saber se tem a possibilidade de restringir acessos a algumas paginas baseados em grupos de usuarios

imagem de Fernando

Muito bom seu blog e suas dicas, gostaria de saber se pode me ajudar:
Como fazer para que os usuários se registrem, mas seja necessário o administrador confirmar/autorizar esse registro?
Estou no aguardo...

imagem de Helio

Ótima dica, apesar de antiquíssima ainda está ajudando.

Parabéns

imagem de Guilherme

Como faço para que na pesquisa(busca) (Especial:Busca/Special:Search) os resultados listados sejam apenas de páginas contidas na Whitelist?

Obrigado!

imagem de lourenzo

Olá,

Pelo que vi na documentação, eles recomendam que instale um CMS (como o Drupal ou Wordpress, por exemplo),
pois o software não é construído especificamente para controle granular de permissões.

No caso da busca, as páginas fora da whitelist serão exibidas, mas mostrando apenas o título.
Referência: http://www.mediawiki.org/wiki/Extension:WhiteList/Security_Issues

Inclusive a wiki da empresa em que trabalho foi montada com Drupal, seguindo mais ou menos a lista de módulos
mostrada neste artigo: http://drupal.org/project/drupalwiki

Lourenzo Ferreira

imagem de Emerson Reis

Olá,

Tem como eu limitar acesso a uma certa pagina apenas ao um grupo especifico de usuarios ?

Obrigado

imagem de Rubens Urquisa

Estou utilizando a versão 1.19.1 em PT-BR, mas a página principal ficou bloqueada e não consegui com as dicas acima. Então estou colocando aqui os passos que poder ser útil para alguém.

O processo consiste em criar uma nova página principal:

1º Criei a página Main_Page
2º Copiado todo o código da Página_Principal para a nova página Main_Page
3º Alterar a Página Principal: editado a página MediaWiki:Mainpage e substituído de Página_Prinicipal "Antiga" para Main_Page "Nova"

No LocalSettings.php na linha whitelist ficou assim:
$wgWhitelistRead = array(
"Main_Page",
"Especial:UserLogin",
"MediaWiki:Common.js",
"MediaWiki:Monobook.css",
"MediaWiki:Monobook.js",
"-"
);

imagem de Evandro Figueiredo

Obrigado Lourenzo, consegui fazer a autenticação na minha empresa.

Abs.

Valeu