Não consigo fazer com que o Apache siga links simbólicos fora do diretório raiz da web, mesmo que as permissões pareçam OK e o FollowSymLinks esteja ativado. Os detalhes estão abaixo.
Eu tenho dois arquivos de texto legíveis por todos: /tmp/hello
e /var/www/html/hello
. Também no webroot tenho links simbólicos para ambos os arquivos. Ambos parecem bem.
$ ll /tmp
drwxrwxrwt. 27 root root 4096 Jul 8 13:55 ./
dr-xr-xr-x. 23 root root 4096 Jul 4 23:24 ../
-rw-r--r--. 1 root root 6 Jul 8 13:55 hello
$ ll /var/www/html
drwxr-xr-x. 3 root root 4096 Jul 8 13:56 ./
drwxr-xr-x. 6 root root 4096 Apr 4 12:57 ../
-rw-r--r--. 1 root root 20 Jul 8 14:03 hello
lrwxrwxrwx. 1 root root 5 Jul 8 14:04 link-local -> /var/www/html/hello
lrwxrwxrwx. 1 root root 10 Jul 8 13:56 link-tmp -> /tmp/hello
$ cat /var/www/html/link-local
/VAR/WWW/HTML/HELLO
$ cat /var/www/html/link-tmp
/TMP/HELLO
O Apache pode seguir o link para a raiz da web:
$ curl http://localhost/link-local
/VAR/WWW/HTML/HELLO
Mas o Apache não seguirá o link simbólico para /tmp/
:
$ curl http://localhost/link-tmp
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /hellolink on this server.</p>
<hr>
<address>Apache/2.2.15 (CentOS) Server at localhost Port 80</address>
</body></html>
Isso está no CentOS 6; http é executado como usuário apache, grupo apache.
Por que isso está acontecendo? Como posso consertar isso?
Responder1
Sim, parece que o SELinux é o culpado:
A opção -Z funcionará com a maioria dos utilitários para mostrar contextos de segurança do SELinux (por exemplo, 'ls -Z', 'ps axZ' etc).
$ ll -Z /var/www/html/hello
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/hello
$ ll -Z /tmp/hello
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/hello
Os dois arquivos de destino possuem tipos diferentes ( httpd_sys_content_t
vs user_tmp_t
), o que explica a diferença na acessibilidade.
OPágina SELinux em centos.orgexplica a -Z
mudança e muito, muito mais.
Responder2
Você está configurando FollowSymlinks em um arquivo .htaccess? ou em um <Directory>
bloco?
Documentação de opções do Apache 2.2sugere que FollowSymlinks só funcionará nesses contextos - você poderia postar a configuração relevante?
(postando como resposta devido a pontos insuficientes para comentar)