Шукати:
Файл ответов Autounattend для Server 2016

Чтобы подготовить файл ответов Autounattend.xml для цели формирования собственного образа Windows Server 2016 Standard из скачанного с Microsoft Volume License Service оригинального образа: SW_DVD9_Win_Server_STD_CORE_2016_64Bit_English_-4_DC_STD_MLF_X21-70526.ISO[wbcr_html_snippet]: PHP snippets error (not passed the snippet ID)

Нужно, опираясь на ранее опубликованную заметку, где я показал шаги, как сделать файл ответов для Windows Server 2012 R2 Std English пройтись по ней изменяя только используемый образ – все шаги одинаковы. Или же взять файл ответов Autounattend.xml от Server 2012 R2 и сохранить как Autounattend.xml в каталог C:\isoproject

На заметку: Все дальнейшие действия выполняются из-под Windows 10 Pro с правами локального администратора системы с применением установленного пакета Windows ADK.

Шаг №1: Опять извлекаю информацию по индексам какие редакции можно установить из распакованного образа:

1C:\WINDOWS\system32>dism /get-wiminfo /wimfile:c:\isoproject\sources\install.wim
  • Индекс 1: Windows Server 2016 Standard
  • Индекс 2: Windows Server 2016 Standard (Desktop Experience)
  • Индекс 3: Windows Server 2016 Datacenter
  • Индекс 4: Windows Server 2016 Datacenter (Desktop Experience)

Т.к. мне нужно только Desktop редакция то извлекаю во временную директорию данный индекс и после замещаю оригинальный:

1234567891011121314151617181920212223C:\WINDOWS\system32>dism /export-image /sourceimagefile:c:\isoproject\sources\install.wim /sourceindex:2 /destinationimagefile:c:\windows\temp\install.wim /compress:max /checkintegrity C:\WINDOWS\system32>copy /Y c:\windows\temp\install.wim c:\isoproject\sources\install.wim C:\WINDOWS\system32>del c:\windows\temp\install.wim C:\WINDOWS\system32>dism /get-wiminfo /wimfile:c:\isoproject\sources\install.wim Cистема DISM Версия: 10.0.17134.1 Сведения об образе : c:\isoproject\sources\install.wim Индекс: 1 Имя : Windows Server 2016 Standard (Desktop Experience) Описание : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation. All server roles and features are supported. For more details see “Windows Server Installation Options.” Размер (байт): 15 560 241 110 Операция успешно завершена.

На заметку: А можно и не делать все выше, а использовать в файл ответов Autounattend.xml

  • /IMAGE/NAME = Windows Server 2016 Standard (Desktop Experience)
  • /IMAGE/INDEX = это то-что я использую
  • /IMAGE/DESCRIPTION

Шаг №2: Затем через редактор Notepadd++ открыть c:\isoproject\Autounattend.xml и внести следующие изменения:

Была строка:

1<cpi:offlineImage cpi:source=”wim:c:/isoproject/sources/install.wim#Windows Server 2012 R2 SERVERSTANDARD” xmlns:cpi=”urn:schemas-microsoft-com:cpi” />

Изменил на:

1<cpi:offlineImage cpi:source=”wim:c:/isoproject/sources/install.wim#Windows Server 2016 SERVERSTANDARD” xmlns:cpi=”urn:schemas-microsoft-com:cpi” />

После не забываем сохранить внесенные изменения.

Шаг №3: Формирую образ:

Win -> Windows Kits – через правый клик на «Среда средств развертывания и работы с образами» выбираю «Дополнительно» — «Запуск от имени администратора»

1C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>oscdimg -u2 -m -o -lWin2016Std -b”c:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg\etfsboot.com” c:\isoproject c:\Win2016Std.iso

Шаг №4: Проверяю на тестовом окружении: QEMU+KVMESXi, Virtualbox, сейчас уже использую Proxmox как установится система из сформированного образа Шаг №3. Итого, система установилась. По сути получается, что я могу для Windows Server 2012 R2 Std подготовить файл ответов + предопределенные нюансы настройки на продуктивное использование и их же применить к общей базе системы Windows Server 2016 Std.

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

Очищаем winsxs каталог на Windows 10

Мое рабочее место (ОС: Windows 10 Pro (10.0.17134.950)), как системного администратора третьей линии поддержки включает в себя рабочее место под управлением:

  • Мини компьютера (Dell Optiplex 3040 Micro i3 6100T (3.2)/8Gb/SSD:SK Hynix SC308 SATA 128GB)
  • и двух мониторов Dell.

И вот приходится то одно удалить, то другое заархивировать, но нужно ведь держать систему в порядке, а потому:

В виду того факта что место на диске C: системы Windows 10 Pro почему-то стало заканчиваться была предпринята попытка через утилиту TreeSize Professional проанализировать куда израсходовалось. Анализ показал…

  • C:\ -> 76 557,7 Mb
  • C:\Soft\ -> 28397,5 Mb -> мои наработки, софт, скрипты
  • C:\Windows\WinSxS -> целых 10Gb -> вот этим каталогом и займусь в этой заметке.

Возник вопрос, если обновления установлены, так почему же каталог отбирает столько места. По-другому и сказать нельзя без эмоций. А нет, документация от Майкрософт показала, что я немного ошибся: WinSxS-> хранит резервные копии системных файлов/компонентов ОС до обновлений. Вы ставите обновления и в папку сохраняются изменения о файлах чтобы если что была возможность их удалить и отменить установленные обновления.

Ладно, перехожу к практике:

Вариант №1: В ручную через запуск утилиты cleanmgr.exe (Очистка диска) -> Очистить системные файлы – и отмечаем галочкой «Очистка обновлений Windows». Будет активирована задача.

Вариант №2: В системе есть дефолтная задача которая якобы выполняет «Очистку обновлений Windows” с указанной вами периодичностью, у меня она почему-то не отрабатывает. Так что я данный вариант не использую, мне проще командами – так я знаю, что заложенное действие в команду отработает.

Win + X > Командная строка (администратор)

Вариант №3:

Инициализирую анализ каталога WinSxS, каков его объем, фактический размер и когда он последний раз очищался:

1234567891011121314151617181920212223242526272829C:\WINDOWS\system32>dism.exe /online /Cleanup-Image /AnalyzeComponentStore Cистема DISM Версия: 10.0.17134.1 Версия образа: 10.0.17134.950 [===========================99.3%========================= ] Сведения хранилища компонентов (WinSxS): Размер хранилища компонентов по данным проводника : 8.39 GB Фактический размер хранилища компонентов : 8.05 GB     Совместно с Windows : 4.51 GB     Резервные копии и отключенные компоненты : 3.25 GB     Кэш и временные данные : 278.22 MB Дата последней очистки : 2019-08-16 05:14:31 Число освобождаемых пакетов : 1 Рекомендуется очистка хранилища компонентов : Да Операция успешно завершена.

Вариант №4: Запускаю очистку папки WinSxS (замечу, что данная команда выполняется долго):

123456789101112131415C:\WINDOWS\system32>dism.exe /online /Cleanup-Image /StartComponentCleanup Cистема DISM Версия: 10.0.17134.1 Версия образа: 10.0.17134.950 [=====                      9.8%                           ] [==========================100.0%==========================] Операция успешно завершена. C:\WINDOWS\system32>

После проделанных команды из указанных выше вариантов, см. размер каталога c:\windows\winsxs\  по данным свойств каталога:

  • Размер: 6,76Gb
  • На диске: 5,18Gb

А применяя «Вариант №3»:

1234567891011121314151617181920212223242526272829C:\WINDOWS\system32>dism.exe /online /Cleanup-Image /AnalyzeComponentStore Cистема DISM Версия: 10.0.17134.1 Версия образа: 10.0.17134.950 [==========================100.0%==========================] Сведения хранилища компонентов (WinSxS): Размер хранилища компонентов по данным проводника : 5.46 GB Фактический размер хранилища компонентов : 5.37 GB     Совместно с Windows : 4.48 GB     Резервные копии и отключенные компоненты : 611.73 MB     Кэш и временные данные : 278.22 MB Дата последней очистки : 2019-08-21 11:16:05 Число освобождаемых пакетов : 0 Рекомендуется очистка хранилища компонентов : Нет Операция успешно завершена.

Подвожу итог оформив вывод в виде таблицы:

ДоПосле
Версия: 10.0.17134.1Версия: 10.0.17134.1
Версия образа: 10.0.17134.950Версия образа: 10.0.17134.950
Размер хранилища компонентов по данным проводника: 8.39GbРазмер хранилища компонентов по данным проводника:5.46Gb
Фактический размер хранилища компонентов: 8.05GbФактический размер хранилища компонентов:5.37Gb
Совместно с Windows: 4.51GbСовместно с Windows: 4.48Mb
Резервные копии и отключенные компоненты: 3.25GbРезервные копии и отключенные компоненты: 611.73Mb
Кэш и временные данные: 278.22MbКэш и временные данные: 278.22Mb

Вижу данные поменялись в меньшую сторону, значит что-то работало, а изначально было:

  • До: C:\Windows\WinSxS -> целых 10Gb
  • После: C:\Windows\WinSxS -> целых 6,76Gb

Итог сэкономлены 4Gb, не существенно, конечно, но как вариант.

Вывод: Если уж рабочих диск мал, то можно и заниматься чисткой, а так в текущее время больших объемов HDD/SDD заниматься такой ерундой не заслуживает потраченного времени вручную, автоматизировать – «Да». На этом я прощаюсь, с уважением Олло Александр aka ekzorchik.

Как сделать бекап/восстановление Print Server on Server 2016

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

У меня TS (Terminal Server – Терминальный сервер):

  • OS: Windows Server 2016 Standard
  • Role: Remote Desktop + Print Server

Чтобы сделать бекап настроек Print Server нужно:

Шаг №1: Авторизоваться на системе с правами администратора.

Шаг №2: Открыть оснастку Print Manager и действия по бекапированию настроек принтеров:

Win + X – Control Panel – View by: Category -> Small icons – Administrative Tools – Print Manager – и через правый клик мышью на текущем хосте, у меня он srv-ts2(local) выбрать “Export printers to a file…” в появившемся окне “Print Migration” будет сперва представлено какие драйвера принтеров будут экспортированы в файл, нажимаем Next – указываем место сохранения в файловой системе, к примеру:

Export printer data to: c:\1\srv_ts_local_print_backup

И нажимаем Save к указанному именованию добавится расширение:

1C:\1\srv_ts_local_print_backup.printerExport

Нажимаем Next и начинается процесс экспорта.

И нажимаю Finish для выхода из мастера.

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

Если все сделано правильно, то Вы должны видеть сообщение: Export complete. The operation completed with no errors.

Printbrm.exe

По логам в оснастке Event Viewer (local) – Applications and Services Logs – Microsoft – Windows – PrintBRM - Admin значатся сообщения:

  • Event ID: 1
  • Source: PrintBRM
  • Description: Printbrm.exe (the Printer Migration Wizard or the command-line tool) is beginning a backup of print queues. No user action is required.
  • Event ID: 33
  • Source: PrintBRM
  • Description: Printbrm.exe (the Printer Migration Wizard or the command-line tool) is backing up printer forms. No user action is required.

Что из себя представляем экспортированный файл с описание/драйверами для всех установленных драйверов принт сервера:

123ekzorchik@ADM-19:/mnt/c/test$ file srv_ts_local_print_backup.printerExport srv_ts_local_print_backup.printerExport: Zip archive data, at least v4.5 to extract

если щелкнуть по нему левой кнопкой мыши, к примеру в Windows 10 Pro (Version 10.0.17134.950), то запуститься оснастка «Перенос принтеров» где будет указано какие объекты можно импортировать. А если открыть через архиватор 7zip, то в данном архиве присутствует:

  •     Каталог Drivers – драйвера на принтера
  •     Каталог Printers – принтера
  •     И xml файлы: портов, форм и т.д

Т.е. по-сути все что есть в оснастке Print Manager раздела Print Servers – srv-ts2 (local): Drivers, Forms, Ports, Printers.

Шаг №3: Открыть оснастку Print Manager и действия по восстановлению настроек принтеров:

Win + X – Control Panel – View by: Category -> Small icons – Administrative Tools – Print Manager

и через правый клик мышью на текущем хосте, у меня он srv-ts2(local) выбрать “Import printers from a file…”, указать путь до файла (с:\test\srv_ts_local_print_backup.printerExport) сделанного через экспорт и следовать указаниям мастера.

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

Очистить КЭШ на терминальных серверах

Порой политика не отрабатывает, а по мере того, как она допиливается, приходят заявки вида:

Описание: Очистить КЭШ 1С  на терминальных серверах:
TS1 ; TS2 ; TS4 ; TS9 ; TS10 ; TS11 ; TS12
Login: alektest
При необходимости, можно завершить процесс 1cv8.exe пользователя на терминальном сервере.

и чтобы не обходить каждый сервер, либо заходя на него через mstsc /v: или Win + E и через строку адреса указываю путь где хранится кэш  удалять GUID каталог формируемый при инициализации подключения к  базе я по быстрому наваял небольшой batch скрипт который я запускаю находясь в консоли командной строки на своей рабочей системе под управлением Windows 10 Pro (она в домене, как и терминальные сервера).[wbcr_html_snippet]: PHP snippets error (not passed the snippet ID)

Мой скрипт выполняющий заявку:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100echo offrem Author Ollo Alexander aka ekzorchikrem 19.08.2019 11:52rem Work!!! setlocal enabledelayedexpansionrem кода достигнут конец файла выполняется endlocal, все из-за строчки вышеset /p name=[Name TS User:]set host1=ts1.polygon.localset host2=ts2.polygon.localset host4=ts4.polygon.localset host9=ts9.polygon.localset host10=ts10.polygon.localset host11=ts11.polygon.localset host12=ts12.polygon.local rem TS1echo TS1rem clear var userid1set userid1=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host1%’) do set userid1=%%i && echo %userid1%echo y | logoff %userid1% /server:%host1% /VMecho %userid1%rem clear var userid1set userid1=rmdir /S /Q \\%host1%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host1%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS2echo TS2rem clear var userid2set userid2=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host2%’) do set userid2=%%i && echo %userid2%echo y | logoff %userid2% /server:%host2% /VMecho %userid2%rem clear var userid2set userid2=rmdir /S /Q \\%host2%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host2%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS4echo TS4rem clear var userid4set userid4=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host4%’) do set userid4=%%i && echo %userid4%echo y | logoff %userid4% /server:%host4% /VMecho %userid4%rem clear var userid4set userid4=rmdir /S /Q \\%host4%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host4%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS9echo TS9rem clear var userid9set userid9=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host9%’) do set userid9=%%i && echo %userid9%echo y | logoff %userid9% /server:%host9% /VMecho %userid9%rem clear var userid9set userid9=rmdir /S /Q \\%host9%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host9%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS10echo TS10rem clear var userid10set userid10=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host10%’) do set userid10=%%i && echo %userid10%echo y | logoff %userid10% /server:%host10% /VMecho %userid10%rem clear var userid10set userid10=rmdir /S /Q \\%host10%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host10%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS11echo TS11rem clear var userid11set userid11=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host11%’) do set userid11=%%i && echo %userid11%echo y | logoff %userid11% /server:%host11% /VMecho %userid11%rem clear var userid11set userid11=rmdir /S /Q \\%host11%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host11%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49 rem TS12echo TS12rem clear var userid12set userid12=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host12%’) do set userid12=%%i && echo %userid12%echo y | logoff %userid12% /server:%host12% /VMecho %userid12%rem clear var userid12set userid12=rmdir /S /Q \\%host12%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host12%\c$\Users\%name%\AppData\Roaming\1C\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49pause

Сохраняю его (Скрипт) в каталог со скриптами на рабочей станции: «c:\Script\tips_ts_clear_cache_v1.bat»

Запускаю его когда приходит очередная заявка:

Win + R -> cd /d c:\Script

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647c:\Script>tips_ts_clear_v1.bat c:\Script>echo off[Name TS User:]alektestTS1Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS2Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS4Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS9Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS10Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS11Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.TS12Не существуют сеансы для alektestЕсли указано имя сервера, нужно указать код сеанса или имя сеанса.Режим вывода команд на экран (ECHO) отключен.Не удается найти указанный файл.Не удается найти указанный файл.Для продолжения нажмите любую клавишу . . .

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

123456TS11Режим вывода команд на экран (ECHO) отключен.Будет выполнен выход alektest (сеанс 1277) из системы ,продолжить (n=нет)?1277Не удается найти указанный файл.Не удается найти указанный файл.

От 18.11.2019 — Выкладываю свой скрипт выполняющий задачу очистки кеша

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141echo offrem Author Ollo Alexander aka ekzorchikrem 18.11.2019 11:52rem Work!!! setlocal enabledelayedexpansionrem кода достигнут конец файла выполняется endlocal, все из-за строчки вышеset /p name=[Name TS User:]dsquery user -samid %name%set host1=ts1.polygon.localset host2=ts2.polygon.localset host9=ts9.polygon.localset host10=ts10.polygon.localset host11=ts11.polygon.localset host12=ts12.polygon.localset host13=u2-ts13.polygon.localset host14=u2-ts14.polygon.localset host15=u2-ts15.polygon.local  rem TS1echo TS1rem clear var userid1set userid1=rem skip=1 – пропустить первую строкуrem tokens=3 – перейти на третью колонкуfor /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host1%’) do set userid1=%%i && echo %userid1%echo y | logoff %userid1% /server:%host1% /VMecho %userid1%rem clear var userid1set userid1=rmdir /S /Q \\%host1%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host1%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host1%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS2echo TS2rem clear var userid2set userid2=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host2%’) do set userid2=%%i && echo %userid2%echo y | logoff %userid2% /server:%host2% /VMecho %userid2%rem clear var userid2set userid2=rmdir /S /Q \\%host2%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host2%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host2%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS9rem clear var userid9echo TS9set userid9=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host9%’) do set userid9=%%i && echo %userid9%echo y | logoff %userid9% /server:%host9% /VMecho %userid9%rem clear var userid9set userid9=rmdir /S /Q \\%host9%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host9%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host9%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS10echo TS10rem clear var userid10set userid10=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host10%’) do set userid10=%%i && echo %userid10%echo y | logoff %userid10% /server:%host10% /VMecho %userid10%rem clear var userid10set userid10=rmdir /S /Q \\%host10%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host10%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host10%\c$\Users\%name%\AppData\local\1c\1cv8\dumps  rem TS11echo TS11rem clear var userid11set userid11=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host11%’) do set userid11=%%i && echo %userid11%echo y | logoff %userid11% /server:%host11% /VMecho %userid11%rem clear var userid11set userid11=rmdir /S /Q \\%host11%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host11%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host11%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS12echo TS12rem clear var userid12set userid12=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host12%’) do set userid12=%%i && echo %userid12%echo y | logoff %userid12% /server:%host12% /VMecho %userid12%rem clear var userid12set userid12=rmdir /S /Q \\%host12%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host12%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host12%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS13echo TS13rem clear var userid13set userid13=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host13%’) do set userid13=%%i && echo %userid13%echo y | logoff %userid13% /server:%host13% /VMecho %userid13%rem clear var userid13set userid13=rmdir /S /Q \\%host13%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host13%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host13%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS14echo TS14rem clear var userid14set userid14=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host14%’) do set userid14=%%i && echo %userid14%echo y | logoff %userid14% /server:%host14% /VMecho %userid14%rem clear var userid14set userid14=rmdir /S /Q \\%host14%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host14%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host14%\c$\Users\%name%\AppData\local\1c\1cv8\dumps rem TS15echo TS15rem clear var userid15set userid15=for /f “skip=1 tokens=3” %%i in (‘qwinsta %name% /server:%host15%’) do set userid15=%%i && echo %userid15%echo y | logoff %userid15% /server:%host15% /VMecho %userid15%rem clear var userid15set userid15=rmdir /S /Q \\%host15%\c$\Users\%name%\AppData\local\1c\1cv8\6c97f90c-6d0e-46b6-b042-b61a02b5fd49rmdir /S /Q \\%host15%\c$\Users\%name%\AppData\Roaming\1C\1cv8rmdir /S /Q \\%host15%\c$\Users\%name%\AppData\local\1c\1cv8\dumps pause

Пока данное решение меня выручает в решении задач приходящих на третью линию поддержки где я сейчас работают. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.

GPO: Информацию о системе на рабочий стол

Задача: Хочу разобрать для себя, как из ранее опубликованной заметки сделать, что данная информация была на всех компьютерах подконтрольной сети. Ведь когда звонит пользователь и просит что-либо помочь или проконсультировать, то нужно же знать за каким рабочим местом он сидит. Да, у меня все доменные и не доменные станции оснащены средством удаленного обслуживания TightVNC который я всем уже установил посредством ранее опубликованного скрипта или GPO.

Но вот, каждый раз говорить пользователям, скажите какой у Вас адрес? — а как, я этого не знаю – часто слышу данный ответ. В ответ я им рассказываю по телефону, что возле часов на вашем компьютере в правом нижнем углу есть “галочка”, наведите на нее и во всплывающем окне скажите какие цифры с точкой Вы видите.

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

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

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

Скачиваю с официального сайта Microsoft утилиту bginfo (Статья: http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx

Ссылка: https://download.sysinternals.com/files/BGInfo.zip), я уже когда-то давным давным давно я как-то разбирал что есть утилита bginfo (http://www.ekzorchik.ru/2012/08/server-2008-bginfo-desktop/), но то было статичное использование, а сейчас у меня:

Задача: На все компьютеры домена сделать настройку чтобы на обоях рабочего стола отображалось:

  • Текущее имя компьютера
  • Имя авторизованного пользователя на компьютере
  • IP адрес компьютера на котором авторизовался пользователь

пока как-то так. И делать это я буду наверное через групповые политики. В настоящее время у меня подконтрольный домен контроллер на базе Windows Server 2012 R2.

И так ниже все шаги для воплощения моей задумки в жизнь.

Шаг №1: Для данной (Name: "GPO: BGinfo”) создаю в дополнение настройку:

Win + X — Control Panel (Панель управления) — Administrative Tools (Администрирование) — Group Policy Management (Менеджер групповых политик):

Создаю GPO под именем GPO: BGinfo

Конфигурация компьютера (Computer Configuration) — Политики (Policies) — Административные шаблоны (Administrative Template) — Система (System) — Групповая политика (Group Policy) — Настройка режима обработки замыкания пользовательской групповой политики: (Configure user Group Policy loopback processing mode) Включено (Enabled)

  • Режим (Mode): Слияние (Merge)

Хотя правильнее вынести данную настройку в дефолтную политику: Default Domain Policy

На заметку: Если выносить в Default Domain Policy то делать не «Слияние», а «Замена», но можно в каждой политике это сделать, как «Слияние», дабы примененная политика не задваивалась при просмотре через gpresult /r

Шаг №2:

Через утилиту bginfo (использовать буду файл Bginfo.exe, а не Bginfo64) подготавливаю файл (Предварительно запустив его с выбором «Запуск от имени администратора» посредством которого на экране будет выдаваться значимая информация для меня.

Предопределяю значимую информацию

Дополняю настройки: Desktops

  • User Desktop: Update this wallpaper
  • Logon Desktop for Console users: Update this wallpaper
  • Logon Desktop for Remote Desktop users: Update this wallpaper

и нажимаю OK окна Desktops.

Дополняю настройки: Background

  • Select your background parameters: Copy user’s wallpaper settings
  • Make wallpaper visible behind txt: отмечаю галочкой

Чтобы внесенные изменения применились следует нажать кнопку Apply.

а после сохраняю настройки в файл: File – Save as – пока на рабочий стол, к примеру: info расширение bgi подставится автоматически и нажимаю «Сохранить», после закрываю утилиту.

Через Preview смотрю как будет выглядеть мои параметры

Итак необходимый конфигурационный файл настроен, осталось его распространить через GPO при входе пользователя в систему (Logon).

Пользовательская информация дополненного рабочего стола может сохранятьcя, а по дефолту располагается в каталоге: %TEMP%\BGinfo.bmp, вот только размер данного файла в целых 3Mb не очень-то и продуктивно скажется на работе, переменная %TEMP% трансформируется в путь: C:\Users\aollo\AppData\Local\Temp, но ее место хранения можно изменить: Bitmap – Location

Определяю местонахождение на ПК пользовательской информации

На заметку: Если тормозит вход с систему, то следует проверить:

  • Размер пользовательского профиля
  • Размер изображения вставленного у пользователя на рабочем столе
  • Проанализировать как долго под его учетной записью инициализируются групповые политики (если система в домене)

Шаг №3: Настраиваю групповую политику добавления информации на рабочий стол авторизованного в системе пользователя.

Область нацеливания

Размещение:

  • polygon.local
  • Фильтр безопасности: “Прошедшие проверку»
  • Фильтр WMI: GPO: <Уместно сделать фильтр чтобы отфильтровывал только распространение политики на рабочие станции>, добавляется по желанию.

в данном фильтре составлен запрос на поиск в домене только рабочих станций, как только станция найдена, к ней применяется политика.

Помещаю файл Bginfo.exe & info.bgi в каталог: C:\Windows\SYSVOL\sysvol\polygon.local\scripts (это тот же что и при обращении: \\polygon.local\NETLOGON\, только обратившись так в него ничего нельзя записать, а через файловый менеджер можно)

Затем в политике GPO: Bginfo

Конфигурация пользователя (User Configuration) — Политики (Policies) — Конфигурация Windows (Windows Settings) – Сценарии (вход/выход из системы) (Scripts (Logon/Logoff) — Вход в систему (Logon)

и создаю bat—файл

12345@echo off \\polygon.local\netlogon\Bginfo.exe \\polygon.local\netlogon\info.bgi /timer:0 /silent /nolicprompt exit
В политике GPO: BGinfo указываю что она должна запускать скрипт

После делаю Logoff/Logon и авторизуюсь на компьютере под учетной записью alektest и на рабочем столе выводится информация которую я запрограммировал:

Результат применения GPO под пользователем на Windows 7

Необходимо убедиться, что политика применилась:

Win + R → cmd.exe

12345C:\Users\alektest>gpresult /r | findstr “Примененные | GPO: BGinfo” Примененные объекты групповой политики GPO: BGinfo

Отлично, политика применилась, так а теперь попробую авторизоваться на Windows 10 Pro RUS дабы посмотреть, что данная политика также отработает.

Результат применения GPO под пользователем на Windows 10

Отработала.

12345C:\Users\alektest>gpresult /r | findstr /R “\<Примененные BGinfo\>” Примененные объекты групповой политики GPO: Bginfo

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

1C:\Users\alektest\AppData\Local\Temp\BGinfo.bmp

После сделать Logon/Logoff – не помогло.

Решение: Нужно открыть утилиту bginfo и удалить параметры которые предлагаются по умолчанию и сохранить конфигурацию под другим именем, к примеру default.bgi и запустить.

Создаем две конфигурации для утилиты bginfo:

  • одна с названием info.bgi – которая прописывает на рабочий столе необходимые параметры
  • вторая с названием clear.bgi – которая удаляет параметры с рабочего стола.

Итого создаем две GPO:

Одна на включение параметров на рабочем столе

Вторая на выключение параметров на рабочем столе. Правда она отрабатывает когда на пк делаешь gpupdate /force и после Logoff/Logon и политика на выключение отрабатывает.

На заметку: Настройку обратной петли делать не обязательно.

На этом у меня всё, я сделал поставленную задачу и применяю данную заметку на рабочих местах текущего домена. С уважением автор блога Олло Александр aka ekzorchik.

Как сбросить grace period TS Windows Server 2016

В очередной раз разбираю, как сбросить оценочный период использования терминального сервера, базирующегося на операционной системе, но уже Windows Server 2016 Standard. До этого я для себя разобрал, как это сделать на Server 2008 R2 Std и Server 2012 R2 Std – это было познавательно и практично. А главное у меня есть отработанное решение. По сравнению если бы я просто непонятно что искал в интернете, где результат как обычно не 100% и задача по сбросу/восстановлению использования 120 дней на терминальном сервере уж сильно бы затянулась если бы это попало на рабочий день. Как показывает практика мои ресурсы:

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

На всякий случай приведу пример базовых ролей установленных для поднятия терминального сервера на базе Windows Server 2016 Std (SW_DVD9_Win_Server_STD_CORE_2016_64Bit_English_-4_DC_STD_MLF_X21-70526.ISO):

Host: srv-ts

Role: Remote Desktop Services

Feature: отмечаю галочками:

  • Remote Desktop Licensing Diagnoser Tools
  • Remote Desktop Licensing Tools

Role Services: отмечаю галочками

  •     Remote Desktop Licensing
  •     Remote Desktop Session Host

После, как и в прошлые разы проверяю количество дней до окончания использования тестового периода в 120 дней по использованию сервера в качестве терминального с неограниченным числом RDP сессий к нему, но ограничение все же существует, и оно это ресурсы самого сервера: RAM, CPU.

Дальнейшие действия:

  •     Из-под учетной записи, состоящей в группе локальных администраторов системы
  •     Консоль командной строки запущена, как «Run as administrator” (Запуск от имени администратора)

Шаг №1: Смотрим количество дней оставшихся в использовании терминальным сервером из 120 дефолтных, как оценочные:

12345C:\Windows\system32>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft”         DaysLeft = 119; C:\Windows\system32>

Шаг №2: Напоминаю, чтобы восстановить Trial Period, но он полнофункциональный для использования терминальным сервером понадобится утилита от Microsoft, именуется она: subinacl.exe (version: 5.2.3790.1180), скачиваем ее и помещаем в %systemroot%\system32. Затем с помощью нее захватываем права владельца на раздел реестра:

1C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=Administrators

Шаг №3: После захвата прав владельца для локальных администраторов устанавливаем права на запись всем кто вхож в группу "Administrators/Администраторы" на текущей системе:

1C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=F

Шаг №4: Далее удаляем ключ из раздела GracePeriod который отвечает за оценочный период по использованию текущего сервера с ролью терминального в 120 дней. Этим мы опять восстановим работу в 120 дней:

1C:\Windows\system32>reg delete “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /v L$RTMTIMEBOMB_1320153D-8DA3-4e8e-B27B-0D888223A588 /f

Шаг №5: Возьмите за правило, если что-то изменили в реестре в качестве прав и захвата владельца, то после по достижению результата следует восстановить как было до. В частности восстанавливаем дефолтные права которыми руководствуется роль Remote Desktop Services при работе:

12345C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /deny=Administrators= C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=QEYA C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=”NETWORK SERVICE”

Шаг №6: Отлично! Теперь для активации изменений систему/сервер нужно перезагрузить:

1C:\Windows\system32>shutdown /r /t 3

Шаг №7: Возвращаемся к Шаг №1: с целью проверки количества дней использования терминального сервера:

123C:\Windows\system32>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft”         DaysLeft = 119;

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

Итого, теперь у меня есть три заметки, где действия по восстановлению периода в 120 дней на системах Windows Server 2008 R2 & Windows Server 2012 R2 & Windows Server 2016. Пока на этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.

Как сбросить grace period TS Windows Server 2012 R2

Адаптация заметки tips_server_2008_r2_grace_period_v1.docx применительно к Windows Server 2012 R2 Standard

Просто на текущем месте работы есть TS, как на

  • Windows Server 2008 R2 Std SP1 (SW_DVD5_Windows_Svr_DC_EE_SE_Web_2008_R2_64Bit_English_w_SP1_MLF_X17-22580.ISO)
  • Windows Server 2012 R2 Std (SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_English_-4_MLF_X19-82891.ISO)

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

Предварительные действия: Терминальный сервер поднят на образе Windows Server 2012 R2 Standard, системе не в домене (но заметка работает на доменной), дальнейшие действия выполняются с применением учетной записи, состоящей в группе Local Administrators + Command Prompt через «Run as administrator”.

Шаг №1: Терминальный сервер развернут по заметке

Терминальный сервер в Server 2012 R2

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

12345C:\Windows\system32>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119; C:\Windows\system32>

Шаг №2: Как и в прошлый раз необходима утилита subinacl.exe скачиваемая с сайта Microsoft, с ее помощью и происходит собственно основная часть работы по захвату прав владельца:

1C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=Administrators

Шаг №3: Как и в прошлый раз необходима утилита subinacl.exe скачиваемая с сайта Microsoft, с ее помощью и происходит собственно основная часть работы по установке полных прав для группы учетных записей «Администраторов»:

1C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=F

Шаг №4: Также как и в системе Windows Server 2008 R2 Std Role: TS удаляем ключ за триал период в 120 дней:

1C:\Windows\system32>reg delete “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /v L$RTMTIMEBOMB_1320153D-8DA3-4e8e-B27B-0D888223A588 /f

Шаг №5: Восстанавливаем изначальные права доступа на ключ реестра дабы роль Remote Desktop Services могла корректно считывать дни триал периода и собственно сам сервис работал:

12345C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /deny=Administrators= C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=QEYA C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=”NETWORK SERVICE”

Шаг №6: Для вступления изменений в силу, сервер нужно перезагрузить:

1C:\Windows\system32>shutdown /r /t 3

Шаг №7: Проверяю через консоль командной строки с правами Администратора каков текущий статус в днях использования терминального сервера:

123C:\Windows\system32>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;

И вот снова 120 дней триал периода на использования терминального сервера с неограниченным количеством удаленных соединений, все зависит от ресурсов самого сервера: RAM, CPU, HDD, Eth.

Итого, теперь у меня есть две заметки, где действия по восстановлению периода в 120 дней на системах Windows Server 2008 R2 & Windows Server 2012 R2. Пока на этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.

Как сбросить grace period TS Windows Server 2008 R2

ВНИМАНИЕ: Все, что делается ниже на свой собственный страх и риск, сперва оттестируйте на тестовой системе, а после если все хорошо на боевой.

Когда поднимается терминальный сервер в организации, то как я вижу нет нужны сразу же его активировать можно использовать дефолтные 120 дней. Или же в организации просто нет денег или руководство считает, что в мире информационных технологий платить за что-то не приносящее материального дохода – это пустая трата денег. Вот в этом случае я хочу рассмотреть так называемую чистку определенного ключа реестра ответственного за данный Grace Period

На заметку: Все дальнейшие действия выполняются на любой учетной записи, которая включена в группу локальных администраторов системы, а также строки в консоли командной строки выполняются с применением «Запуск от имени администратора»

Шаг №1: Сервер на базе Windows Server 2008 R2 Std SP1 развернут из образа успешно составленного с применением файла ответов заметки или же Вы можете его установить просто из образа скачанного с Microsoft Volume License Service смотря как принято у Вас.

Шаг №2: Далее поднята роль Терминального сервера

Как развернуть терминальный сервер на базе Windows Server 2008 R2

Шаг №3: Сейчас терминальный сервер если он не активирован работает в режиме Grace Period (Льготный период/Тестовый период) сроком на 120 дней об этом говорит всплывающее окно в правом нижнем углу экрана как если Вы зашли на него локального или через RDP-сеанс:

«No Remote Desktop license server is specified.

Remote Desktop Services will stop working in 119 days if a license server is not specified.

Click this message to launch the RD Session Host Server Configuration tool to specify a license server for the RD Session Host server to use.”

Шаг №4: Чтобы узнать количество дней до окончания тестового период с целью, как ввода лицензий или сброса на опять 120 дней использования.

Поиск по документации сайта Microsoft (https://docs.microsoft.com/en-us/windows/win32/termserv/win32-terminalservicesetting)

От 07.10.2020 — ссылка ведет в никуда, поэтом качаю ее из своего хранилища необходимых файлов к заметкам отсюда.

вывел меня на class: win32_terminalservicesetting и его метод: GetGracePeriodDays

Start – All Programs – Accessories – и через правый клик мышью на «Command Prompt” выбираю «Run as administrator”, затем следующая команда:

Синтаксис использования wmic: wmic /namespace:\\root\<namespace> path <class name>  get <attributes>

1234567891011121314151617C:\Users\Administrator>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays Executing (\\SRV-TS\root\CIMV2\TerminalServices:Win32_TerminalServiceSetting.ServerName=”SRV-TS”)->getgraceperioddays() Method execution successful. Out Parameters: instance of __PARAMETERS { DaysLeft = 119; ReturnValue = 0; };

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

123C:\Users\Administrator>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;

Если нужно определить сколько дней осталось на удаленном хосте, то команда обращения через утилиту wmic выглядит:

123C:\Users\olloa>wmic /node:”srv-ts2″ /user:”olloa” /password:”<domain_password>” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 89;

Где сервер srv-ts2 – это система на базе Windows Server 2012 R2 Standard, а вот почему с Windows Server 2008 R2 Std SP1 у меня информация не снимается:

12345C:\Users\olloa>wmic /node:”srv-ts10″ /user:”olloa” /password:”<domain_password>” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 0; C:\Users\olloa>

Итак: у меня не доменный терминальные сервер, а на нем есть две учетные записи:

  • Одна Login: Administrator – это предустановленная и если под ней удаленно обратиться то информация снимается:
123C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”Administrator” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;
  • Вторая Login: ekzorchik (созданная и добавленная в группу локальных администраторов) и если под ней удаленно обратиться, то информация не снимается пишет – «Отказано в доступе»
12345C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”ekzorchik” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” ОШИБКА. Описание: Отказано в доступе.

В чем же причина?

Смотрю логи (Event View – Windows Logs – Application)  на srv-ts:

  • Log Name: Application
  • Source: WMI
  • Event ID: 5605
  • Description: The root\CIMV2\TerminalServices namespace is marked with the RequiresEncryption flag. Access to this namespace might be denied if the script or application does not have the appropriate authentication level. Change the authentication level to Pkt_Privacy and run the script or application again.

Дело в том, что если делать этот запрос локально на системе, то выполнится, а вот чтобы изменить уровень аутентификации для доступа к root\CIMV2. Нашел документ (https://docs.microsoft.com/en-us/windows/win32/wmisdk/setting-the-default-process-security-level-using-vbscript) по которому можно сделать скрипт:

1C:\Windows\system32>mkdir c:\test

Создаю VBS-скрипт, к примеру под именем: level.vbs

123strComputer = “srv-ts” Set objWMIService = GetObject(“winmgmts:{authenticationLevel=None}\\” & strComputer & “\root\CIMV2”)

Запускаю скрипт и скрипт выполнился без ошибок:

123C:\Windows\system32>cscript c:\test\level.vbs C:\Windows\system32>

Но лучше этого не делать, а пойти по пути наименьшего сопротивления:

  • Либо под административной учетной записью подключаться
  • Либо отключить UAC, перезагрузить компьютер и после команда wmic отработает как надо:

Проверяю со своей рабочей станции под управлением Windows 10 Pro что обратившись к терминальному серверу могу получить количество дней льготного использования терминального сервера:

123C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”ekzorchik” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;

Шаг №5: Итак, вот вы используете терминальный сервер в триал режиме целых 120 дней, дни подходят к нулю, но вы не хотите вводить ключ лицензии, переустанавливать терминальный сервер тоже не вариант. Как быть в таком случае? На просторах интернета натыкался якобы на способ удаления определенного ключа реестра, но для этого требуется утилита subinacl.exe (скачиваю ее с сайта Microsoft: https://www.microsoft.com/en-us/download/confirmation.aspx?id=23510) копирую ее для удобства использования %systemroot%\system32)

Этап №1: Сохраняем права доступа для раздела реестра

1234567C:\Windows\system32>subinacl.exe /output=c:\test\grace.txt /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” Elapsed Time: 00 00:00:00 Done:        1, Modified        0, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Для себя смотрю содержимое файл grace.txt, но содержимое для меня как китайская грамота.

Этап №2: Забираем владельца у ключа GracePeriod:

1234567891011C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=Administrators SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : builtin\administrators is the new owner HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : 1 change(s) Elapsed Time: 00 00:00:00 Done:        1, Modified        1, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Этап №3: Устанавливаем полные права доступа на ключ реестра GracePeriod:

123456789101112131415C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=F SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : delete Perm. ACE 2 builtin\administrators SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : new ace for builtin\administrators HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : 2 change(s) Elapsed Time: 00 00:00:00 Done:        1, Modified        1, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Этап №4: Удаляем ключ ответственный за триал период в 120 дней

123C:\Windows\system32>reg delete “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /v L$RTMTIMEBOMB_1320153D-8DA3-4e8e-B27B-0D888223A588 /f The operation completed successfully.

Этап №5: Возвращаем права доступа для раздела GracePeriod к тем когда делали бекап в «Этапе №1»:

1C:\Windows\system32>subinacl.exe /playfile c:\test\grace.txt

Лучше этого не делать, т.к. после потерял доступ к разделу GracePeriod и получаю сообщение при открытии разрешений:

  • Заголовок окна: Error Opening Key
  • Тело: GracePeriod cannot be opened. An error is preventing this key from being opened. Details: Access is denied.

Также по RDP к серверу. Чтобы восстановить доступ к серверу по RDP у меня заработало следующее:

  • Удалил роль терминального сервера
  • Перезагрузился
  • По RDP авторизовался.

Но посмотреть разрешения на раздел GracePeriod не могу через Regedit.exe

Раз у меня работают «Этап 2 & Этап 3” то применяю, получается, что есть права для администраторов. Попробую удалить данный раздел GracePeriod и заново разверну роль Терминального сервера. Раздел GracePeriod успешно создался, теперь смотрю права доступа чтобы из задокумментировать вручную:

  • Name: NETWORK SERVICE & SYSTEM
  • Apply to: This key only
  • Permissions:
Full ControlAllow
Query ValueAllow
Set ValueAllow
Create SubkeyAllow
Enumerate SubkeysAllow
NotifyAllow
Create LinkAllow
DeleteAllow
Write DACAllow
Write OwnerAllow
Read ControlAllow
  • Name: Administrators (SRV-TS\Administrators)
  • Apply to: This key only
  • Permissions:
Full Control-F
Query ValueApplyQ
Set Value-S
Create Subkey-C
Enumerate SubkeysApplyE
NotifyApplyY
Create Link-L
Delete-D
Write DAC-W
Write Owner-O
Read ControlApplyA
  • Owner (Владелец)
Текущий владелецNETWORK SERVICE

Так возвращаюсь к началу, в частности к Этапу №5:

12345C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /deny=Administrators= C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=QEYA C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=”NETWORK SERVICE”

Этап №6: Перезагружаю систему для последующего использования терминального сервера:

1C:\Windows\system32>shutdown /r /t 3

И у меня снова 120 дней тестового использования терминального сервера, а такой трюк можно проделывать не один раз, получается компания Microsoft создала, а люди нашли как бы багу и теперь ее пользуются. Такое решение применимо к тем организациям и личному использованию в рамках ответственности за принятое решение идти по пути не лицензирования. Итого заметка работоспособна. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.

Файл ответов Autounattend для Server 2012 R2

Разбираю на рабочем месте, как подготовить файл ответов для образа Windows 2012 R2 Std из-под Windows 10 Pro. Сейчас есть время, а время чтобы быстро и продуктивно шло я использую через самообразование. Мне нравится, т.к. у меня хобби и работа – это одно и то же.

Образ: SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_English_-4_MLF_X19-82891.ISO

Шаг №1: Устанавливаю на свою систему Windows 10 Pro пакет Windows ADK

Шаг №2: Создаю каталог isoproject на диске C:

Шаг №3: Распаковываю образ  SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_English_-4_MLF_X19-82891.ISO посредством установленного в системе архиватора 7zip в каталог Шаг №1:

Шаг №4: Запускаю консоль командной строки с правами Администратора и извлекаю информацию по редакциям файла install.wim которые можно развернуть из моего образа:

123456789101112131415161718192021222324252627282930313233343536373839C:\WINDOWS\system32>dism /get-wiminfo /wimfile:c:\isoproject\sources\install.wim Cистема DISM Версия: 10.0.17134.1 Сведения об образе : c:\isoproject\sources\install.wim Индекс: 1 Имя : Windows Server 2012 R2 Standard (Server Core Installation) Описание : This option (recommended) reduces management and servicing by installing only what is needed to run most server roles and applications. It does not include a GUI, but you can fully manage the server locally or remotely with Windows PowerShell or other tools. You can switch to a different installation option later. See “Windows Server Installation Options.” Размер (байт): 7 460 086 466 Индекс: 2 Имя : Windows Server 2012 R2 Standard (Server with a GUI) Описание : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation. All server roles and features are supported. You can switch to a different installation option later. See “Windows Server Installation Options.” Размер (байт): 13 068 096 479 Индекс: 3 Имя : Windows Server 2012 R2 Datacenter (Server Core Installation) Описание : This option (recommended) reduces management and servicing by installing only what is needed to run most server roles and applications. It does not include a GUI, but you can fully manage the server locally or remotely with Windows PowerShell or other tools. You can switch to a different installation option later. See “Windows Server Installation Options.” Размер (байт): 7 457 614 120 Индекс: 4 Имя : Windows Server 2012 R2 Datacenter (Server with a GUI) Описание : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation. All server roles and features are supported. You can switch to a different installation option later. See “Windows Server Installation Options.” Размер (байт): 13 067 663 813

Операция успешно завершена.

Шаг №5: Из вывода выше вижу, что для установки операционной системы Windows Server 2012 R2 мне доступно четыре редакции, но в тестовой и боевой сети я использую обычно Standard. Если нужна Enterprise редакция, то отличия будут в одном шаге. Итак, я экспортирую из дефолтного install.wim редакцию Standard, а она у меня под номером два в отличный каталог от дефолтного.

12345678910111213C:\WINDOWS\system32> C:\WINDOWS\system32>dism /export-image /sourceimagefile:c:\isoproject\sources\install.wim /sourceindex:2 /destinationimagefile:c:\install.wim /compress:max /checkintegrity Cистема DISM Версия: 10.0.17134.1 Экспорт образа [==========================100.0%==========================] Операция успешно завершена.

Шаг №6: Теперь замещаю экспортированный файл install.wim на место где был оригинальный.

12345C:\WINDOWS\system32> C:\WINDOWS\system32>copy /Y c:\install.wim c:\isoproject\sources\install.wim Скопировано файлов:         1.

Проверяю информацию по файлу install.wim:

1234567891011121314151617C:\WINDOWS\system32>dism /get-wiminfo /wimfile:c:\isoproject\sources\install.wim Cистема DISM Версия: 10.0.17134.1 Сведения об образе : c:\isoproject\sources\install.wim Индекс: 1 Имя : Windows Server 2012 R2 Standard (Server with a GUI) Описание : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation. All server roles and features are supported. You can switch to a different installation option later. See “Windows Server Installation Options.” Размер (байт): 13 068 096 479 Операция успешно завершена.

Шаг №7: Запускаю оснастку: Win – Windows Kits – и через правый клик мышью на «Диспетчер установки Windows» выбираю «Дополнительно» — «Запуск от имени администратора», затем Файл – Новый файл ответов – на вопрос всплывающего окна с текстом «Редактирование файла ответов без открытия образа Windows приведет к ограничению функциональности. Вы хотите открыть образ Windows сейчас?» нажимаю «Да», а после указываю путь до файла c:\isoproject\sources\install.wim и нажимаю «Открыть», затем «Да» (на создание файла каталога).

Но опять же получаю сообщение об ошибке:

«Диспетчеру установки Windows не удалось создать каталог. Дополнительные сведения об устранении неполадок см. в разделе «Техническое руководство по диспетчеру системных образов Windows” в руководстве пользователя Windows ADK.

Подробные сведения: Клиент не обладает требуемыми правами»

Что опять, ладно смотрю есть ли дефолтные файлы с расширением clg – файлов нет в каталоге c:\isoproject\sources. Так, а если щелкнуть мышью по гиперссылке: «Щелкните здесь, чтобы открыть файл журнала» — тут сообщение:

См. сообщение выше:

System.ComponentModel.Win32Exception (0x80004005): Клиент не обладает требуемыми правами

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

Читаю что же такое clg файл каталога, является двоичным файлом, содержащим состояние всех параметров и пакетов образа Windows.

Попробую на VM в оси Windows 10 Pro с использованием прав вхожей в группу локальных администраторов без какого делегированный администраторы на ПК – Да, походу дело в этом.

Я на своем рабочем месте вхож в группу GPO:LocalAdmin она соответственно состоит в группе Администраторы моего компьютера

На новой VM поставил Windows 10 Pro не вносил систему в домен и из-под локального администратора:

  • 1) Установил пакет Windows ADK
  • 2) Запустил Windows System Image Manager – файл – выбрать образ (install.wim) и нажал «Да» и файл каталога как видно ниже создается.

Окно: Создание файла каталога

Образ 1 из 1

Подключение образа Windows:

C:\isoproject\sources\install.wim. Это может занять несколько минут.

Ожидаю завершения/формирования clg файла.

Файл каталога создан и именуется, как: install_Windows Server 2012 R2 SERVERSTANDARD.clg

Раз так, то к своей заметке важное дополнение:

На заметку: Создание файла ответов на рабочей системе с применением инструмента «Диспетчер установки Windows» обязательно чтобы Ваша учетная запись была чисто административной и без какого-либо делегирования либо же действия выполнять из под дефолтной «Администратор»&”Administrator”. Или на другой системе создать файл каталога и переместить на текущую и продолжить. Кстати, я так и поступлю. При установленной поддержке запуска Linux утилиту внутри Windows можно для себя посмотреть, что представляет из себя файл каталога:

12345ekzorchik@W10X64:/mnt/c/Windows/System32$ file /mnt/c/isoproject/sources/install_Windows\ Server\ 2012\ R2\ SERVERSTANDARD.clg /mnt/c/isoproject/sources/install_Windows Server 2012 R2 SERVERSTANDARD.clg: data ekzorchik@W10X64:/mnt/c/Windows/System32$ cat /mnt/c/isoproject/sources/install_Windows\ Server\ 2012\ R2\ SERVERSTANDARD.clg | head -n1

Шаг №8: Повторяю создаю файла ответов: Файл – Новый файл ответов – Да – выбираю install.wim и все происходит без каких-либо проблем, в окне «Windows System Image Manager” по областям:

  • Образ Windows: загружена/сформирована структура компонентов, определяющих настройки
  • Файл ответов: загружена/сформирована базовая структура, которая будет дополняться выбором через правый клик мышью на компонентах «Образ Windows»

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

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

Disable the language and other preferences dialog

windowsPE – amd64_Microsoft-Windows-International-Core-WinPE_neutral

  • InputLocale: en-US
  • SystemLocale: en-US
  • UILocale: en-US
  • UserLocale: en-US

Disable the Select Operating System dialog

windowsPE – amd64_Microsoft-Windows-Setup_neutral – ImageInstall – OSImage – InstallFrom – MetaData

  • Action: AddListItem
  • Key: /IMAGE/INDEX
  • Value: 1

Либо Key: /IMAGE/NAME, а значение свойства VALUE: Windows Server 2012 R2 Standard (Server with a GUI)

Disable the EULA dialog

windowsPE – amd64_Microsoft-Windows-Setup_neutral – UserData

  • AcceptEula: True
  • FullName: ekzorchik
  • Organization: https://win.ekzorchik.ru
  • Disable the Disk Allocation dialog

windowsPE – amd64_Microsoft-Windows-Setup_neutral – DiskConfiguration – Disk[DiskID=”0”]

  • WillShowUI: OnError
  • Action: AddListItem
  • DiskID: 0
  • WillWipeDisk: true

windowsPE – amd64_Microsoft-Windows-Setup_neutral – DiskConfiguration – Disk[DiskID=”0”] – CreatePartitions – CreatePartition[Order=”1”]

  • Action: AddListItem
  • Extend: false
  • Order: 1
  • Size: 500
  • Type: Primary

windowsPE – amd64_Microsoft-Windows-Setup_neutral – DiskConfiguration – Disk[DiskID=”0”] – CreatePartitions – CreatePartition[Order=”2”]

  • Action: AddListItem
  • Extend: true
  • Order: 2
  • Type: Primary

windowsPE – amd64_Microsoft-Windows-Setup_neutral – DiskConfiguration – Disk[DiskID=”0”] – ModifyPartitions – ModifyPartition – ModifyPartition[Order=”1”]

  • Action: AddListItem
  • Active: true
  • Format: NTFS
  • Label: Boot
  • Order: 1
  • PartitionID: 1

windowsPE – amd64_Microsoft-Windows-Setup_neutral – DiskConfiguration – Disk[DiskID=”0”] – ModifyPartitions – ModifyPartition – ModifyPartition[Order=”2”]

  • Action: AddListItem
  • Active: true
  • Extend: true
  • Format: NTFS
  • Label: Windows
  • Letter: C
  • Order: 2
  • PartitionID: 2

windowsPE – amd64_Microsoft-Windows-Setup_neutral – ImageInstall – OSIMage – InstallTo

  • DiskID: 0
  • PartitionID: 2

Disable the Administrator password prompt

oobeSystem – amd64_Microsoft-Windows-Shell-Setup_neutral – UserAccounts – AdministratorPassword

  • Value: 712mbddr@

Do not show Server Manager at login

Specialize – amd64_Microsoft-Windows-ServerManager-SvrMgrNc_neutral

  • DoNotOpenServerManagerAtLogon: true

Enable Remote Desktop Protocol (RDP)

Specialize – amd64_Microsoft-Windows-TerminalServices-LocalSessionManager_neutral

  • fDenyTSConnections: false

Disabling network discovery

oobeSystem – amd64_Microsoft-Windows-Shell-Setup_neutral – FirstLogonCommands – FirstLogonCommands – SynchronousCommand[Order=”1”]

  • Action: AddListItem
  • CommandLine: cmd.exe /c reg ADD HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff /f
  • Order: 1

На заметку:

  • Disk 0 (BIOS-based PC): System: Windows: Recovery
  • Disk 0 (UEFI-based PC): System: MSR:Windows:Recovery

И т.д.

Шаг №10: Сохраняем файл ответов под именем Autounattend.xml в каталог c:\isoproject: Файл – Сохранить файл ответов как, после закрываем оснастку: Windows System Image Manager и, если нужно можем открыть файл ответов и через редактор Notepad++ внести дополнения.

Шаг №11: Собираю образ:

Win -> Windows Kits – через правый клик на «Среда средств развертывания и работы с образами» выбираю «Дополнительно» — «Запуск от имени администратора»

1234567891011121314151617181920212223242526272829C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>oscdimg -u2 -m -o -lWin2012R2Std -b”c:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg\etfsboot.com” c:\isoproject c:\test\Win2012R2Std.iso OSCDIMG 2.56 CD-ROM and DVD-ROM Premastering Utility Copyright (C) Microsoft, 1993-2012. All rights reserved. Licensed only for producing Microsoft authorized content. Scanning source tree (2000 files in 813 directories) Scanning source tree complete (2160 files in 872 directories) Computing directory information complete Image file is 5176393728 bytes (before optimization) Writing 2160 files in 872 directories to c:\test\Win2012R2Std.iso 100% complete Storage optimization saved 456 files, 92153856 bytes (2% of image) After optimization, image file is 5091352576 bytes Space saved because of embedding, sparseness or optimization = 92153856 Done. C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>

Шаг №12: Проверяю на тестовом окружении: QEMU+KVM, ESXi, Virtualbox как установится система из сформированного образа «Шаг №11». Система поставилась. Работает.

Итого я уже для Windows Server 2012 R2 проработал файл ответов под себя. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.

Настройка безопасности для FTP сервиса на Server 2016

Продолжении заметки tips_server_2016_ftp_v1.odt

Здесь и сейчас я рассмотрю шаги по настройке защиты в пределах локальной сети к сервису FTP на Windows Server 2016 Std которые применяю лично Я. А использовать это уже решать ВАм, либо если у Вас есть свое видение, то просьба написать мне в Telegram@aka_ekzorchik или на почту: support@ekzorchik.ru

Шаг №1: Настроим ограничение с каких систем разрешено подключаться к данному FTP сервиса в пределах локальной сети:

Win + R → control.exe — Administrative Tools — через оснастку Internet Information Service (IIS) Manager — SRV-BACKUP (SRV-BACKUP\Administrator) — (FTP) FTP IP Address and Domain Restrictions

ограничение с каких систем разрешено подключаться к данному FTP сервиса

В правой части (Actions) нажимаю «Add Deny Entry...»

  • «Add Allow Entry» → кому разрешено подключаться, либо конкретным IP адресам, либо подсети
  • «Add Deny Entry» → кому запрещено подключаться, либо конкретным IP адресам, либо подсети.

Вот к пример настройка запрета на подключение для IP адреса 172.33.33.16

Пример запрета для указанного адреса

Пробую подключиться:

1234567891011ekzorchik@navy:~$ ftp ftp> open 172.33.33.30 Connected to 172.33.33.30. 421 Service not available, remote server has closed connection ftp> quit ekzorchik@navy:~$

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

123456789101112131415ekzorchik@navy:~$ sudo nmap 172.33.33.30 -p 21 Starting Nmap 7.60 ( https://nmap.org ) at 2019-04-05 22:16 MSK Nmap scan report for 172.33.33.30 Host is up (0.00074s latency). PORT STATE SERVICE 21/tcp open ftp MAC Address: 52:54:00:AD:49:D3 (QEMU virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.63 seconds

Отлично.

Шаг №2: Ограничим количество попыток между неправильными/ошибочными подключениями к FTP сервису:

Win + R → control.exe — Administrative Tools — через оснастку Internet Information Service (IIS) Manager — SRV-BACKUP (SRV-BACKUP\Administrator) — (FTP) FTP Logon Attempt Restrictions

Ограничим количество попыток подключения
  • Enable FTP Logon Attempt Restrictions: отмечаю галочкой
  • Maximum number of failed login attempts: выставляю значение, к примеру 3, т. е. Если три раза неправильно указали связку логин и пароль
  • Time period (in seconds): 900 (60 * 15 = 900 секунд, 15 минут)
  • Deny IP Addresses based on the number of failed login attemps: отмечаю

IP адрес нарушителя в случае неправильной авторизации будет заблокирован на 15 минут

Применяем настройку нажатием в правой части (Actions) Apply.

Шаг №3: Если вспомнить момент когда я разворачивал FTP сервис то при просмотре через консоль командной строки что порт открыт:

Win + X — Command Prompt (Admin)

12345C:\Windows\system32>netstat -a | findstr :21 TCP 0.0.0.0:21 srv-backup:0 LISTENING TCP [::]:21 srv-backup:0 LISTENING

видно, что сервис ожидает подключение на всех сетевых интерфейсах, а это не правильно — нужно чтобы он ожидал подключение только на своем единственном, а не вида 0.0.0.0:

Win + R → control.exe — Administrative Tools — через оснастку Internet Information Service (IIS) Manager — SRV-BACKUP (SRV-BACKUP\Administrator) — Sites — и через правый клик мышью на «FTP storage» выбираю «Edit Binding...», выделяю строку и нажимаю «Edit...» и привожу к виду:

  • Type: ftp
  • IP Address: 172.33.33.30 (IP адрес текущей системы)
  • Port: 21 (для безопасности можно также изменить порт на котором работает FTP сервис на отличный от дефолтного)
Указываем что сервис FTP работает на определенном сетевом адресе

и после нажимаю кнопку OK окна Edit Site Binding, после кнопку Close окна Site Binding

Шаг №4: Не лишним будет ограничить количество создаваемых соединений и другие параметры:

Win + R → control.exe — Administrative Tools — через оснастку Internet Information Service (IIS) Manager — SRV-BACKUP (SRV-BACKUP\Administrator) — Sites — и через правый клик мышью на «FTP storage» выбираю Manage FTP Site — Advanced Settings, развернуть настройки «Connections» & «File Handing»

  • Max Connections: 10000
  • Allow Replace on Rename: True

и после нажимаю кнопку OK окна Advanced Settings

Шаг №5: Не лишним будет уведомлять тех кто подключился к FTP сервису, что он соглашается что все его действия логируются и в случае чего данные его сессии могут быть переданы в правоохранительные органы.

Win + R → control.exe — Administrative Tools — через оснастку Internet Information Service (IIS) Manager — SRV-BACKUP (SRV-BACKUP\Administrator) — Sites — FTP storage — FTP Messages

Не лишним будет уведомлять тех кто подключился к FTP сервису

(Message Behavior)

  • Show detailed messages for local requests: отмечаю галочкой
  • Banner: Добро пожаловать. Учтите если вы задумали зло или хотите навредить сервису, то все Ваши действия логируются и в случае могут быть переданы в правоохранительные органы для расследования.

И после нажимаю (Actions) Apply

На заметку: Дабы у Всех сообщение отрабатывалось лучше писать на English языке иначе к примеру на Ubuntu системе будут отображаться символы вопроса.

Banner: Welcome. Take into account if you have conceived the evil or want to harm the service, then all your actions are logged and in the case can be transferred to law enforcement agencies for investigation.

Пример текста при подключении к FTP-сервису

Проверяю:

12345678910111213141516171819202122232425ekzorchik@navy:~$ ftp ftp> open 172.33.33.30 Connected to 172.33.33.30. 220-Microsoft FTP Service 220 Welcome. Take into account if you have conceived the evil or want to harm the service, then all your actions are logged and in the case can be transferred to law enforcement agencies for investigation. Name (172.33.33.30:ekzorchik): ftpuser1 331 Password required Password: 230 User logged in. Remote system type is Windows_NT. ftp> quit 221 Goodbye. ekzorchik@navy:~$

Шаг №6: По возможности не использовать голый FTP сервис, а использовать связку FTP + HTTPS

Шаг №7: Т.к. у оснастки IIS нет возможности ограничить размер FTP-ресурса, то следует установить на Windows Server 2016 роль File Service, а ней компонент FSRM

Win + R → control.exe — Administrative Tools — Server Manager — Add roles and features:

Server Roles: File and Storage Services и отметить галочкой компонент с именованием, как «File Server Resource Manager» и внутри него для каталога который является корнем для FTP сервиса настроить квоту.

Пока на этом у меня всё, выполнив все эти шаги Вы тем самым затрудните проникновение в Вашу систему кого бы то ни было. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.