Первый свободный модуль для управления Group Policy Preferences через PowerShell

Я использовал Group Policy Preferences ещё с тех пор, как это называлось Policy Maker. Мы обычно управляем этими настройками через GUI, но пару месяцев назад я задумался: а собственно почему только через GUI? Почему мы не используем PowerShell для этого?
Ответ оказался простой: нечем. Да, есть Group Policy Automation Engine, но это платный и закрытый продукт. А во встроенном модуле управления групповыми политиками GroupPolicy просто нет такой функциональности. Точнее есть частичная — для секции Registry командлеты там есть, но это всё.

Поэтому я запускаю проект по PowerShellизации GPP: https://github.com/exchange12rocks/PSGPPreferences
Модуль пока ещё только в начале своего пути, но уже доступен для установки через PowerShell Gallery: https://www.powershellgallery.com/packages/PSGPPreferences/

Прямо сейчас модуль даёт вам возможность управлять определениями групп через GPP (даже пользователи пока не реализованы). Но я надеюсь, что остальные секции у меня получится делать достаточно быстро, т.к. основная работа для этого уже проделана.
Самая важная задача на сегодняшний день (и самая сложная) — это написание тестов. К сожалению, это необходимо, т.к. иначе вероятность регрессий очень высока. Поэтому это то, чем я буду сейчас заниматься.

Как расшифровать пароли Plesk на Windows

Plesk использует симметричное шифрование для многих паролей в своей внутренней базе MySQL называющейся «psa». В Интернете опубликовано несколько скриптов для их расшифровки, но ни одного для Windows. До сегодняшнего дня.

Симметрично зашифрованные пароли можно найти в следующих таблицах базы данных psa:

  • accounts (столбец password)
  • databaseservers (столбец admin_password)
  • dsn (столбец cstring)
  • longtaskparams (запись oldBackupkey — это параметр для backup-encrypt-task (из таблицы longtasks))
  • misc (столбец aps_password)
  • servicenodeconfiguration (столбец value для секции MailGate / password)
  • smb_users (столбец password)

Симметрично зашифрованные пароли выглядят так: «$AES-128-CBC$ABNK35ZcqnbTYT4Q3mbaEA$HmGDWmtym6K3+kJ8uBoJOg».
Они начинаются с «$AES-128-CBC$». Далее между вторым и третьим знаком доллара расположен вектор инициализации AES. После него и до конца строки идут собственно зашифрованные данные.

В Linux симметричный ключ, использующийся Plesk’ом для шифрования таких паролей, находится в файле /etc/psa/private/secret_key. В Windows, разработчики положили его в реестр: HKLM:\SOFTWARE\WOW6432Node\PLESK\PSA Config\Config\sym_key\sym_key

Для извлечения зашифрованного пароля из базы данных просто скопируйте его поле из таблицы с помощью любого инструмента для работы с MySQL, который вам нравится.

Note

О том как подключиться к базе «psa» читайте здесь и также вот это.

Скопированный пароль передайте в параметр -EncryptedString скрипта, который расположен ниже. Обратите внимание, что по умолчанию скрипт будет работать только на том же сервере, где установлен Plesk из базы которого вы скопировали пароль. Если вы хотите расшифровывать пароли на отдельной машине, извлеките из реестра симметричный ключ и передайте его в параметр -SymmetricKey.

Дополнительная информация по теме:

https://gist.github.com/gnanet/99f5e284c0f71032498625368ba67659
https://www.besuchet.net/2016/06/plesk-11-encrypted-hashed-password-authentication-php-on-psa-database/
https://mor-pah.net/2014/03/05/decrypt-plesk-11-passwords/
https://codeforcontent.com/blog/using-aes-in-powershell/