私は "簡単な"質問があります:Apacheのroot権限を与えたり、他の狂ったセキュリティホールを導入したりすることなく、PHPスクリプトからユーザのパスワードを安全に変更するにはどうすればいいですか?PHPのスクリプトからLinuxユーザのパスワードを変更する
背景: CentOSの6は、Apache 2.2.13、PHP 5.3.3
私はPECL PAMライブラリの一部であるpam_chpasswd()コマンドの認識しています。ただし、ホストプロセス(httpd)が/ etc/shadowファイルへの読み取りアクセス権を持っていない限り、この関数は失敗します。 (BAD IDEA!このライブラリがそのような高い特権を必要とするなら、どうすればよいか分かりません...)
私が見る限り、理想的な状況は、PHPに 'sudo -u [usernameユーザーのパスワードを変更する] ' これは、ユーザーの "AS"スクリプトを実行するので、自分のパスワードを変更する権限を持っている必要があります。そして、sudoは、ユーザーが認証されるために既存のパスワードを送信し、あるユーザーが別のユーザーのパスワードを変更できないようにする必要があります。
しかし、これは何らかの理由で機能しません... popenでプロセスを開くと、プロセスは実行されません。私は、シェルスクリプトを設定して、テキストを/ tmpにある公開しているファイルにダンプするようにしました。しかし、それは決してその点に達しません。
$cmd = "/usr/bin/sudo -S -u$username /file_to_execute.sh";
$handle = popen ($cmd, "w"); // Open the process for writing
fwrite ($handle, "$current_password\n"); // Send the user's current password to sudo (-S option)
fwrite .... (write the username, current password, and new password, so the script can change it)
$result = pclose($handle);
私はこのPHPスクリプトにアクセスする場合(のhttp://server/script.php)を、関数がすぐに失敗し、$結果は= 1
私はsudoersファイル(visudoを)を変更した場合に追加ライン:
$
デフォルト:apacheのrequiretty
スクリプトに失敗した、約10秒間フリーズはこれを行うための($結果= 1)
任意の提案は大歓迎です!セキュリティを考慮して上述の目的を達成するために
これらの作品のどれ? http://stackoverflow.com/questions/127459/using-shell-execpasswd-to-change-a-users-password?rq=1 – Aknosis