PHP から shell を実行して sudo したい場合は Apache から sudo が
実行できるように設定しておく必要があります。
sudo の設定は visudo というコマンドで行います。
使用方法としては、 vi と変わりません。
[root]# visudo
~
# ↓この一行を追加すると、apache から shutdown -h now が実行可能になります
apache localhost=NOPASSWD: /sbin/shutdown -h now
でまぁ、これを PHP から実行してみます。
例えば次のようなコードで
$out = "";
$out = shell_exec("/sbin/shutdown -h now 2>&1");
echo "$out\n";
実行結果
sudo: sorry, you must have a tty to run sudo
なにやらエラーが出ました。
これは、端末がないユーザからの sudo の実行が禁止されているというメッセージです。
なので、visudo で apache ユーザに対して 端末なしでも実行できるように
設定を変更してやります。
# ↓この行でデフォルトオプション指定により、sudu 実行には
# 端末が要求されるようになっています。
Defaults requiretty
でこれをコメントしてやればいいのですが、
(多くのサイトではこれをコメントすればよいとかいてあるが…)
なんかセキュリティが弱くなりそうなので、apache ユーザのみこの
設定を外すことにします。(まぁ sudo の勉強も兼ねて)
次のように設定します。
# ↓ apache を エイリアスとして設定
User_Alias NOTTYUSERS = apache
Defaults requiretty
# ↓ NOTTYUSERS に対し、 requiretty フラグをオフ
Defaults:NOTTYUSERS !requiretty
これで、PHP から sudo が実行できるようになりました。
0 件のコメント:
コメントを投稿