ping: socket: разрешение отклонено

Мы разрабатываем пользовательский интерфейс администратора для нашего продукта на PHP. Он размещен на веб-сервере Centos 7 и Apache. Пользователь должен иметь возможность проверять IP-адрес с помощью этого пользовательского интерфейса. Поэтому нам нужно вызвать exec(IPAddress) в PHP-коде и получить результат и показать пользователю. Проблема в том, что он вызывает сообщение об ошибке. Это ошибка:

 ping: socket: Permission denied 

Когда я выполняю setenforce 0 в оболочке Centos, мы можем выполнить команду ping из PHP. Как я могу сказать, что Centos позволила php выполнить команду ping навсегда?

Обновление: с помощью audit2why я получил это сообщение:

 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. 

SELinux блокирует PHP от выполнения ping . Вы должны приписать правильный контекст вашим скриптам PHP.

Предполагая, что они расположены в /var/www/html/ , вам нужно сделать:

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

Это, однако, должно выполняться пользователем root на сервере.

Примечание. setenforce 0 работал после того, как вы setenforce 0 потому что эта команда отключает SELinux. Чтобы отключить SELinux постоянно (не рекомендуется, так как это отключает проверки безопасности), отредактируйте /etc/sysconfig/selinux и укажите SELINUX=disabled .

Вы можете попробовать следующее.

Поместите этот код в файл local_httpd.te :

 policy_module(local_httpd, 0.0.1) gen_require(` type httpd_t; ') netutils_domtrans_ping(httpd_t) 

Убедитесь, что установлен RPM selinux-policy-devel RPM, а затем выполните:

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

Это должно позволить apache (httpd_t) перейти к контексту исполняемого файла ping

Лучший совет, который я могу вам дать, – отключить SELinux и потратить ваше время на то, чтобы ваша система была более безопасной, а не прыгала через таинственные и произвольные обручи.

…. к сожалению, мы не живем в идеальном мире – поэтому «рекомендуемое» решение – установить политику разрешительной, запустить скрипт, вызывающий ping, восстановить режим принудительного исполнения, а затем запустить audit2allow против журналов аудита, сгенерированных в тесте (см. связанный документ для некоторых указателей на детали этого).

К сожалению, это не работает в каждом случае.