Рдп. Отключите Системные И Функциональные Клавиши. Windows 2008R2



Что требовалось В один прекрасный вечер возникла острая необходимость в дополнительной защите от «кривых» или «умышленных рук».

Так как основой нашей базы данных является MS ACCESS, то в ней есть несколько неприятных моментов, таких как использование горячих клавиш (удалить, распечатать и т.д.) и наш разработчик не потрудился их отключить.

Собственно, заниматься макросами Access и правами пользователей на их использование было некогда, а сама идея отключения всех функциональных клавиш на клавиатуре решала и сопутствующие проблемы встроенного управления типа «Веб-браузер» — запрет удаления файлов, созданных пользователем, запрет вызова справки и горячих клавиш в программах просмотра изображений и PDF. Дыру пришлось срочно залачивать и дождаться возвращения нашего разработчика из отпуска.



Предварительный анализ и план действий

Сразу пришло в голову решение — создать в реестре Scancode Map параметр по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout и прописать в нем все необходимые переназначения клавиш, но быстро выяснилось, что это не работает через RDP, и то же самое было применено полностью к системе, затрагивая привилегированных пользователей, которым было разрешено использовать горячие клавиши.

Тут я вспомнил Microsoft Keyboard Layout Creator, с помощью которого я редактировал раскладку клавиатуры домашнего компьютера, но увы, в новой версии не было добавлено работы с системными клавишами.

Изучив интернет, жизнеспособного и действенного решения не нашлось.

Оставалось одно – создать свой макет и добавить его в систему.

Для начала были изучены файлы KBDRU.dll и KBDUS.dll, после чего стало понятно, что самостоятельно за вечер разобраться будет крайне сложно.

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

Судя по отзывам, достойными программами оказались: KbdEdit и Keyboard Layout Manager 2000. И тут я нашел подсказку, что можно создать раскладку на виртуальной машине с помощью вышеперечисленных программ, а в качестве компилятора установочных файлов новой раскладки на сервере использовать Microsoft Keyboard Layout Creator.

Давай сделаем

Но не все оказалось так просто.

Изучив KbdEdit, у меня сразу возникли подозрения, что создаваемый им файл макета dll весит более 50КБ, а оригинал - 7КБ, а также, что макет не будет работать при отсутствии этой программы.

Файлы, созданные Keyboard Layout Manager, весили 9 КБ, что было вполне приемлемо.

Перейдем к настройке KLM2000, ничего сложного, создаем новую раскладку на основе существующей и выбираем редактирование, отключаем все ненужные системные и функциональные клавиши (в моем случае все, что выделено красным).

Единственное, с чем пришлось немного повозиться, так это с NUMPAD, чтобы эти (выделенные синим цветом) клавиши не несли системные функции, необходимо сделать некоторые переназначения: «0» не трогаем, «.

» выберите значение параметра Virtual Key - VK_OEM_PERIOD, "1" - неназначенный 0x89, "2" - 0x8A, "3" - 0x8B, "4" - 0x8C, "5" - 0x8D, "6" - 0x8E, " 7" — 0x8F, «8» — 0x92, «9» — 0x93. Сохраните «Экспорт» и нажмите «ОК» в системе.



РДП.
</p><p>
 Отключите системные и функциональные клавиши.
</p><p>
 Windows 2008R2



РДП.
</p><p>
 Отключите системные и функциональные клавиши.
</p><p>
 Windows 2008R2

Далее открываем Microsoft Keyboard Layout Creator, выбираем эту раскладку, пытаемся сохранить и видим ошибку.

К сожалению, MKLC не пропускает раскладки с отключенными системными клавишами.

Затем копируем созданные KLM2000 dll из папок Windows\System32 и Windows\SysWOW64, а на другой машине с помощью MKLC создаем установочные файлы на основе стандартной раскладки, а в свойствах указываем имя раскладки, которую мы указали при мы создали макет с помощью KLM2000. Далее устанавливаем на сервер раскладку клавиатуры, созданную с помощью MKLC, и копируем dll-файлы, созданные KLM2000, в соответствующие папки Windows\System32 и Windows\SysWOW64 на сервере.



Важный

Для корректной работы, а это обязательно, для одного языка должна быть только одна раскладка клавиатуры.

Не забывайте про параметр реестра IgnoreRemoteKeyboardLayout, чтобы макет клиента не зависал.

Давайте перезагрузимся.



Добавление

Если ко всему этому добавить следующие изменения для конкретного пользователя в реестре:
  • отключить «Drag and Drop» («DragHeight» и «DragWidth»)
  • отключить контекстное меню в Проводнике («NoViewContextMenu» и «NoTrayContextMenu»)
  • настроить открытие файлов одним щелчком мыши
- тогда мы получаем, что пользователь из-под Встроенного управления типа «Веб-браузер» в MS Access не сможет переименовывать, копировать, удалять или перемещать файлы, даже те, которые созданы MS ACCESS под его учетной записью.

(создает файлы ACCESS по следующей процедуре, сначала в папке назначения создается временный файл, а затем переименовывается в конечный, поэтому запрет на изменение групповых политик здесь не подходит).



Заключение

Пришлось немного поэкспериментировать и потратить на это целый вечер, но я надеюсь, что эта статья будет кому-то полезна в плане экономии времени, ведь каждый лишний час для нас бесценен.

В целом задача очень быстрого патча решилась, без установки каких-либо сторонних программ на сервер, что хорошо.

Теги: #Системное администрирование #Администрирование сервера #RDP #раскладка клавиатуры #раскладка клавиатуры #Системные клавиши #Функциональные клавиши #Microsoft Keyboard Layout Creator #2008R2

Вместе с данным постом часто просматривают: