2012-05-09 5 views
-2

사용자를 LDAP에 추가하는 PHP 스크립트를 작성하려고합니다. 이를 위해 필자는 "addldapuser.sh"라는 제목의 쉘 스크립트를 가지고 있는데,이 쉘 스크립트는 사용자/화면 이름/암호 조합을 가져 와서 LDAP에 추가합니다. 이 스크립트는 제대로 작동합니다. 우리는 사용자가 웹 양식에 정보를 입력 할 수있게하고 싶습니다. 그러면 웹 양식에서 해당 스크립트를 호출하고 사용자를 LDAP에 올바르게 추가합니다. addldapuser 스크립트는 현재 루트 권한으로 실행해야하며 보안 문제를 인식하고 있지만 나중에 처리 할 수 ​​있습니다. 나는 내가 생각하거나 생각할 수있는 모든 것을 시도해 보았고, 내가 생각할 수있는 모든 허락을 주었고, 뿌리 뽑을 수있는 모든 것을 주었고, 잠시 동안 아파치로 돌아 다녔다. 이제는 아이디어가 없다.PHP에서 루트로 셸 스크립트를 실행 하시겠습니까?

$scrName = $_POST['screenname']; 
$usrName = $_POST['username']; 
$pass = $_POST['password']; 

if (isset($_POST['submit'])) 
{ 
    $out = nl2br(shell_exec("sudo /EasyLDAP/old_scripts/addldapuser.sh " . $usrName . " " . $scrName . " " . $pass)); 

} 

다시 한번, 나는 이것이 영원히 우리 모두를 파괴하는 해커에 종료 보장 끔찍한 생각입니다 알지만, 내 상사가 나에게 적어도이 방식으로 작동하고 싶어.

필자는 입력을 최소한으로 위생해야한다는 것을 알고 있으며, 이는 정시에 처리 될 것입니다.

+1

을 많은 시스템에서'sudo' 실제 청각 장애 쉘없이 실행할 수 없습니다. sudoers 파일에서'requiretty'를 찾으십시오. SELinux 나 AppArmor 같은 것을 돌리고 있다면 이것도 금지되어있을 것입니다. –

+3

또한, 실행하기 전에'escapeshellcmd()'를 호출하거나 이름 입력에서'escapeshellarg()'를 호출해야합니다. –

+3

Michael이 지적했듯이이 스크립트는 무서운 것입니다. 며칠 안에 해킹 당할 것입니다. 왜 LDAP 용 PHP 함수를 사용하지 않습니까? 왜 LDAP 스크립트가 sudo privs를 필요로합니까? – Brad

답변

1

최근에 PHP가 실제 Bash 쉘을 얻고 상호 작용할 수있는 프로젝트를 게시 했으므로 루트로 쉘을 쉽게 얻을 수 있습니다. 여기 받기 : https://github.com/merlinthemagic/MTS

을 단순히 다음 코드를 사용합니다 다운로드 한 후 :

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 

$strCmd = "/EasyLDAP/old_scripts/addldapuser.sh " . $usrName . " " . $scrName . " " . $pass; 
$return1 = $shell->exeCmd($strCmd); 

echo $return1;// return from your script 
1

루트로 실행되며 사용자 수준에서 실행되는 스크립트와 통신하는 데몬 만들기를 권장합니다.

매우 간단한 python rpc 서버 (예 : 내장 된 XML-RPC)와 클라이언트를 접착제로 사용하여 서버 중 하나와 루트로 실행하고 다른 하나는 클라이언트 스크립트로 실행할 수 있습니다.

PHP 코드는 필요한 매개 변수를 사용하여 파이썬 스크립트를 실행 한 다음 파이썬 서버 스크립트와 통신 할 수 있습니다.

서버의 성능을 향상 시키면 잠재적 인 보안을 얻을 수 있습니다. 필자는 대부분의 기능이 내장되어 있고 사용하기가 매우 간편한 언어로 파이썬을 선택했습니다.

예 :

서버 - http://docs.python.org/library/simplexmlrpcserver.html#simplexmlrpcserver-example

클라이언트 - 또는 http://docs.python.org/library/xmlrpclib.html#example-of-client-usage

, 당신은 PHP를 사용하여 주장하는 경우, 당신은 php daemon로 서버 프로세스를 실행하고 일부 유사한 RPC를 통해 연결할 수 있습니다 방법.

관련 문제