This script will help you change any email’s account password without using cPanel, this is done through the command line. It was written in PHP but mostly uses shell commands so I guess it was easier to use elements from both worlds.
Use it at your own risk, this script requires to be executed as root and was done for educational purposes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php // Inspired on the following articles: // https://cpanelgeek.wordpress.com/2015/08/26/resetting-email-account-password-from-command-line-in-cpanel/ // http://www.sudosu.in/2013/11/cpanel-bash-script-to-change-password_11.html if (!isset($argv[1])) die("Usage: $argv[0] full@email [password]\n"); // generate random 8 character password if (!isset($argv[2])) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!.-@'; $argv[2] = substr(str_shuffle($chars),0,8); } // validate email contains at least a @ and break it if (!preg_match("/\@/",$argv[1])) die("Invalid Email!\n"); list($name,$domain) = explode("@",trim($argv[1])); // get domain owner $user = trim(exec("/scripts/whoowns $domain")); if (!$user) die("Invalid Domain!\n"); // encrypt password $cpass = trim(exec("openssl passwd -1 '$argv[2]'")); //echo "$name @ $domain with $argv[2] $cpass\n"; // get home folder $path = trim(exec("grep \"^$user:\" /etc/passwd | cut -d\":\" -f6")); // get shadow line and prepare it $shadow = "$path/etc/$domain/shadow"; $tmpshadow = $shadow . ".tmp"; $rest = trim(exec("grep \"^$name:\" $shadow | cut -d\":\" -f3-")); if (!$rest) die("Email $argv[1] does not exist!\n"); // create tmp shadow file without the user's email exec("grep -v \"^$name:\" $shadow > $tmpshadow"); exec("chown $user:$user $tmpshadow"); exec("chmod 640 $tmpshadow"); // add the new user's password exec("echo '$name:$cpass:$rest' >> $tmpshadow"); // swap shadow files and backup the old one exec("mv $shadow $shadow".".".time()); exec("mv $tmpshadow $shadow"); echo "$argv[1] password changed to: $argv[2]\n"; ?> |
Save it as change_password.php and execute it to see how to use it: php change_password.php