2012-10-28 3 views
0

가능한 중복 :
How to call shell script from php that requires SUDO?PHP exec를 통해 SUDO를 실행 하시겠습니까?

나는 SU 권한 (우분투 서버에서) 실행하는 데 필요한 파이썬 파일이 있습니다.
어떻게하는지 알 수 없습니다.

과 같이 PHP에서 실행 : 작동하지

$command = "python /path/to/my/file.py params"; 
$temp = exec($command, $output); 
var_dump($output); 

.

가 시도 (Xvfb가 비 루트에 대한 시작하는 데 실패) :

$command = "echo 'root_pwd' | sudo -S python /program.py params" 
... 

작동하지 않았다

.

시도 : 편집은/etc /의 sudoers : 다음

Cmnd_Alias BUNDLE = /path/to/myprog.py 
nobody ALL=(ALL) NOPASSWD:BUNDLE 

과 :

$command = "sudo -u nobody python myprog.py params"; 
... 

작동하지 않았다.
내가 "작동하지 않는다"고 말하면 - var_dump ($ output)은 빈 배열을 반환하고 서버 (myprog.py는 서버에 파일을 생성해야 함)에 성공하지 못하거나 페이지가 몇 분 동안 만로드됩니다. 그것이 끝날 때까지.

기본 .py 파일 (특수한 권한이 필요 없음) 작동.

Pls help.

PS : .Py 파일이 URL의 스크린 샷을 만들고 있으므로 webkitgtk, Xvfb 및 다른 것들을 사용하고 있습니다.

+1

많은 (대부분?) sudo를 구성 호출되는'sudo'를 방지'requiretty' 지시자를 포함 비 - 사용자 - 터미널 프로세스에 의해. 'requiretty'가 비활성화 된 것이 더 나을지도 모르지만, 이것을 설정하는 올바른 방법은 serverfault.com에 문의하는 것이 좋습니다. _ 심하게 _ 시스템의 보안을 손상시킬 수 있습니다 ... –

답변

0

당신의 명령은 왕이다 : 여기

$command = "sudo -u nobody python myprog.py params"; 

가 직접 파이썬 인터프리터를 호출하고 있지만 sudores 파일 만 /path/to/myprog.py을 허용했다.

당신이이 방법을 수행 할 경우, 다음 파이썬 프로그램에 오두막을 추가하고 실행 한 다음

$command = "sudo -u nobody /path/to/myprog.py params"; 

에 명령을 변경할 수 있도록하지만,이 작업을 위해, 사용자가 당신이 지정하여 sudoers 파일은 명령을 실행하는 사용자 여야합니다. 이는 아마도 nobody이 아니지만 웹 서버 프로세스 (www-data?) : 허용되지 않습니다

  • 현재 사용자 (아마도 웹 서버 과정) :

    Cmnd_Alias BUNDLE = /path/to/myprog.py 
    www-data ALL=(ALL) NOPASSWD:BUNDLE 
    

    다른 방법은 당신이

    $command = "echo 'root_pwd' | sudo -S python /program.py" 
    

    아마 두 가지 이유로 실패 시도 sudo하려면

  • sudo은 루트 암호를 사용하지 않지만

가 그리고 당신이 정말로 어쨌든이 같은 암호를 통과하지 않으려는 현재 사용자 암호 ...

관련 문제