どんな状況になったのか
ウェブページから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に苦しめられたことがあったが忘れていて今回もやられてしまいました。
自分への備忘録のために書いたようなものですが誰かの参考になったらうれしいです。
参考