Вам не нужно вводить логин, чтобы сменить пароль пользователя, просто укажите его имя для passwd. Используя popen (поскольку нам не нужно читать в этом крошечном примере), что-то вроде
$pp = popen("passwd ${user}", "w");
fwrite($pp, $oldPassword . '\n');
fwrite($pp, $newPassword . '\n');
fwrite($pp, $newPassword . '\n');
pclose($pp);
Если вы хотите прочитать ответы, используйте proc_open и просто прочитайте из заданного вами дескриптора stdout.
Я надеюсь, что все это хорошо защищено, и у вас есть лот санации на имя пользователя.