O que o "Exigir tudo concedido" do Apache realmente faz?

95

Acabei de atualizar meu servidor Apache para o Apache / 2.4.6, que está sendo executado no Ubuntu 13.04. Eu costumava ter um arquivo vhost que tinha o seguinte:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
</Directory>

Mas, quando corri, recebi a mensagem "Proibido. Você não tem permissão para acessar /"

Depois de pesquisar um pouco, descobri que, para fazer meu site funcionar novamente, era necessário adicionar a seguinte linha "Exigir tudo concedido" para que meu vhost se parecesse com este:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
    Require all granted
</Directory>

Quero saber se isso é "seguro" e não traz nenhum problema de segurança. Li na página do Apache que isso "imita a funcionalidade fornecida anteriormente pelas diretivas 'Permitir de todos' e 'Negar de todos' '. Esse provedor pode aceitar um dos dois argumentos que são' concedidos 'ou' negados '. exemplos concederão ou negarão acesso a todos os pedidos ".

Mas não foi dito se isso era algum tipo de problema de segurança ou por que agora precisamos fazê-lo quando, no passado, você não precisava.

John Crawford
fonte
1
Os documentos de atualização explicam as alterações 'Controle de acesso' em detalhes. httpd.apache.org/docs/2.4/upgrading.html
John Magnolia

Respostas:

87

A configuração do controle de acesso foi alterada na 2.4, e as configurações antigas não são compatíveis sem algumas alterações. Veja aqui .

Se sua configuração antiga era Allow from all(nenhum endereço IP impedido de acessar o serviço), então Require all grantedé o novo equivalente funcional.

Shane Madden
fonte
4
Sem mencionar, o método antigo era terrivelmente confuso e estava muito atrasado para ser substituído por algo mais sensato.
Michael Hampton
4
Para uma mudança tão grande, espero que algum tipo de suporte migre automaticamente os arquivos de configuração ou mostre pelo menos todos os pontos em que uma mudança é necessária.
precisa
1
Seria bom ver uma demonstração de trabalho Require all denied.
Kraang Prime
5
Eu não acho que isso é equivalente Allow from all. Você precisa "mesclar" Require all grantedcom outras Requireregras existentes . No meu caso, um existente Require valid-userfoi ignorado ao converter cegamente a configuração, como é recomendado em qualquer lugar. Esta foi a pior coisa que poderia acontecer ...
rudimeier
1
Seria bom ter uma resposta adequada à pergunta do OP. "Permitir de todos os equivalentes" não é muito satisfatório.
Sharcoux
15

Eu sei que é um post antigo, mas acho que posso ajudar mais com um exemplo funcional que eu sempre uso!

No apache 2.2, seria assim:

    <Location />
       Order deny, allow
       allow from all
    </Location>
    <Location /adm>
        Order deny, allow
        deny from all
        allow from myniceip
    </Location>
    <Location /disabled>
        Order deny, allow
        deny from all
    </Location>

No apache 2.4 seria como:

   <Location />
       require all granted
    </Location>
   #Note that you dont need to use require all denied
   #to require only a group of ips.. 
    <Location /adm>
        require ip myniceip
    </Location>
    <Location /disabled>
        Require all denied
    </Location>

Tenha cuidado ao usar a autenticação htacess , essa nova sintaxe pode fazer coisas ruins e inesperadas ; se esse for o seu caso, leia: https://unix.stackexchange.com/questions/413309/apache-2-4-wants-me- para decidir-exigir-válido-ip-ou-exigir-válido-usuário e você deve ficar bem!

Luciano Andress Martini
fonte
Para mim, a presença de require all grantedautenticação HTTP impedida funciona, então obrigado pela informação.
authentictech
@authentictech Não basta exigir que todos os concedidos possam quebrá-lo. A autenticação esperada pode ser completamente interrompida com essa nova sintaxe se você não usar RequireAll ou RequireAny corretamente. Leia: unix.stackexchange.com/questions/413309/… . Obrigado pelo feedback.
Luciano Andress Martini