PHP shell_exec()に関する問題

PHP shell_exec()に関する問題

ここでは、コマンド値に基づいてクエリ文字列を取得します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:rootchmod +s

関連情報