Debian, Apache, 403 Erros Proibidos e Unidades Criptografadas

1

Eu configurei o Apache na minha instalação Debian local Jessie mas não consigo fazer meu VirtualHost funcionar. Acessar http://localhost funciona muito bem e mostra a página Funciona! .

Mas ao tentar acessar http://test a 403 Erro Proibido é mostrado:

Você não tem permissão para acessar / neste servidor.

Minha configuração parece comum:

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

</VirtualHost>
    
por conceptdeluxe 28.05.2015 / 04:12

1 resposta

3

Prefácio:

Existem algumas razões pelas quais isso pode acontecer e a pergunta já foi feita várias vezes aqui no Stack Exchange. No entanto, nenhuma das respostas resolveu (diretamente) no meu caso ou foram baseadas em informações falsas ou desatualizadas.

Muitas dessas respostas (aceitas corretamente) dizem para alterar as permissões ou a propriedade do diretório DocumentRoot configurado e dos arquivos e diretórios contidos recursivamente para www-data .

Mas isso provavelmente não é mais necessário quando se fala de uma instalação local do Debian ou Ubuntu mais recente (por exemplo, para fins de desenvolvimento web básico).

Vamos dar uma olhada nos registros!

Como a própria página de erro contém apenas uma mensagem muito genérica, precisamos dar uma olhada no log de erros para obter mais informações:

sudo tail -f /var/log/apache2/error.log 

O comando tail exibirá as últimas 10 linhas de um arquivo e a opção -f garante que a saída seja atualizada enquanto o log cresce.

O que o log informa?

client denied by server configuration: /home/johndoe/web/test

Este é fácil. Como explicado em Apache: cliente negado pela configuração do servidor , precisamos apenas atualizar nosso configuração com Require all granted configuração - assim parece:

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

Não se esqueça de reiniciar o Apache com:

sudo service apache2 restart

O erro continua ...

Mas a mensagem de registro foi alterada:

Symbolic link not allowed or link target not accessible: /home/johndoe/web/test

Este é um pouco mais complicado, pois pode ter vários motivos. Para descobrir qual é o bom motivo, atualize nossa configuração para não usar um destino que contenha um link simbólico, mas aponte diretamente para o destino. Aqui /home/johndoe/web foi um link simbólico para /media/johndoe/crypt1/web , então nossa configuração agora é assim:

<VirtualHost *:80>

  DocumentRoot "/media/johndoe/crypt1/web/test"

  ServerName test

  <Directory "/media/johndoe/crypt1/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

É fixo?

A mensagem de log provavelmente mudou para uma mais descritiva. No meu caso, mostrou:

access to / denied (filesystem path '/media/johndoe/crypt1') because search permissions are missing on a component of the path

Se você vir outra mensagem aqui e já tiver uma solução em funcionamento, será ótimo comentar e vincular a respectiva discussão aqui para que outras pessoas possam encontrar as informações corretas também.

E agora?

Como a mensagem informa, o caminho não é totalmente acessível para o Apache, pois um ou mais componentes dele não podem ser percorridos. Para ver qual componente pode causar isso, podemos fazer:

namei -m /media/johndoe/crypt1/web/test/

O comando namei separa e imprime os componentes do caminho e, com a opção -m , mostra os bits de modo de cada componente no estilo como o comando ls -l faria.

Para mim, a saída ficou assim:

f: /media/johndoe/crypt1/web/test/
 drwxr-xr-x /
 drwxr-xr-x media
 drwxr-x--- johndoe
 drwxr-xr-x crypt1
 drwxr-xr-x web
 drwxr-xr-x test

Como parece, o diretório johndoe está causando o problema aqui. Então, antes de modificarmos as permissões com chmod , vamos dar uma olhada melhor:

ls -ld /media/johndoe/

O comando ls com a opção -d imprimirá as informações do diretório (e não seu conteúdo) na lista -l style.

Parece isso para mim:

drwxr-x---+ 3 root root 4096 May 28 00:00 /media/johndoe/

E, como você pode ver, há um sinal + que indica que Lista de controle de acesso está envolvida.

Isso finalmente me mostrou a direção certa, pois eu tinha certeza de que não configuraria nenhuma ACL por mim. Ainda mais porque eu nem mesmo configurei os pontos de montagem de mídia por conta própria, mas em vez disso usei o Nautilus para criptografar e montar a minha unidade.

Isso faz o truque:

Então, em vez de deixar o Nautilus atrapalhar meu ponto de montagem, agora o monto manualmente:

1) Desmonte-o se já estiver montado:

sudo umount /media/johndoe/crypt1

2) Crie um ponto de montagem diretamente sob /media :

sudo mkdir /media/crypt1

3) Procure o mapeamento de dispositivos para descobrir o UUID:

ls -l /dev/mapper/

4) Monte o dispositivo de acordo com ele:

sudo mount /dev/mapper/luks-<UUID> /media/crypt1

5) Atualize a configuração do Apache e / ou o symlink adequadamente, por exemplo:

ln -s /media/crypt1/web/ ~/web

Notas:

Tenha em mente que você precisa criptografar e montar sua unidade após cada inicialização. Há muitas informações disponíveis aqui no Stack Exchange, mas posso recomendar:

Monte volumes criptografados a partir da linha de comando

Monte uma partição LUKS na inicialização

    
por 28.05.2015 / 04:12