15 de julho de 2012

Apache no Fedora (Forbidden 404)

Estou escrevendo esse post no Fedora 17 (Beefy Miracle), onde finalmente encontrei a solução. Mas com certeza funcioná para qualquer versão (Lovelock, Verne e a futura Spherical Cow). Eu diria que foi uma ótima experiência "caçar a solução" uma vez que aprendi mais sobre permissões para linux, oportunidade que não foi criada na época que eu usava Ubuntu. Vale lembrar que minha versão do apache é 2.2.22.

As soluções apresentadas aqui possuem como alvo o ambiente de desenvolvimento, mais precisamente a sua máquina de desenvolvimento. Não use as informações apresentadas aqui em um ambiente de desenvolvimento sem pensar bastante sobre o que está fazendo, pois eu não resolvi questões de segurança para você. Embora saltar para as soluções logo a frente pode ser eficaz, eu recomendo ler calmamente todas as explicações e instruções dadas aqui.

Vamos ao problema!
Supondo-se que ao terminar a configuração do seu virtual host, você se depara com a mensagem:

Forbidden

You don't have permission to access / on this server.

Isso significa que a DocumentRoot do seu vhost não pode ser acessada (embora esteja correta), por falta de permissões (óbvio).
O que eu tive que descobrir, é que o Fedora (versões 15, 16 e 17) cria a sua home, por exemplo /home/user, com permissão 700. Isso quer dizer que o owner (do exemplo: user) terá permissão de read, access e write, mas o grupo "user" e os "other" não terão direito algum. Toda a árvore de diretório dentro de /home/user estará inalcansável por outros usuários (mesmo que o usuário esteja no grupo "user"). Lembrando que as permissões possíveis são read/write/execute, mas para folders, execute significa "acessar".

Você pode verificar isso da seguinte forma:
$ cd /home
$ ls -l
drwx------. 45 user user  4096 Jul 23 16:47 user

$ stat -c '%A %a %n' ~
drwx------ 700 /home/user

Já no Ubuntu é diferente. A versão Ubuntu 11.10 (e provavelmente Ubuntu 12.04 também) criam a sua home com permissão 755, permitindo leitura/acesso para todos usuários. Você pode ler mais sobre permissões aqui.

Para as soluções abaixos supõe-se que seu umask estará intacto, ou seja, novos arquivos e pastas serão criados com permissão 775. Em caso de dúvida, faça a verificação abaixo:

$ umask -S
u=rwx,g=rwx,o=rx



Solução 1:Abrindo sua home para todos usuários.

Basta mudar a permissão da sua home para 755.
$ sudo chmod 755 ~
Garanta que todos os diretórios desde sua home até a DocumentRoot possuem permissão de acesso para "other".

Solução 2: Abrindo sua home para o seu grupo.

Mude a permissão da sua home para 750.
$ sudo chmod 750 ~
Adicione o usuário apache ao seu grupo principal.
(Supondo que seu grupo tem o mesmo nome que seu usuário)
$ sudo gpasswd -a apache $(whoami)