Plesk

Plesk upgrade shows warning: There are accounts with passwords encrypted using a deprecated algorithm

Symptoms

Cause

Plesk pre-upgrade checker cannot parse some passwords that were incorrectly encrypted.

Resolution

  1. Connect to the server via SSH as root or with a sudo user;

  2. Get the list of affected objects. Use the following queries to find out the exact type of all affected users via command line:

    • This database query will show all SMB users that are affected:

      # plesk db "SELECT login, contactName, email FROM smb_users WHERE password NOT LIKE '$%' AND login NOT LIKE 'admin'"

    • This will show mail users:

      # plesk db "SELECT m.mail_name, d.name FROM mail m join domains d on m.dom_id=d.id INNER JOIN (SELECT a.id FROM accounts a WHERE a.type='crypt' AND a.password NOT LIKE '$%') temptable ON temptable.id=m.account_id WHERE temptable.id = m.account_id"

    • This database query will show all clients (admin, customers, resellers) whose passwords have wrong encryption:

      # plesk db "SELECT c.login, c.pname, c.cname, c.email FROM clients c INNER JOIN (SELECT a.id FROM accounts a WHERE a.type='crypt' AND a.password NOT LIKE '$%') temptable ON temptable.id = c.account_id WHERE temptable.id = c.account_id"

    • This database query will show all db_users (database users) that are affected:

      # plesk db "SELECT db.login, d.name FROM domains d, db_users db INNER JOIN (SELECT a.id FROM accounts a WHERE a.type='crypt' AND a.password NOT LIKE '$%') temptable ON temptable.id = db.account_id WHERE d.id=db.dom_id"

    • This database query will show all sys_users (subscription users, FTP users) that are affected:

      # plesk db "SELECT s.login, s.home FROM sys_users s INNER JOIN (SELECT a.id FROM accounts a WHERE a.type='crypt' AND a.password NOT LIKE '$%') temptable ON temptable.id = s.account_id WHERE temptable.id = s.account_id"

    • This database query will show all pd_users (protected directory users) that are affected:

      # plesk db "SELECT pu.login, d.name FROM domains d, protected_dirs pd, pd_users pu INNER JOIN (SELECT a.id FROM accounts a WHERE a.type='crypt' AND a.password NOT LIKE '$%') temptable ON temptable.id = pu.account_id WHERE d.id = pd.dom_id"

  3. Change the password for affected users using Plesk UI.

    Note: Do not change this value in the Plesk database directly.

    Note: Leaving such passwords is not suggested as they may have negative consequences in future, for example…