Pull to refresh

Информатизация вуза. Терминальный сервер. Настройка пользовательского интерфейса. GPO

Level of difficultyMedium
Reading time7 min
Views5.6K

Конечно терминальный сервер применяется не только в вузах, но так как я начал писать статьи про информатизацию в вузах, хочу отметить что я видел: очень часто из терминального сервера делают настолько уникальный сервер с кучей ролей и возможностей, что при его падении останавливаются все бизнес-процессы организации... И что удивляет каждый раз: что данный подход настолько сложно сломать и люди продолжают наступать на одни и те же грабли.

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

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

  • Клиент 1с или другого приложения – по тематике работы пользователей

  • Набор офисных программ.

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

Давайте пойдем от принципа единственной ответственности и пусть RDS обладает лишь функцией запуска приложений. Поэтому хранение файлов на терминальном сервере необходимо запретить – для хранения файлов существует dfs или просто расшаренная папка. При таком подходе мы минимизируем проблему, которая возникает при исчезновении свободного места на диске, но все же еще остается риск что это произойдет.

Почему нельзя хранить файлы на терминальном сервере, потому как это убирает гибкость из вашей инфраструктуры, и если терминальный сервер сломается, то вы потратите много времени на перенос информации с одного сервера на другой. Замена терминального сервера должна происходить незаметно для пользователя – поэтому лучше использовать ферму, в которую входит как минимум два сервера: один вывели из работы, а другой работает… Ну и терминальный сервер должен быть виртуальной машиной…

Для запрета хранения файлов на терминальном сервере необходимо:

  • Отключить отображение всех локальных дисков и запретить к ним доступ (для пользователей)

  • Отключить отображение всех элементов рабочего стола

  • Создать набор ярлыков необходимого ПО в панели задач

Для реализации этих пунктов применим групповую политику, только не локальную, а доменную – это упростит и ускорит настройку новых серверов в разы.

Будем отталкиваться от того, что терминальный сервер со всем ПО у нас уже установлен (это тоже можно автоматизировать, но это уже другая история).

На контроллере домена создаем объект групповой политики через оснастку «Управление групповой политикой» и редактируем его.

Отключаем рабочий стол:

Конфигурация пользователя – Административные шаблоны – Рабочий стол – Рабочий стол: Отключить все элементы

Конфигурация пользователя – Административные шаблоны – Рабочий стол: Скрыть и отключить все элементы рабочего стола

Скрываем диски:

Конфигурация пользователя - Административные шаблоны - Компоненты Windows - Проводник Windows: Скрыть указанные диски

Запрещаем доступ к локальным дискам:

Конфигурация пользователя - Административные шаблоны - Компоненты Windows - Проводник Windows: Запретить доступ к дискам через Мой компьютер - этот параметр политики не запрещает пользователям использовать другие программы для доступа к локальным и сетевым дискам. Он также не запрещает использовать оснастку «Управление дисками» для просмотра и изменения характеристик дисков. Поэтому все ПО, которое пишет в temp или в профиль пользователя должно работать…

Можно отключить известные папки, но через групповые политики у меня это не получилось – видимо необходимо это делать через реестр: политика «Отключить известные папки» не заработала – видимо она применяется после того как профиль пользователя создан и уже созданы известные папки… кто в теме поясните в комментариях.

Настройка фильтрации политики:

Так как данная политика применяется к пользователю и должна выполняться только на терминальных серверах то необходимо настроить фильтрацию:

На вкладке область в фильтрах безопасности удалить группу «Прошедшие проверку» так как эта группа включает все компьютеры и всех пользователей.

Добавить группу пользователей и учетки серверов где эту политику необходимо применить.

Политику считывает компьютер поэтому, если учетки компьютера нет в фильтре, то она не применяется.

Эти же группы должны быть и на вкладке делегирование (с этой вкладкой будьте осторожны!!!).

НО!!!! Скрывать диски нужно только пользователям, а администраторам это незачем, поэтому во вкладке «Делегирование нажимаем «Дополнительно» и на группе «Администраторы домена» ставим галку «Запретить» напротив «Применить
групповую политику»:

Есть другой путь фильтрации - на вкладке «Область» – применить WMI-фильтр – он из себя представляет запрос, но, чтобы его применить его надо сначала создать в оснастке "Управление групповой политикой" в подразделении "Фильтры WMI".

Поэтому можно в фильтрах безопасности и во вкладке «Делегирование» оставить группу «Прошедшие проверку», а ниже добавить WMI-фильтр, например, такого содержимого:

SELECT * FROM Win32_ComputerSystem WHERE Name='server-01' OR Name='server-02'

Но я бы применял и Secure и WMI фильтры.

Создания списка ПО в панели задач

Теперь попробуем создать групповую политику для создания списка ярлыков необходимых программ в панели задач и меню пуск. Для этого сначала разместим все необходимые ярлыки на начальном экране и затем выполним такую команду:

Export-StartLayout -path c:\ps\StartLayout.xml

В полученном файле содержится информация о ярлыках в формате xml. Теперь немного подредактируем его и добавим список программ на панель задач. Для этого после </DefaultLayoutOverride> добавим следующее:

  <CustomTaskbarLayoutCollection PinListPlacement="Replace" xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="C:\Program Files\1cv8\common\1cestart.exe" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Excel 2016.lnk" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Word 2016.lnk" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\System Tools\File Explorer.lnk" />
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>

Затем можно проверить получившийся файл командой:

Import-StartLayout -LayoutPath c:\ps\StartLayout.xml  -MountPath c:\

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

Для начала положим получившийся xml в расшаренную папку и дадим разрешение всем только на чтение.

Теперь создадим политику:

"Конфигурация пользователя", "Административные шаблоны", "Компоненты Windows", “Меню ПУСК и панель задач”: Макет начального экрана – и в поле «Файл макета начального экрана» прописываем путь до xml: \\server\share\ StartLayout.xml

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

Применяем к политику к соответствующему подразделению и добавляем фильтр.

В результате мы получим интерфейс, который направит пользователя в нужное русло….

Но так как на сервере будет создаваться много учетных записей пользователей и из-за этого будет исчезать свободное место на диске, то необходимо удалять хотя бы неактивные учетки – для этого создадим групповую политику:

Конфигурация компьютера - Административные шаблоны - Система - Профили пользователей: Удалять при перезагрузке системы профили пользователей по истечении указанного числа дней.

Теперь давайте собственно создадим политику для ежедневной перезагрузки сервера:

Конфигурация компьютера  - Настройка – Параметры панели управления – Назначенные задания:

Создаем задание:

Настраиваем расписание и создаем действие:

Обратите внимание, так как задание создаем в ветке Конфигурация компьютера, то в задании указываем пользователя: NT AUTHORITY\SYSTEM – но будьте осторожны, у системы большие привилегии, поэтому предварительно проверяйте ваши скрипты. Я пытался запускать это задание из-под пользователя, но оно не выполнялось по какой-то причине – но здесь я могу быть не прав и скорее всего все нормально запускается и из-под пользователя – поправьте в комментариях пожалуйста.

Мы вроде бы запретили пользователям использовать диск C, но политики не запрещают использовать диск программам, и, например, 1с может накешировать очень много, поэтому я использую скрипт, который удаляет большие профили – запуск скрипта в то время, когда нет пользователей на сервере и запуск аналогично заданию на перезагрузку - создадим политику для ежедневного удаление больших профилей пользователей:

Конфигурация компьютера  - Настройка – Параметры панели управления – Назначенные задания:

Создаем задание

Настраиваем расписание, а потом настраиваем действие:

И не забываем настроить фильтры для групповой политики.

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

$h = hostname
#профили этих пользователей лучше не удалять
$NotDeletedUsers=@('All Users', 'Admin-01', 'VredniyBuh', 'Default', 'Все пользователи')
$sum=0
gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length/1MB }
#write "$_.BaseName : $len" | out-file \\storage\logs\deUsers.txt -append
if($len -gt 400){
    $user=$_.BaseName
        if($_.BaseName -NotIn $NotDeletedUsers ){
            Write "$h $(get-date -format "dd.MM.yy.HH.mm.ss") Будем удалять профиль пользователя $user : $len"  | out-file \\storage\logs\deUsers.txt -append
            Write "__________________  $user  ______________________________" | out-file \\storage\logs\deUsers.txt -append
            Get-CimInstance -Class Win32_UserProfile | Where-Object { $_.LocalPath.split('\')[-1] -eq $user } | Remove-CimInstance
        }

}else {$sum = $sum + $len}

}
“Общий размер профилей”,'{0:N2} GB' -f ($sum) | out-file \\storage\logs\deUsers.txt -append

После создания политик – необходимо зайти на сервера и выполнить gpupdate /force

Чтобы посмотреть применение политик gpresult /r, gpresult /r /scope:computer

Теперь, благодаря доменным политикам новый терминальный сервер можно настроить в два клика

Если есть что добавить напишите пожалуйста в комментариях.

Tags:
Hubs:
Total votes 5: ↑5 and ↓0+5
Comments13

Articles