Как поменять владельца ключа или ветки реестра из командной строки
Иногда, чтобы поменять что-то в реестре (выполнить твик или просто внести нужное вам изменение) в первую очередь требуется получить доступ к ветке/ключу реестра. Казалось бы, для администратора это не проблема. Но нюанс в том, что в некоторые ветки реестра 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.
Но никто не мешает вам просто распаковать 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
Примечание. В английской версии 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 имеет много параметров, но об этом почитайте самостоятельно здесь (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 как вам нужно.
Примечание: Помните, что существующие разрешения для указанного в скрипте ключа будут заменены на новые. Не забывайте включить в скрипт разрешения для всех аккаунтов. Если вы забудете дать права аккаунту СИСТЕМА, то этот аккаунт будет удален из списка предоставления доступа.
ШАГ 2:
Сохраняем скрипт под именем ACL.TXT затем открываем командную строку от имени администратора и запускаем нашу команду:
REGINI full_path_of_script_file
Или, в нашем случае, это будет выглядеть так
REGINI c:installacl.txt
И все. Разрешения будут немедленно изменены.
Ну вот как-то так. Метод 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
Как поменять владельца ключа или ветки реестра из командной строки