RHEL SELinux bloqueando o acesso do Apache ao PostgreSQL

4

Estou executando um aplicativo do Django que usa o PostgreSQL. O servidor está executando o RHEL 6.5 com o SELinux. Estou tendo um problema em que o aplicativo Django não pode se conectar ao banco de dados, e acho que é porque o SELinux está bloqueando isso. Aqui está o erro que estou vendo no Django:

could not connect to server: Permission denied Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Como posso consertar isso? Eu me deparei com este post , mas eu Não sei como aplicar a solução ( chcon -t postgresql_exec_t /path/to/pgbouncer ) ao meu problema.

Obrigado!

[editar]
Aqui está o que é o /var/log/audit/audit.log quando tento acessar o site:

type=AVC msg=audit(1396289984.549:9245): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.549:9245): arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625273aa0 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.756:9246): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.756:9246): arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe624d87890 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.757:9247): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.757:9247): arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625342c20 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1396289984.758:9248): avc:  denied  { write } for  pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.758:9248): arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625603ac0 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1213 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

[edit2]

Aqui estão algumas opções relevantes do SELinux que eu habilitei.

-bash-4.1$ sudo getsebool -a | grep httpd_can_network_connect_db httpd_can_network_connect_db --> on -bash-4.1$ sudo getsebool -a | grep allow_user_postgresql_connect allow_user_postgresql_connect --> on

    
por Geoff 31.03.2014 / 20:17

2 respostas

1

Ok, com a ajuda de um administrador de sistemas aqui, o problema está corrigido. Acontece que o contexto do SELinux atribuído aos binários em /usr/pgsql-9.3/bin estava errado. Tudo o que foi necessário para corrigir isso foi chcon -t postgresql_exec_t /usr/pgsql-9.3/bin . Para alterar o contexto em links simbólicos, basta adicionar -h .

    
por 01.04.2014 / 17:59
4

Para futuros leitores, para mim, apenas configurar o bool para permitir que o httpd faça conexões DB era suficiente; ou seja:

setsebool -P httpd_can_network_connect_db 1

Você pode verificar / verificar se a configuração está definida por:

getsebool httpd_can_network_connect_db

que deve retornar '... = > em '

Depois disso, se você desativar /var/log/audit/audit.log e tentar novamente sua operação, isso deve funcionar.

    
por 14.01.2015 / 15:44