PHP shell_exec() 관련 문제

PHP shell_exec() 관련 문제

여기서는 command 값을 기반으로 쿼리 문자열을 얻습니다 shell_exec().

쿼리 문자열 값을 받았지만 shell_exec()작동하지 않습니다.

저는 Raspberry pi 3에 연결된 웹캠을 사용하고 있으므로 명령은 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

관련 정보