Как поменять владельца ключа или ветки реестра из командной строки

Как поменять владельца ключа или ветки реестра из командной строки

Иногда, чтобы поменять что-то в реестре (выполнить твик или просто внести нужное вам изменение) в первую очередь требуется получить доступ к ветке/ключу реестра. Казалось бы, для администратора это не проблема. Но нюанс в том, что в некоторые ветки реестра Windows не может внести изменения даже администратор. Доступ к таким веткам ограничивается ACL, в которых либо отсутствуют права записи для группы локальных администраторов, либо владельцем таких разделов назначены TrustedInstaller или System. В этом руководстве мы покажем несколько простых способов предоставить администратору права владельца и полные права на защищенный таким образом раздел реестра.

Не будем рассматривать графический способ смены владельца и назначения права через утилиту regedit.exe, и остановимся на возможностях смены владельца любого ключа реестра и предоставления доступа из командной строки. Все описанные ниже методы работают во всех версиях Windows!

Получение прав владельца на ключ реестра с использованием утилиты SubInACL

SubInACL – это официальная утилита от Microsoft, которую можно использовать для просмотра и изменения прав, владельца и информации о безопасности и т.д. для файлов, папок, ключей реестра, сервисов и т.д. в ОС Windows .

Утилита была написана для Windows 2000, XP и Server 2003, однако ее можно использовать и со всеми новыми версиями Windows.

ШАГ 1:

Скачайте утилиту с сайта Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=23510

ШАГ 2:

Это стандартный MSI инсталлятор, который копирует SubInACL.exe file в папку «C:Program Files (x86)Windows Resource KitsTools» в Windows x64 и в папку «C:Program FilesWindows Resource KitsTools» в Windows х86.

Установка утилиты SubInACL

Но никто не мешает вам просто распаковать MSI файл (например, с помощью 7-Zip) в любое место без необходимости его установки.

ШАГ 3:

Вы можете выбрать как запускать SubInACL.exe. Из места установки (cd C:Program Files (x86)Windows Resource KitsTools), или из места куда вы сами его распаковали, да хоть с флэшки 🙂 . Или можете скопировать SubInACL.exe в папку С:WindowsSystem32 и тогда он будет запустится по имени. Мы предлагаем скопировать subinacl.exe файл в папку C:WindowsSystem32 (C:WindowsSysWOW64) чтобы была возможность запустить SubInACL из любого удобного места.

ШАГ 4:

Давайте научимся, как работать с SubInACL.exe. Синтаксис утилиты (в командной строке с правами администратора):

SubInACL /type name /action

/type: Укажите нужный тип объекта. Если надо сменить владельца файла или папки используем file, а если надо поменять владельца ключа реестра, то используем keyreg или subkeyreg. Разница между keyreg и subkeyreg в том, что keyreg меняет владельца только конкретного ключа, а subkeyreg меняет владельца этого ключа и всех подчиненных ключей.

name: Замените этот параметр на название файла, папки или ключа реестра.

/action: Этот параметр определяет то действие, которое будет произведено над объектом. Ну а раз мы собрались менять владельца ключа и прав на ключ, будем использовать /setowner=administrators /grant=administrators=f в качестве действия.

Смотрим на пример.

SUBINACL /keyreg "HKEY_LOCAL_MACHINESOFTWAREMozilla" /setowner=Администраторы /grant=Администраторы=f

SubInACL смена владельца ветки реестра

Примечание. В английской версии Windows вместо Администраторы нужно указывать Administrators.

Эта команда означает, что меняется владелец данного ключа и Администратор получает полные права управления данным ключом.

Ну а вам остается только заменить название ключа из примера, на ваш собственный и запустить команду..

PS: Если интересно посмотреть весь доступный синтаксис, ключи и параметры команды SubInACL, запустите с таким ключом SubInACL /help

Смена владельца и прав на ключ реестра с помощью утилиты SetACL

SetACL является бесплатной консольной утилитой. Вам нужно скачать программку и затем запустить нужные команды.

ШАГ 1:

Качаем программу SetACL: https://helgeklein.com/download/#setacl

ШАГ 2:

После скачивания распакуйте ZIP файл и увидите две версии утилиты: для x86 и для x64 версий Windows. Вам надо использовать правильный SetACL.EXE для вашей версией Windows. Посмотреть какая версия Windows можно в Свойствах Системы (System Properties).

ШАГ 3:

Есть два способа использовать приложение. Вы можете, например, сохранить утилиту в папке E:SetACL, затем открыть Командную строку от имени Администратора и перейти в эту папку используя стандартные команды или ввести полный путь для запуска утилиты, например E:SetACLSetACL.exe. Или вы можете скопировать SetACL.exe в системную папку C:WindowsSystem32 (C:WindowsSysWOW64) тогда можно запускать команду SetACL из любого места. Мы предлагаем скопировать EXE файл в папку C:WindowsSystem32 (C:WindowsSysWOW64).

ШАГ 4:

Теперь, когда вы сделали все предварительные процедуры, вы можете запустить SetACL:

SetACL -on name -ot type -actn action

Синтаксис:

То что выделено жирным остается неизменным, то что выделено курсивом будем менять:

on: Этот параметр указывает на полный путь к фалу или ключ реестра, владельца которого надо изменить.

ot: Этот параметр определяет тип объекта. Если меняем владельца файла, то меняем параметр на file. Если ключ реестра, то указываем reg

actn: Этот параметр указывает, что именно сделать. Возможно много вариантов, но так как мы говорим о ключах реестра, в частности о смене владельца или назначении других прав на ключ, будем использовать только значения setowner или ace.

Чтобы лучше понять как это работает, посмотрим пример:

Предположим, что нужно сменить владельца ключа HKEY_LOCAL_MACHINESOFTWAREMozilla. Для этого нам надо запустить SetACL со следующими параметрами:

SetACL.exe -on "HKEY_LOCAL_MACHINESOFTWAREMozilla" -ot reg -actn setowner -ownr "n:Администраторы"


SetACL.exe -on "HKEY_LOCAL_MACHINESOFTWAREMozilla" -ot reg -actn ace -ace "n:Администраторы;p:full"

SetACL установка владельца и прав на ветки реестраПервая команда сделает группу локальных администраторов владельцем ключа, а вторая предоставит полный доступ к ключу.

Вам просто надо поменять значение ключа между кавычками(«»), на тот, который вам нужен.

Примечание: SetACL имеет много параметров, но об этом почитайте самостоятельно здесь (https://helgeklein.com/setacl/documentation/command-line-version-setacl-exe/).

Получение прав владельца на ключ реестра с использованием встроенной команды REGINI

Эта команда идет в составе любой Windows и мы можем ее использовать для назначения разрешений на ключи реестра. Использование команды очень простое. Создаем файл скрипта с необходимыми параметрами и передаем этот файл для обработки команде REGINI.

ШАГ 1:

Открываем Блокнот (Notepad) и вписываем название необходимого ключа и ACL (Access Control List) используя вот такой вот формат:

Key_name [ACL]

Меняем Key_name на название нужного ключа, но смотрите, чтобы название ключа была корректным, как показано ниже:

Registrymachinesoftwareclasses (для ключей раздела HKEY_CLASSES_ROOT)

Registrymachine (для ключей раздела HKEY_LOCAL_MACHINE)

Registryuseruser_sid (для ключей раздела HKEY_CURRENT_USER) (замените user_sid на правильный Security ID этого пользователя)

Registryuser (для ключей раздела HKEY_USERS)

Для примера, давайте рассмотрим ключ «HKEY_LOCAL_MACHINESOFTWAREMozilla» и запишем скрипт:

RegistrymachineSOFTWAREMozilla

Заменяем ACL на те, которые нам необходимы list:

1 (to provide Administrators Full Access) Дать Администраторам полный доступ
2 (to provide Administrators Read Access) Дать Администраторам доступ только на чтение
3 (to provide Administrators Read and Write Access ) Дать Администраторам право на изменение
4 (to provide Administrators Read, Write and Delete Access) Дать Администраторам право на изменение и удаление
5 (to provide Creator/Owner Full Access) Дать Создателю/Владельцу полный доступ
6 (to provide Creator/Owner Read and Write Access) Дать Создателю/Владельцу доступ на изменение
7 (to provide Everyone Full Access) Дать Всем полный доступ
8 (to provide Everyone Read Access) Дать Всем доступ только на чтение
9 (to provide Everyone Read and Write Access) Дать Всем право на изменение
10 (to provide Everyone Read, Write and Delete Access) Дать Всем право на изменение и удаление
17 (to provide System Full Access) Дать Системе полный доступ
18 (to provide System Read and Write Access) Дать Системе право на изменение
19 (to provide System Read Access) Дать Системе доступ только на чтение

Сейчас [ACL] в скрипте будет установлен как-то так:

[1 6 9 17]

Как показано в таблице это даст полный доступ Администраторам и Системе, а также право на изменение создателю ключа и все остальным.

Окончательно строка будет выглядеть так:

RegistrymachineHKEY_LOCAL_MACHINESOFTWAREMozilla [1 6 9 17]

acl.txtВы можете использовать любые комбинации ACL как вам нужно.

Примечание: Помните, что существующие разрешения для указанного в скрипте ключа будут заменены на новые. Не забывайте включить в скрипт разрешения для всех аккаунтов. Если вы забудете дать права аккаунту СИСТЕМА, то этот аккаунт будет удален из списка предоставления доступа.

ШАГ 2:

Сохраняем скрипт под именем ACL.TXT затем открываем командную строку от имени администратора и запускаем нашу команду:

REGINI full_path_of_script_file

Или, в нашем случае, это будет выглядеть так

REGINI c:installacl.txt

REGINIИ все. Разрешения будут немедленно изменены.

Ну вот как-то так. Метод 1 наиболее эффективен и работает на все 100%.

Пример использования

Было необходимо запустить Remote Desktop Host, предоставить группе разработчиков совместный доступ к серверу для настройки определенных приложений и базы данных. В дальнейшем, предоставлять удаленный к доступ к этому серверу не планировалось. Разработчиков было более 2-х и все хотели работать одновременно. И клятвенно обещали закончить менее чем за 4 месяца.

Сказано-сделано. Был поднят Remote Desktop Host на Windows 2012 R2 и мы начали пользоваться 120-ти дневным бесплатным периодом. Но … 4 месяцев не хватило (как всегда). Использовать же легальный ключ для TS не хотелось, так как работа, временная, как я уже сказал ранее. Пришлось … воспользоваться знаниями, которые вы только что получили.

Ключ реестра, отвечающий за отсчет 120-ти дневного Grace Period расположен здесь:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerRCMGracePeriod

У группы Администраторы есть доступ только на чтение этого ключа.

Был использован Метод 1. Так сказать, Microsoft сами себя и наказали : )

SUBINACL /keyreg "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerRCMGracePeriod" /setowner=administrators /grant=administrators=f

Сменили владельца и дали полный доступ администраторам

Дальше проще.

Удаляем содержимое этого ключа

reg delete "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerRCMGracePeriod" /va /f

И после перезагрузки получаем …. Правильно! 120 дней нового бесплатного периода.

Например, можно эту команду оформить в виде скрипта и запускать каждые 115 дней по расписанию.

Пользоваться этим или нет – решать вам, на основании консультаций с вашей совестью и жабой 🙂

Windows 7
Как поменять владельца ключа или ветки реестра из командной строки