1

登録後に自動的にユーザーを作成できるシステムを作成しています。このようにして、ランダムなパスワードを生成し、「mkpasswd」で暗号化し、「useradd」でユーザーを作成する Perl スクリプトを作成しました。その後、ユーザー情報がデータベースに送信されます。

ドキュメントを検索し、php exec 関数を使用して Perl プログラムを呼び出そうとしました。

$command = "/server/backoffice/scripts/usercreation.pl $username";
exec($command, $result);
print_r($result);

usercreation.pl スクリプトはターミナルで正常に動作しますが、不明な理由により、php からは動作せず、何も起こりません。問題が useradd 構文に起因するか、そうでない場合は useradd コマンドに起因することがわかっています。返されるエラー値は 255 <=> 0xff <=> -1 です。

問題は useradd の --password オプションにあると思います。実際、このオプションは mkpasswd を使用しており、シェルまたはそのようなものを妨害する可能性があります:p

Perl プログラムで使用される完全な useradd コマンド:

system("/usr/sbin/useradd $username -m -d $home --expiredate $expire --shell $shell --gid $gid --password $c_password");

編集: pastebin の usercreation.pl ファイル (調査対象の部分に切り詰められています): http://pastebin.com/DgFdndXf

PHPのもの: http://pastebin.com/pQhADNzg

使用する Web サーバーは nginx/0.7.65 です。

使用するphpのバージョンはPHP 5.3.3-1です。

uname -a

Linux openco 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:35:26 UTC 2012 i686 GNU/Linux

全てに感謝!

4

1 に答える 1

2

useraddルートとして実行する必要があるためsudo、nginx がスクリプトをルートとして実行できるように指定する必要があります。

このようなものには細心の注意を払ってください。を使用して、ユーザー名をサニタイズし、コマンドを適切にエスケープしてくださいescapeshellarg()

于 2012-06-02T14:51:30.153 に答える