ここでは、コマンド値に基づいてクエリ文字列を取得しますshell_exec()
。
クエリ文字列値を受け取りましたが動作しませshell_exec()
ん。
私はRaspberry pi 3に接続されているWebカメラを使用しているので、コマンドはWebカメラのオンとオフをshell_exec()
切り替えることです。
$output=shell_exec('sudo /etc/init.d/motion start')
パスワード:
<?php
$status=$_GET['status'];
if($status == 'on')
{
$output=shell_exec('sudo /etc/init.d/motion start');
}
if($status == 'off')
{
$output=shell_exec('sudo /etc/init.d/motion start');
}
実行の問題を解決するには?
答え1
一般的なアプローチは、apache / httpユーザーにsudo権限を付与するのではなく、次のようにsuidラッパーバイナリを作成することです。
$ sudo gcc -o suidmotion -xc - <<cEnd
#include "stdlib.h"
#include "string.h"
int main(int argc, char *argv[])
{ if (argc ==2)
{ if (!strcmp(argv[1], "start")) system("/etc/init.d/motion start");
if (!strcmp(argv[1], "stop" )) system("/etc/init.d/motion stop");
}
}
cEnd
$ sudo chmod +s suidmotion
...phpから呼び出す代わりにshell_exec("/path/to/suidmotion start/stop");
sudo gcc
誰が所有していても、バイナリの実行権限がバイナリ所有者(ルート)に昇格することを保証する出力suidmotion
バイナリを作成します。root:root
chmod +s