ping: socket: Permissão negada

1

Estamos desenvolvendo uma interface administrativa para o nosso produto em PHP. Está hospedado no servidor web Centos 7 e Apache. O usuário deve conseguir executar ping em um endereço IP usando essa interface do usuário. Portanto, precisamos chamar exec(IPAddress) no código PHP e obter o resultado e mostrar ao usuário. O problema é que ele gera uma mensagem de erro. Este é o erro:

ping: socket: Permission denied

Quando executo setenforce 0 no shell, o Centos nos permite executar o comando ping do PHP. Como posso dizer ao Centos que o comando execute o ping permanentemente?

Atualização: usando audit2why , recebi esta mensagem:

type=AVC msg=audit(1502697341.249:11426): avc:  denied  { create } for
pid=28530 comm="ping" scontext=system_u:system_r:httpd_t:s0
tcontext=system_u:system_r:httpd_t:s0 tclass=rawip_socket

    Was caused by:
    Missing type enforcement (TE) allow rule.

    You can use audit2allow to generate a loadable module to allow this access.
    
por Beginner 14.08.2017 / 08:51

3 respostas

1

Você pode tentar o seguinte.

Coloque o código em um arquivo local_httpd.te :

policy_module(local_httpd, 0.0.1)

gen_require('
    type httpd_t;
')

netutils_domtrans_ping(httpd_t)

Verifique se você tem o selinux-policy-devel RPM instalado e faça:

make -f /usr/share/selinux/devel/Makefile local_httpd.pp e semodule -i local_httpd.pp

Isso deve permitir que o apache (httpd_t) faça a transição para o contexto do executável ping

    
por 21.08.2017 / 14:40
0

O SELinux está impedindo o PHP de executar ping . Você precisa atribuir o contexto correto aos seus scripts PHP.

Supondo que eles estejam localizados em /var/www/html/ , você precisa fazer:

semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?'
restorecon -R -v /var/www/html/

Isso, no entanto, deve ser feito pelo usuário root no servidor.

Nota: O ping funcionou depois que você digitou setenforce 0 porque este comando desativa o SELinux. Para desativar o SELinux permanentemente (não recomendado, pois isso desativa as verificações de segurança), edite /etc/sysconfig/selinux e especifique SELINUX=disabled .

    
por 14.08.2017 / 10:15
-2

O melhor conselho que posso dar é desativar o SELinux e gastar seu tempo fazendo seu sistema mais seguro em vez de saltar através de arcos misteriosos e arbitrários.

.... infelizmente não vivemos em um mundo perfeito - então a solução "recomendada" é definir a política como permissiva, executar o script chamando ping, restaurar o modo de imposição e executar o audit2allow nos logs de auditoria gerados no teste (ver documento vinculado para alguns ponteiros para o detalhe disso).

Infelizmente, isso não funciona em todos os casos.

    
por 14.08.2017 / 13:58