2010-01-13 6 views
0

나는 약간의 문제가있어서 PHP를 사용하여 sudo로 리눅스 명령을 실행해야합니다. PHP의 exec()를 사용하여 가능합니까? 시도했지만 sudo 암호를 입력 한 다음 동일한 exec() 호출에서 다른 명령을 실행할 수 없습니다.PHP : ldo 명령을 sudo로 실행 하시겠습니까?

편집 : 자신의 어리 석음으로 인해 ssh를 통해 원격으로 서버에 액세스 할 수 없습니다. 그래서 웹 서버를 통해 명령을 실행해야합니다.

답변

2

특정 사용자 (예 : 웹 서버를 실행하는 사용자)에게 visudo를 사용하여 일부 명령에 대한 일부 권한을 부여하거나 실행하려는 프로그램을 setsuid해야하지만 강력하게 부인할 수 있습니다 이.

더 안전한 방법, 예를 들어 데이터베이스의 데이터 쓰기와 데이터베이스에서 자주 보이는 데몬 로봇을 구축하여 작업을 수행 할 수 없으며이 데몬을 루트 권한으로 부여 할 수 있습니까?

1

귀하의 PHP가 실행되는 사용자의 비밀번호 (NOPASSWD:)가 필요하지 않도록 sudoers을 설정해야합니다. 사용자가 sudo를 통해 실행할 수있는 명령을 완전히 잠그십시오!

+2

편집을 수행하려면 visudo를 사용하십시오. –

+0

vi는 고통 스럽지만 nano를 사용하면 sudoers 파일을 심각하게 망칠 수 있습니다. sudo를 사용할 수 없기 때문에 ec2 인스턴스에서 자신을 잠급니다. P –

+0

@PeteHerbertPenito : visudo와 함께 nano를 사용할 수 있습니다. sudoers에'Defaults editor =/usr/bin/nano' 같은 줄을 추가하기 만하면됩니다. 그러면 미래에는 항상 'visudo'를 사용하십시오! 그것은 당신을 위해 구문 검사를 수행합니다. –

0

proc_open을 사용하면 메시지가 표시 될 때 데이터 (사용자 암호)를 공급할 사용자 지정 파이프를 만들 수 있습니다. 사용자 정의 암호 파이프를 만드는 방법은 링크의 주석을 참조하십시오.

업데이트, 읽을 수 없으므로 업데이트하십시오.

발췌문 이전에 두 번 언급 한 링크에서 05 6 월 2008 2시 46분에서 즐겁게 점 NOSPAMPLEASE 닷컴 도트 노소에서 snowleopard에 의해 코멘트에서. 당신은 당신 자신의 상황에 이것을 적용 할 필요가 있습니다.

// Set up the descriptors 
    $Descriptors = array(
     0 => array("pipe", "r"), 
     1 => array("pipe", "w"), 
     2 => array("pipe", "w"), 
     3 => array("pipe", "r") // This is the pipe we can feed the password into 
    ); 

    // Build the command line and start the process 
    $CommandLine = $GPGPath . ' --homedir ' . $HomeDir . ' --quiet --batch --local-user "' . $Identity . '" --passphrase-fd 3 --decrypt -'; 
    $ProcessHandle = proc_open($CommandLine, $Descriptors, $Pipes); 

    if(is_resource($ProcessHandle)) { 
     // Push passphrase to custom pipe 
     fwrite($Pipes[3], $PassPhrase); 
     fclose($Pipes[3]); 
+0

죄송하지만 proc_open을 사용하는 방법을 알 수 없습니다. 아이디어? – WhyKiki

+2

wtf가 문제입니까? 나는 PHP를 처음 사용하고 그런 종류의 일을하는 법을 모릅니다. 얼간이. – WhyKiki

관련 문제