2012-05-09 21 views
-2

ユーザーをLDAPに追加するためのPHPスクリプトを作成しようとしています。この目的のために、私はシェルスクリプトを持っています。これは、 "addldapuser.sh"と題されており、ユーザ/スクリーンネーム/パスワードの組み合わせをとり、それらをLDAPに追加します。このスクリプトは正常に動作します。私たちは、ユーザーがWebフォームに情報を入力し、そのスクリプトを呼び出してLDAPに適切にユーザーを追加できるようにしたいと考えています。 addldapuserスクリプトは現在rootとして実行する必要がありますが、セキュリティの問題を認識しているうちに、後で対処することができます。私は考えることができるすべてを試しました。私が考えることができるすべての許可をすべて与えました。私が根絶できるすべてを与えました。しばらくの間、Apacheに悩まされました。PHPでrootとしてシェルスクリプトを実行していますか?

$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'は、実際のttyシェルなしで実行することはできません。あなたのsudoersファイルで 'requiretty'を探してください。 SELinuxやAppArmorのようなものを実行している場合は、これも禁止されています。 –

+3

また、実行する前に 'escapeshellcmd()'を呼び出すか、名前の入力に 'escapeshellarg()'を呼び出すようにしてください。 –

+3

Michaelが指摘するように、このスクリプトは恐ろしいものです。あなたは数日以内にハッキングされます。なぜLDAP用のPHP関数を使用しないのですか?とにかくLDAPスクリプトがsudo privsを必要とするのはなぜですか? – Brad

答えて

1

私は最近、PHPが実際のBashシェルを取得して操作できるようにプロジェクトを公開しました。あなたは簡単にrootでシェルを入手できます。ここでそれを取得します: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

daemonの作成をお勧めします。デーモンはルートとして実行され、ユーザーレベルで実行されているスクリプトと通信します。

非常にシンプルなpython rpcサーバー(ビルトインのXML-RPCなど)とクライアントをグルーとして実行し、そのうちの1つをサーバーとルートとして実行し、もう1つをクライアントスクリプトにすることができます。

phpコードは、必要なパラメータを持つpythonスクリプトを実行し、pythonサーバスクリプトと通信できます。

利点として、サーバーの部分をうまく処理すると、潜在的なセキュリティが得られます。私はPythonを、ほとんどの機能が組み込まれている言語として選びました。使い方はとても簡単です。

例:

サーバー - http://docs.python.org/library/simplexmlrpcserver.html#simplexmlrpcserver-example

クライアント - またhttp://docs.python.org/library/xmlrpclib.html#example-of-client-usage

、あなたがPHPを使用して主張すれば、あなたはphp daemonとして、サーバー・プロセスを実行し、いくつかの類似したRPC経由して接続することができます手段。

関連する問題