[Перевод] Модуль PowerShell для Intel IoT Gateway

Шлюзы Intel для интернета вещей могут работать под управлением различных операционных систем. Одна из них — Windows 10 IoT. Сегодня мы поговорим о модуле для PowerShell IntelIoTGatewaySetup, который создан специально для поддержки IoT-шлюзов в среде Microsoft Windows.

9cf01592e67d48d181ee8630ca777c0d.jpg


Официально этот модуль называется »Intel IoT Gateway Module for Microsoft Windows PowerShell». Он помогает настроить операционную систему шлюза на заданный уровень безопасности (Security SKU).

Основные сведения


Модуль входит в состав пакета Windows Configuration Software for Intel IoT Gateway. Пакет можно найти по вышеприведённому названию и скачать в Центре загрузки Intel. В настоящее время поддерживаются операционные системы Windows 10 IoT Enterprise и Windows 10 IoT Core.

IntelIoTGatewaySetup позволяет настраивать следующие функции безопасности Windows, указанные в описании уровней безопасности. Предусмотрено три уровня безопасности. В частности, это, в порядке возрастания обеспечиваемого уровня защиты, Basic SKU, Medium SKU, и High SKU. Каждый следующий уровень расширяет возможности предыдущего. Итак, вот список настраиваемых функций.

  • Windows Update, Windows Defender, Windows Firewall, Windows User Account Control, USB Removable Media Lockdown, Virtualization Based Security, App Locker, Code Integrity.
  • BitLocker с поддержкой модуля TPM для Windows 10 IoT Enterprise. Хотя в определениях уровней безопасности упомянуто использование TPM и сетевой разблокировки (Network Unlock) для среднего и высокого уровней, модуль PowerShell настраивает лишь BitLocker с поддержкой TPM, так как Network Unlock требует дополнительной сетевой инфраструктуры.


Хотя модуль IntelIoTGatewaySetup и настраивает множество параметров в соответствии с заданным уровнем безопасности, он не касается следующих возможностей:

  • UEFI, Secure Boot и TPM. Всё это является частью аппаратных требований и требований к микропрограммам для шлюзов Intel. Таким образом, эти функции на шлюзе будут уже включены.
  • Уровни привилегий учётных записей. Можно создать, в зависимости от особенностей использования системы, учётную запись с ролью администратора или обычную учётную запись со стандартным набором прав.
  • ASLR. Эта возможность по умолчанию поддерживается и включена в ОС Windows, таким образом, в дополнительной настройке она не нуждается.
  • Measured Boot. Эта функция реализуется благодаря прошивке UEFI, TPM и Windows. Она так же не нуждается в дополнительной настройке.
  • Remote Attestation. Эта функция нуждается в настройке дополнительной сетевой инфраструктуры и в дополнительном программном обеспечении.
  • BitLocker + Network Unlock. Технология Network Unlock требует настройки дополнительной сетевой инфраструктуры и возможностей DHCP-драйвера в UEFI. В результате модуль PowerShell способен настроить лишь BitLocker с поддержкой TPM.
  • USB Filter. Для настройки этой функции в соответствии с особенностями использования шлюза, применяйте групповые политики для того, чтобы управлять USB-устройствами, основываясь на Device ID или Class ID.
  • Keyboard Filter. Для настройки этого фильтра воспользуйтесь инструментом Windows ICD.


В папке IntelIoTGatewaySetup находятся следующие основные компоненты:

  • Readme.rtf. Обычный сопроводительный файл с инструкциями по началу работы.
  • ModuleInstallation.ps1. Вспомогательный скрипт для установки модуля IntelIoTGatewaySetup.
  • Папка IntelIoTGatewaySetup. Здесь содержится сам модуль.


Установка модуля


Если у вас имеется шлюз, оснащённый дисплеем и клавиатурой, команды PowerShell, необходимые для установки модуля, можно исполнять непосредственно на шлюзе. После установки команды PowerShell, которые предоставляет модуль, так же можно исполнять прямо на шлюзе. Мы называем это локальной установкой и локальным исполнением команд.

Шлюз может быть расположен вне пределов физической досягаемости, кроме того, у него могут отсутствовать монитор и устройства ввода. В таком случае нужно воспользоваться другим компьютером, назовём его компьютером разработчика, который позволит организовать удалённое управление шлюзом и его настройку. Ниже мы будем рассматривать именно такой сценарий. Мы называем его удалённой установкой и удалённым исполнением команд.

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

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

Для начала — вот список операций, которые нужно произвести на шлюзе для того, чтобы обеспечить удалённый доступ к PowerShell.

  • Если на шлюзе установлена Windows IoT Core, то всё уже готово к работе, ничего больше делать не нужно.
  • Если же шлюз оснащён Windows IoT Enterprise, нужно разрешить удалённое взаимодействие с PowerShell, используя эту и эту инструкции. Например, для того, чтобы включить удалённый доступ к PowerShell, воспользуйтесь нижеприведёнными командами.
    #Получим индекс NIC активного NIC 
    Get-NetAdapter
    #$index – это полученный индекс.
    #Переключим целевое активное соединение в приватный режим.
    #В качестве разделителя в строке команды используется комбинация пробел + обратная галочка.
    Set-NetConnectionProfile -InterfaceIndex $index `
    -NetworkCategory Private
    #Включим удалённый доступ
    Enable-PSRemoting -Force
    


Теперь, когда шлюз готов к работе, займёмся компьютером, выполнив следующие шаги с использованием окружения PowerShell.

1. Убедитесь в том, что две следующих учётных записи, созданные на соответствующих устройствах, имеют административные полномочия. А именно:

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


2. Запустите интерпретатор командной строки PowerShell от имени администратора.

3. Для того, чтобы запустить скрипт ModuleInstallation.ps1 нужно, чтобы в PowerShell использовалась политика выполнения скриптов AllSigned или RemoteSigned. Взгляните на следующие командлеты: Get-ExecutionPolicy и Set-ExecutionPolicy. Они позволяют, соответственно, узнавать и задавать политику выполнения. Например, с помощью такой команды можно задать использование политики RemoteSigned.

Set-ExecutionPolicy RemoteSigned


4. Воспользуйтесь точечной нотацией при вызове скрипта ModuleInstallation.ps1. Для того, чтобы это сделать, введите символ точки ».» и пробел перед путём к запускаемому скрипту. Этот подход позволяет запустить скрипт в текущей области действия.

. .\ModuleInstallation.ps1


5. Затем взгляните на справку по модулю, о котором мы здесь говорим, ознакомьтесь с примерами его использования. Для этого воспользуйтесь такой командой Get-Help Install-IntelIoTGatewaySetup –Full

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

#$path это путь к папке, в которой находится загруженный модуль,
# например: ‘C:\IntelIoTGatewaySetup’
#$remoteip это IP-адрес удалённого шлюза,
#например: ‘192.168.2.5’
#$remoteaccount это учётная запись на шлюзе,
#например, ‘Tester’ или ‘Domain\Tester’
#В качестве разделителя в строке команды используется комбинация пробел + обратная галочка.
Install-IntelIoTGatewaySetup –ModuleLocalPath $path `
-RemoteGateway $remoteip `
-RemoteAccount $remoteaccount –Verbose


Обратите внимание на то, что при локальной установке можно исполнить команду Install-IntelIoTGatewaySetup непосредственно на шлюзе. Для деинсталляции модуля предусмотрена команда Uninstall-IntelToTGatewaySetup. Подробности об этом можно найти в справочных материалах к модулю.

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

  1. Запустите службу WInRM, если она ещё не запущена.
    if ((Get-Service WinRM).Status.ToString() -ne 'Running') {
    # Запуск службы WinRM 
    Write-Verbose "Start WinRM service."
    net start WinRM
    }
    

  2. Добавьте удалённый шлюз в список TrustedHosts.
    #Эта команда удалит исходный TrustedHosts и приведет к использованию $remoteip.
    #Кроме того, она может добавить новое значение к списку TrustedHosts.
    #Справку можно вызвать командой Get-Help Set-Item.
    #$remoteip это IP-адрес удалённого шлюза.
    #В качестве разделителя в строке команды используется комбинация пробел + обратная галочка.
    Set-Item WSMan:\localhost\Client\TrustedHosts `
    -Value $remoteip –Force
    

  3. Создайте удалённую сессию PowerShell на удалённом шлюзе.
    #$remoteip это IP-адрес удалённого шлюза. 
    #$remoteaccount это учётная запись с административными полномочиями
    #на удалённом шлюзе. 
    #В качестве разделителя в строке команды используется комбинация пробел + обратная галочка.
    $s = New-PSSession -ComputerName $remoteip ` 
    -Credential "localhost\$remoteaccount"
    

  4. Выполните эти команды на удалённом шлюзе.
    #Запустите удалённый скрипт для тестирования
    Invoke-Command -Session $s -ScriptBlock {
    #В этом блоке можете запустить желаемые команды PowerShell. 
    #Эти команды будут запущены на удалённом шлюзе.
    
    #взглянем на сведения о нашем модуле 
    Get-Command -Module IntelIoTGatewaySetup 
    Get-Module IntelIoTGatewaySetup 
    }
    

  5. Закройте удалённую сессию PowerShell после того, как выполните все необходимые команды.
    Remove-PSSession -Session $s
    


Использование модуля


Здесь мы, так же, как в предыдущем разделе, исходим из предположения, что для работы со шлюзом используется компьютер. Расскажем о том, как пользоваться модулем. Для начала, если вы этого ещё не сделали, включите использование удалённого PowerShell на шлюзе. Теперь, на компьютере разработчика, выполните следующие шаги.

  • Воспользуйтесь той же процедурой, которая описана в п.7 предыдущего раздела. Все следующие примеры рассчитаны на то, что исполняемые на удалённом шлюзе команды будут помещены внутрь блока конструкции Invoke-Command.
  • После установки модуля воспользуйтесь командой Get-Help с параметром –Full для того, чтобы узнать подробности о командах модуля. Например, выполните следующую команду для того, чтобы получить список всех команд, доступных в модуле:
    Get-Command -Module IntelIoTGatewaySetup
    

  • Для настройки уровня безопасности служат команды Enable-IoTWinSecurities и Disable-IoTWinSecurities. Они, в свою очередь, вызывают другие команды модулей. Полезно будет взглянуть на справку по ним (Get-Help Enable-IoTWinSecurities –Full). Вот примеры работы с ними.
  • Для того, чтобы включить базовый уровень безопасности («Basic» SKU) и задействовать приведённый в примере пароль восстановления BitLocker, выполните следующие команды.
    #$RecoveryPW это пароль восстановления для BitLocker,
    # который вы хотите использовать.
    #Например: $RecoveryPW =
    # '099825-222222-607607-626285-132319-115621-083204-229482'
    #В качестве разделителя в строке команды используется комбинация пробел + обратная галочка.
    Enable-IoTWinSecurities -SKU "Basic" `
    -BitLockerRecoveryPW $RecoveryPW `
    -AddPowerShellRemotingFirewallRule -ErrorLog –Verbose
    


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

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

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

Disable-IoTWinSecurities -ErrorLog -Verbose


Отдельные команды, используемые в Enable-IoTWinSecurities и Disable-IoTWinSecurities, можно применять и самостоятельно, для настройки отдельных функций безопасности.

Если TPM «не готов к использованию», его, сначала, нужно установить. В противном случае не получится включить BitLocker.

Если AppLocker настроен в соответствии с высоким уровнем безопасности («High» SKU), пользователи не смогут использовать PowerShell для добавления новых функций Windows. В соответствии с архитектурой системы, файл DISMHOST.EXE, который используется PowerShell, находится во временной папке, в директории, соответствующей учётной записи пользователя, а этот файл окажется заблокированным. В результате пользователи не смогут использовать наши команды для включения VBS, так как эта команда попытается установить необходимую ей функцию Windows. При выполнении команды Enable-IoTWinSecurities мы сначала выполняем установку VBS. Если нужно установить функции Windows, выполните перезагрузку системы для того, чтобы завершить их установку, а затем снова запустите команду.

Для функционирования системы User Mode Code Integrity нам нужно установить ключ реестра для того, чтобы разрешить размещению нашего модуля войти в режим Full Language Mode для Code Integrity Policy. В частности, рассматриваемый здесь модуль, по умолчанию, устанавливается по адресу %Program Files%\WindowsPowerShell\Module. Если это не так, соответствующий ключ реестра нужно настроить самостоятельно. Для этого нужно поместить путь, по которому установлен модуль (например, %Program Files%\WindowsPowerShell\Module) в запись типа REG_MULTI_SZ, которая называется «TestPath» и расположена в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\TRSData.

Итоги


Сегодня мы рассказали вам о новом средстве для настройки IoT-шлюзов Intel, которые работают под управлением Microsoft Windows. Рассмотренный здесь модуль для PowerShell, IntelIoTGatewaySetup, позволяет взаимодействовать со шлюзами как локально, так и удалённо, а собранные в нём команды помогают упростить и ускорить процедуры настройки шлюзов.

© Habrahabr.ru