LoginSignup
1
0

More than 3 years have passed since last update.

execコマンドを使ってpingを飛ばそうとしたらはまった話

Last updated at Posted at 2019-06-27

どんな状況になったのか

ウェブページからpingの疎通確認をしたいと思いexecコマンドを使って実現しようとした。すると、PHPコマンドで確認すると正常に動作するがブラウザから確認しようとすると権限不足と言われて正常に動作しない。

結果関係なかったけどコード

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Home</title>
</head>

<body> 
</form>
  <?php
  exec(sprintf('/bin/sudo /usr/bin/ping -c1 -w3 192.168.30.12'), $output, $return_ver);
  if($return_ver == 0){
    echo "ok";
  }else{
    echo "no";
  }
  }
   ?>
</body>
</html>

環境

  • サーバー
    • CentOS7
    • PHP7.1
    • Apache2.4.6
  • PC側
    • Windows10
    • chorome 75.0.3770.100

試したこと

ファイルの権限を変更

本当はよくないが原因究明のためいったん777にした。
が正常に動作しなかった。

chmod 777 test.php

Apacheユーザの権限を変更

これも今回はroot権限と同様の権限を与えているが本来は危険な行為であるため避けたほうがよい。

visudo
#追記
Apache  ALL=(ALL)    NOPASS:ALL

これに関してはやっておかないと権限の関係でダメかもしれない

解決方法

SELINUXだった

どうやらSELINUXがroot権限をとられても被害を最小限にしようと頑張っていた模様
単純にSELINUXを無効にしたら正常に動作してくれました。

SELINUXを無効にする

一応SELINUXを無効にする方法を書いておく

/etc/selinux/config
SELINUX=enforcing
↓変更
SELINUX=disabled

この後rebootをかけると設定が反映される。

まとめ

今回の原因はSELINUXでした。

以前もSELINUXに苦しめられたことがあったが忘れていて今回もやられてしまいました。
自分への備忘録のために書いたようなものですが誰かの参考になったらうれしいです。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0