Por que o apache não permite links simbólicos, com o SELinux?

3

Eu tenho um cenário simples: Eu quero fazer um link simbólico de /home/leonard/apache/sandbox/markdown para /home/leonard/github/markdown-editor , para que o markdown-editor possa ser visualizado no meu navegador.

Eu configurei o link com ln -s /home/leonard/github/markdown-editor /home/leonard/apache/sandbox/public/markdown e ele aparece e pode ser navegado bem.

Quando visualizo no navegador, no entanto, recebo 403 Forbidden . Meu audit.log mostra o seguinte:

type=AVC msg=audit(1461759062.021:1232192): avc:  denied  { read } for  pid=30107 comm="httpd" name="markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1461759062.021:1232192): arch=c000003e syscall=4 success=no exit=-13 a0=7f88e34cff28 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=7f88dec032e0 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1461759062.022:1232193): avc:  denied  { getattr } for  pid=30107 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1461759062.022:1232193): arch=c000003e syscall=6 success=no exit=-13 a0=7f88e34d0018 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=1 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Eu vi outras perguntas aqui perguntando como definir o contexto para links simbólicos, mas não tenho certeza se eles estão relacionados, porque o link é o mesmo que outros diretórios adjacentes (perfeitamente visível no navegador):

[leonard@ombrelle public]$ ls -alZ
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 .
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 ..
-rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 .htaccess
-rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 index.php
lrwxrwxrwx. leonard developers unconfined_u:object_r:user_home_t:s0 markdown -> /home/leonard/github/markdown-editor
drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 notes

Como faço para que os links simbólicos funcionem dessa maneira?

Atualizar

Usando a resposta de Ian , eu corri audit2why < /var/log/audit/audit.log e recebi:

type=AVC msg=audit(1461761590.750:1232443): avc:  denied  { getattr } for  pid=37683 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file

        Was caused by:
        The boolean httpd_enable_homedirs was set incorrectly.
        Description:
        Allow httpd to read home directories

        Allow access by executing:
        # setsebool -P httpd_enable_homedirs 1

A execução do comando setsebool magicamente fez com que funcionasse. Não tenho certeza de como todos os outros sites que temos ( /home/*/apache/sitename.tld ) estavam funcionando sem que isso fosse ativado?

    
por Leonard Challis 27.04.2016 / 14:15

1 resposta

1

Você não diz qual distro / release está usando, o que pode ser relevante. Eu só tenho Centos 6 e 7 para entregar, mas as ferramentas a serem usadas devem estar disponíveis em outras distros.

As ferramentas com as quais você deve se familiarizar são audit2why e audit2allow .

A execução de suas mensagens de negação por meio das ferramentas indicará a direção certa.

No sistema CentOS 6 eu tenho que entregar as ferramentas para sugerir que a política atual deve permitir isso (então eu acho que você não está usando isso), mas definir um booleano do SELinux em particular ajudará a resolver o problema.

No sistema CentOS 7, tenho que entregar as ferramentas para sugerir que a configuração de um booleano SELinux em particular ajudará a resolver o problema.

    
por 27.04.2016 / 14:49