私たちはPHPで当社の製品の管理UIを開発しています。 Centos 7およびApache Webサーバーでホストされています。ユーザーはこのUIを使用してIPアドレスをpingできる必要があります。したがって、私たちはPHPコードを呼び出しexec(IPAddress)
、結果を得てユーザーに表示する必要があります。問題は、エラーメッセージが発生することです。エラーは次のとおりです。
ping: socket: Permission denied
シェルで実行するときにsetenforce 0
Centosを使用すると、PHPでpingコマンドを実行できます。 PHPがpingコマンドを永久に実行するようにCentosに指示する方法は?
更新:以下を使用して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.
ベストアンサー1
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
注:このコマンドはSELinuxを無効にするため、入力後にpingが機能します。 SELinuxを永久に無効にするには(セキュリティチェックがオフになるため推奨されません)、編集して/etc/sysconfig/selinux
指定しますSELINUX=disabled
。