Windows Server 2012 R2: Делегирование полномочий пользователю для управления терминальным сервером

Windows Server 2012 R2: Делегирование полномочий пользователю для управления терминальным сервером

Задача, которая в Windows Server 2008 R2 решалась несколькими кликами мышки, в Windows Server 2012 R2 стала несколько нетривиальна, а именно:
предоставить права пользователю для отправки сообщений, сброса подвисших терминальных сессий и т.д., не давая ему административных прав на сервере и в домене. Windows Server 2008 R2 все эти настройки производились во вкладке "Безопасность" свойств подключения "RDP-Tcp" консоли "Конфигурация узла сеансов удаленных рабочих столов". В Windows Server 2012 R2 такой консоли нет, соответственно подход к настройке делегирования полномочий видоизменился. С использованием PowerShell и поставщика инструментария управления Windows (WMI) служб удаленных рабочих столов Windows Server 2012 R2 будет решена эта типовая задача. 

Итак,
Первым делом необходимо создать новую группу, локальную на сервере, либо в домене, в которую будут входить пользователи с делегированными полномочиями. 
На каждом сервере с ролью Узла сеансов удаленных рабочих столов(RDSH) необходимо выполнить следующую команду:


для локальной группы на сервере
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName ="RDP-Tcp") CALL AddAccount "ServerName\Group",2
для доменной группы
wmic
/namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName ="RDP-Tcp") CALL AddAccount "Domain\Group",2

где, ServerName - имя Вашего сервера, Domain - имя Вашего домена, Group - имя локальной или доменной группы 

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

 

Разрешение Возможности Permission Capability Value Meaning
Запрос сведений Запрос сведений о сеансах и серверах Узел сеансов удаленных рабочих столов Query
Information
Query sessions and RD Session Host servers for information WINSTATION_QUERY
0
Permission to query information about a session.
Установка сведений Настройка свойств подключения Set Information Configure properties of the connection WINSTATION_SET
1
Permission to modify connection parameters.
Удаленное управление Просмотр или активное управление сеансом другого пользователя Remote Control View or actively control another user's session WINSTATION_SHADOW
4
Permission to shadow or remotely control another user's session.
«Вход» Вход в сеанс на сервере Узел сеансов удаленных рабочих столов Logon Log on to a session on the RD Session Host server WINSTATION_LOGON
5
Permission to log on to a session on the server.
Выход из системы Выход пользователя из сеанса Logoff Log off a user from a session WINSTATION_LOGOFF
2
Permission to log off a user from a session.
Сообщение Отправка сообщения сеансу пользователя Message  Send a message to a user session WINSTATION_MSG
7
Permission to send a message to another user's session.
Подключение Подключение к сеансу другого пользователя Connect Connect to another user session WINSTATION_CONNECT
8
Permission to connect to another session.
Отключение Отключение сеанса пользователя Disconnect Disconnect a user session WINSTATION_DISCONNECT
9
Permission to disconnect a session.
Виртуальные каналы Использование в сеансе виртуального канала, обеспечивающего перенаправление локальных устройств и ресурсов Virtual Channels Use a virtual channel in a session, which provides local device and resource redirection WINSTATION_VIRTUAL | STANDARD_RIGHTS_REQUIRED
3
Permission to use virtual channels. Virtual channels provide access from a server program to client devices.
        WINSTATION_RESET
6
Permission to reset or end a session or connection. Windows Server 2003:  This value is not supported.

 

Если необходимо удалить данную группу с сервера, выполните следующие команды в PowerShell:

для локальной группы на сервере
$obj = @(gwmi -Namespace Root\CIMv2\TerminalServices -query
"select * from Win32_TSAccount where
TerminalName='RDP-TCP' AND
AccountName='ServerName\\Group'")

$obj.Delete()

для доменной группы
$obj = @(gwmi -Namespace Root\CIMv2\TerminalServices -query "select * from Win32_TSAccount where
TerminalName='RDP-TCP' AND AccountName='Domain\\Group'"
)

$obj
.Delete()


Для тех, кто считает данное количество полномочий избыточным и неоправданным с точки зрения безопасности, остальная часть статьи. 
Колонки "Value" и "Meaning" для Вас.

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

запретить отправку сообщений
$obj
= @(gwmi -Namespace Root\CIMv2\TerminalServices -query
"select * from Win32_TSAccount where
TerminalName='RDP-TCP' AND AccountName='Domain\\Group'"
)

$obj.ModifyPermissions(7,0)
в методе ModifyPermissions  используется значение 7, которое предоставляет право отправки соообщений, значение 0 - запрещает это действие 

запретить теневое подключение
$obj
= @(gwmi -Namespace Root\CIMv2\TerminalServices -query "select * from Win32_TSAccount where
TerminalName='RDP-TCP' AND AccountName='Domain\\Group'"
)

$obj.ModifyPermissions(4,0)
в методе ModifyPermissions  используется значение 4, которое предоставляет право теневого подключения, значение 0 - запрещает это действие. 

Аналогичным образом, можно запретить остальные действия.

Если необходимо разрешить ранее запрещенную операцию, необходимо в методе ModifyPermissions  установить значение равное 1.   

разрешить теневое подключение
$obj = @(gwmi -Namespace Root\CIMv2\TerminalServices -query
"select * from Win32_TSAccount where
TerminalName='RDP-TCP' AND AccountName='Domain\\Group'"
)

$obj.ModifyPermissions(4,1)


В заметке использованы материалы библиотеки MSDN, где можно ознакомиться с описанием классов Win32_TSAccount class, Win32_TSPermissionsSetting class
 и их методами, и библиотеки TechNet - Настройка разрешений для подключений к службам удаленных рабочих столов

Сортировать по: Дата публикации | Последние | Самый полезный
Комментарии
  • Не, не дает подключиться к сеансу. Грит политики не позволяют.

  • не работают команды на 2012R2

    $obj = @(gwmi -Namespace Root\CIMv2\TerminalServices -query "select * from Win32_TSAccount where

    TerminalName='RDP-TCP' AND AccountName='Domain\\Group'")

    $obj.ModifyPermissions(7,1)

    PowerShell выдает ощибку

    Сбой вызова метода из-за отсутствия в [System.Object[]] метода с именем "ModifyPermissions".

    строка:4 знак:1

    + $obj.ModifyPermissions(7,1)

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~

       + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

       + FullyQualifiedErrorId : MethodNotFound

  • не работают команды на 2012R2

    $obj = @(gwmi -Namespace Root\CIMv2\TerminalServices -query "select * from Win32_TSAccount where

    TerminalName='RDP-TCP' AND AccountName='Domain\\Group'")

    $obj.ModifyPermissions(7,1)

    PowerShell выдает ощибку

    Сбой вызова метода из-за отсутствия в [System.Object[]] метода с именем "ModifyPermissions".

    строка:4 знак:1

    + $obj.ModifyPermissions(7,1)

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~

       + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

       + FullyQualifiedErrorId : MethodNotFound

  • Не работает.

    В PS выдает ошибку, ругается на TerminalName. Команду вводил через командную строку. После ввода ребутал сервер, также не помогло.

  • Все работает, команды надо выполнять в CMD от администратора, автору огромное спасибо за статью.

  • Я долго и упорно пытался сделать, как в статье, и в итоге пришёл к такому варианту (не без помощи гугления и чтения других статей):

    1. В cmd от имени администратора выполняем первую команду.

    2. В powershell выполняем вторую, но в следующем виде:

    (Get-WmiObject Win32_TSAccount -Namespace root\CIMV2\TerminalServices -Filter "TerminalName='RDP-Tcp' AND Accountname='domain\\user'").ModifyPermissions(X,1)

    Разумеется, в фильтр можно что угодно поставить, в том числе и вовсе без него (только эффект вряд ли будет). Ну и вместо X - нужный номер параметра, который хотите разрешить.

Страница 1 из 1 (элементов: 6)