O Apache não seguirá links simbólicos, mesmo com permissões definidas

2

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 corretas e o FollowSymLinks esteja ativado. Os detalhes estão abaixo.

Eu tenho dois arquivos de texto que podem ser lidos pelo mundo: /tmp/hello e /var/www/html/hello . Também no webroot eu 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?

    
por Bennett McElwee 08.07.2014 / 04:26

2 respostas

0

Sim, parece que o SELinux é o culpado:

The -Z switch will work with most utilities to show SELinux security contexts (e.g, '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 têm tipos diferentes ( httpd_sys_content_t vs user_tmp_t ), o que explica a diferença na acessibilidade.

A página do SELinux no centos.org explica o -Z e muito, muito mais.

    
por 10.07.2014 / 07:37
0

Você está definindo FollowSymlinks em um arquivo .htaccess? ou em um bloco <Directory> ?

A documentação do Apache 2.2 Options sugere que o FollowSymlinks só funcionará nestes contextos - poderia você postar a configuração relevante?

(postagem como resposta devido a pontos insuficientes para comentar)

    
por 08.07.2014 / 08:49