web-dev-qa-db-ja.com

ping:ソケット:許可が拒否されました

PHPで製品の管理UIを開発しています。 Centos7およびApacheWebサーバーでホストされています。ユーザーは、このUIを使用してIPアドレスにpingできる必要があります。したがって、PHPコードでexec(IPAddress)を呼び出し、結果を取得してユーザーに表示する必要があります。問題は、エラーメッセージが表示されることです。これはエラーです。

ping: socket: Permission denied

ShellCentosでsetenforce 0を実行すると、PHPからpingコマンドを実行できます。 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.
1
Beginner

次のことを試してみてください。

そのコードをlocal_httpd.teファイルに入れます。

policy_module(local_httpd, 0.0.1)

gen_require(`
    type httpd_t;
')

netutils_domtrans_ping(httpd_t)

selinux-policy-devel RPMがインストールされていることを確認してから、次の手順を実行します。

make -f /usr/share/selinux/devel/Makefile local_httpd.ppおよびsemodule -i local_httpd.pp

これにより、Apache(httpd_t)がping実行可能ファイルのコンテキストに移行できるようになります。

1
Bigon

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ユーザーが行う必要があります。

注:このコマンドはSELinuxを無効にするため、setenforce 0を入力した後にpingが機能しました。 SELinuxを永続的に無効にするには(セキュリティチェックがオフになるためお勧めしません)、/etc/sysconfig/selinuxを編集し、SELINUX=disabledを指定します。

0
dr_