System.setPasswordを使うとApexクラスでパスワード変更処理を行うことができます。System.setPasswordはユーザIDと新しいパスワードを引数として渡すことで使用できます。
こんな感じです。
System.setPassword(UserInfo.getUserId(), newPassword);
このSystem.setPasswordですが使用できるユーザとできないユーザがいました。
社内ユーザとカスタマーポータルユーザで実行したところ問題なく動作しました。
ですがコミュニティユーザで実行したところエラーが発生してサイト用のエラーページに飛ばされました。
コミュニティユーザはサイトユーザと同じ扱いを受けるみたいなので、コミュニティユーザとサイトユーザではSystem.setPasswordによるパスワード変更はできないみたいです。
サイトユーザにはSite Classが用意されているのでコミュニティユーザもSite.changePasswordなどを使ってパスワード変更を行うことができます。
こんな感じです。
Site.changePassword(newPassword, verifynewPassword, oldPassword);