Restringir o acesso ao subdiretório no Apache

1

Eu tenho uma pergunta muito fácil. No entanto, tenho cavado todos os manuais para uma resposta por um dia inteiro já.

O que eu quero é configurar o Apache para dar acesso de leitura a / var / www, mas restringir / var / www / private apenas para minha equipe. Estou procurando a nova solução da versão 2.4. Portanto, não usar diretivas reprovadas, como Allow , Deny , Order e Satisfy . Eu tenho permissão de escrita para os arquivos / etc / apache2 / sites-available / * mas apenas permissão de leitura para /etc/apache2/apache2.conf.

O que eu tentei até agora é isto: Conteúdo do /etc/apache2/apache2.conf:

<Directory />
    Require all denied
</Directory>
<Directory /var/www>
    Require all granted
</Directory>

Conteúdo do /etc/apache2/sites-available/000-default.conf:

<Directory /var/www/private>
    Require group team
</Directory>

Mas com essa configuração, todos têm acesso ao / var / www / private. E isso eu posso entender, já que o Apache mescla todos os ambientes do / var / www / private para algo assim:

Require all denied  # inherited from /
Require all granted # inherited from /var/www
Require group team  # inherited from /var/www/private

Como as diretivas Require fora de <RequireAll> , <RequireAny> ou <RequireNone> são equivalentes a estar em um bloco <RequireAny> , a visualização mesclada é assim:

<RequireAny>
    Require all denied  # inherited from /
    Require all granted # inherited from /var/www
    Require group team  # inherited from /var/www/private
</RequireAny>

E isso mostra claramente porque o / var / www / private está aberto para todos (a segunda instrução sempre corresponde).

Minha pergunta é: "Você pode, de alguma forma, substituir o Require all granted em um diretório pai em um subdiretório ou pode alterar o comportamento padrão <RequireAny> para <RequireAll> ?"

    
por Richard Brinkman 12.11.2017 / 13:46

1 resposta

2

As configurações padrão do Apache para /var/www já atendem aos seus requisitos. Você pode restringir o acesso a /var/www/private usando Require group team como sugerido, adicionando a configuração ausente da seguinte forma.

Requer o padrão de diretivas para RequireAny, de modo que geralmente ele pode ser omitido, a menos que seja necessário alterá-lo, conforme mostrado na configuração abaixo.

Crie um arquivo .groups como este em um local adequado para seu sistema:

# group: memberOne memberTwo memberThree etc
team: richard david jane bill

Em seguida, gere um arquivo .password de usuários e senhas hash:

$ htpasswd -c /path/to/file/.passwords richard

Execute o mesmo comando para cada membro do grupo que precisa de acesso, mas omita o sinalizador -c (create) ou você sobrescreverá o arquivo de senha com um novo em branco.

Configure suas diretivas do Apache da seguinte maneira, definindo o caminho correto para os arquivos .passwords e .groups criados acima.

<Location /private>
Options Indexes
  AuthType basic
  AuthName "login info required"
  AuthUserFile path/to/file/.passwords
  AuthGroupFile path/to/file/.groups
<RequireAll>
  Require all granted
  Require group team
</RequireAll>
</Location>

Reinicie o Apache e pronto!

    
por 12.11.2017 / 15:11