나는 약간의 문제가있어서 PHP를 사용하여 sudo로 리눅스 명령을 실행해야합니다. PHP의 exec()를 사용하여 가능합니까? 시도했지만 sudo 암호를 입력 한 다음 동일한 exec() 호출에서 다른 명령을 실행할 수 없습니다.PHP : ldo 명령을 sudo로 실행 하시겠습니까?
편집 : 자신의 어리 석음으로 인해 ssh를 통해 원격으로 서버에 액세스 할 수 없습니다. 그래서 웹 서버를 통해 명령을 실행해야합니다.
나는 약간의 문제가있어서 PHP를 사용하여 sudo로 리눅스 명령을 실행해야합니다. PHP의 exec()를 사용하여 가능합니까? 시도했지만 sudo 암호를 입력 한 다음 동일한 exec() 호출에서 다른 명령을 실행할 수 없습니다.PHP : ldo 명령을 sudo로 실행 하시겠습니까?
편집 : 자신의 어리 석음으로 인해 ssh를 통해 원격으로 서버에 액세스 할 수 없습니다. 그래서 웹 서버를 통해 명령을 실행해야합니다.
특정 사용자 (예 : 웹 서버를 실행하는 사용자)에게 visudo를 사용하여 일부 명령에 대한 일부 권한을 부여하거나 실행하려는 프로그램을 setsuid해야하지만 강력하게 부인할 수 있습니다 이.
더 안전한 방법, 예를 들어 데이터베이스의 데이터 쓰기와 데이터베이스에서 자주 보이는 데몬 로봇을 구축하여 작업을 수행 할 수 없으며이 데몬을 루트 권한으로 부여 할 수 있습니까?
귀하의 PHP가 실행되는 사용자의 비밀번호 (NOPASSWD:
)가 필요하지 않도록 sudoers
을 설정해야합니다. 사용자가 sudo를 통해 실행할 수있는 명령을 완전히 잠그십시오!
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]);
편집을 수행하려면 visudo를 사용하십시오. –
vi는 고통 스럽지만 nano를 사용하면 sudoers 파일을 심각하게 망칠 수 있습니다. sudo를 사용할 수 없기 때문에 ec2 인스턴스에서 자신을 잠급니다. P –
@PeteHerbertPenito : visudo와 함께 nano를 사용할 수 있습니다. sudoers에'Defaults editor =/usr/bin/nano' 같은 줄을 추가하기 만하면됩니다. 그러면 미래에는 항상 'visudo'를 사용하십시오! 그것은 당신을 위해 구문 검사를 수행합니다. –