Download Articles Stats About us Contact us
HomeVestaCP

กำหนดให้ vesta ใช้ sha-512 แทน md5 เวลาสร้าง password

หากเราดู source code ของ vestacp จะพบว่าไฟล์
/usr/local/vesta/bin/v-generate-password-hash
มี option ให้สร้าง password แบบ sha-512

ดังนั้น เราจะแก้ code ของ vesta ให้ใช้ sha-512 แทน md5 เวลาสร้างรหัสผ่านอีเมล์

nano /usr/local/vesta/bin/v-change-mail-account-password
# Generating hashed password
salt=$(generate_password "$PW_MATRIX" "8")
#md5="{MD5}$($BIN/v-generate-password-hash md5 $salt <<<$password)"
md5="$($BIN/v-generate-password-hash sha-512 $salt <<<$password)"

quota=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$QUOTA')
if [[ "$MAIL_SYSTEM" =~ exim ]]; then
    sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd
    str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota"
    echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
fi
บรรทัดที่ 6 : แก้ bug ของ vesta เวลาเราเปลี่ยนรหัสผ่านแล้ว quota ถูก reset

nano /usr/local/vesta/bin/v-add-mail-account
# Generating hashed password
salt=$(generate_password "$PW_MATRIX" "8")
#md5="{MD5}$($BIN/v-generate-password-hash md5 $salt <<<$password)"
md5="$($BIN/v-generate-password-hash sha-512 $salt <<<$password)"
จากนี้ไป เวลาเราสร้างอีเมล์ หรือเปลี่ยนรหัสผ่านอีเมล์ ใน control panel ของ vesta
รหัสผ่านจะถูกสร้างแบบ sha-512

ผมลอง login เข้า roundcube แล้วลองเปลี่ยนรหัสผ่านใน roundcube
ปรากฏว่า error ดังนั้น เราจึงต้องแก้ไฟล์ที่เกี่ยวกับ roundcube ด้วย

nano /usr/local/vesta/web/reset/mail/index.php ​
// Check arguments
if ((!empty($_POST['email'])) && (!empty($_POST['password'])) && (!empty($_POST['new']))) {
    list($v_account, $v_domain) = explode('@', $_POST['email']);
    $v_domain = escapeshellarg($v_domain);
    $v_account = escapeshellarg($v_account);
    $v_password = $_POST['password'];

    // Get domain owner
    exec (VESTA_CMD."v-search-domain-owner ".$v_domain." 'mail'", $output, $return_var);
    if ($return_var == 0) {
        $v_user = $output[0];
    }
    unset($output);

    // Get md5 hash from vesta database
    if (!empty($v_user)) {
        exec (VESTA_CMD."v-get-mail-account-value '".$v_user."' ".$v_domain." ".$v_account." 'md5'", $output, $return_var);
        if ($return_var == 0) {
            $v_hash = $output[0];
        }
    }
    unset($output);

    // Get md5 hash from old password
    if (!empty($v_user)) {
        $t1 = explode('$', $v_hash); $salt=$t1[2];
        exec (VESTA_CMD."v-generate-password-hash sha-512 $salt $v_password", $output, $return_var);
        if ($return_var == 0) {
            $n_hash = $output[0];
        }
    }
    unset($output);

    // Compare hashes
    if (!empty($v_hash)) {
//        $salt = explode('$', $v_hash);
//        $n_hash = md5crypt($v_password, $salt[2]);
//        $n_hash = '{MD5}'.$n_hash;

        // Change password
        if ( $v_hash == $n_hash ) {
//            $v_new_password = tempnam("/tmp","vst");
//            $fp = fopen($v_new_password, "w");
//            fwrite($fp, $_POST['new']."\n");
//            fclose($fp);

            $v_new_password = $_POST['new'];
            exec (VESTA_CMD."v-change-mail-account-password '".$v_user."' ".$v_domain." ".$v_account." ".$v_new_password, $output, $return_var);
            if ($return_var == 0) {
                echo "ok";
                exit;
            }
        }
    }
}

echo 'error';

exit;
nano /usr/share/roundcubemail/plugins/password/config.inc.php
เปลี่ยน port บรรทัดสุดท้ายให้ตรงกับ vesta
 

7 ส.ค. 62
© 2000 - 2024 palthai.com. All rights reserved.