Резюме: Приглашенный блогер, Windows PowerShell MVP Don Jones рассказывает об аутентификации при использовании удаленных подключений.
Microsoft Scripting Guy, Ed Wilson на связи. Сегодня у меня для вас нечто особенное. Windows PowerShell MVP Don Jones только что выпустил новую книгу и мы приводим здесь ее отрывок.
Learn Windows PowerShell 3 in a Month of Lunches, Second Edition
By Don Jones
Обычно аутентификацию рассматривают как односторонний процесс: вы хотите подключиться к удаленной машине, и вам нужно предоставить ей свои учетные данные перед тем как она предоставит вам доступ. Но Windows PowerShell использует взаимную аутентификацию. В этой статье, основанной на материале главы 23 из книги Learn Windows PowerShell 3 in a Month of Lunches, Second Edition, ее автор Don Jones рассказывает об аутентификации при использовании удаленных подключений.
Погружаемся в удаленную аутентификацию
Удаленные подключения Windows PowerShell используют взаимную аутентификацию, что означает, что удаленная машина также должна подтвердить вам свою подлинность. Другими словами, если вы запускаете команду Enter-PSSesion –computerName DC01, компьютер с именем DC01 должен вам доказать, что это действительно он, преед тем как подключение установится.
Для чего это нужно? Обычно, ваш компьютер разрешает имя компьютера (такое, как DC01) в IP-адрес посредством Domain Name System (DNS). Мы не можем сказать, чтоб DNS не подвержен спуфингу, и мы не можем быть уверены, что злоумышленник не подменил запись DNS для компьютера DC01 и не указал в ней другой IP-адрес – тот, который им контролируется. Не зная этого, вы можете установить подключение к компьютеру с именем DC01, оказаться на компьютере злоумышленника и начать делегировать свои учетные данные – довольно скверно. Взаимная аутентификацию препятствует этому: если компьютер, к которому вы подключаетесь не может подтвердить свою подлинность – подключение не установится. Это полезная функция, и я не думаю что вы решите отключить ее без особой необходимости.
Как происходит взаимная аутентификация по умолчанию
Microsoft предполагает, что Windows PowerShell будет использоваться в основном в сетях с Active Directory. Если вы указываете действительные имена компьютеров при выполнении подключения, т.е. так как они указаны в Active Directory, взаимная аутентификация будет выполнена доменными службами.
Это также верно и для подключения к компьютерам в других, доверяющих доменах. Идея в том, что вы должны предоставить Windows PowerShell имя компьютера, удовлетворяющее обоим следующим требованиям:
-
Имя должно разрешаться в IP-адрес
-
Имя должно соответствовать имени компьютера в Active Directory
Указание имени компьютера, входящего в ваш локальный домен или полностью определенного доменного имени (FQDN, такого как DC01.COMPANY.LOC) компьютера в доверяющем домене обычно удовлетворяет обоим требованиям. Но если вам нужно указать IP-адрес, или некоторое другое имя DNS (например CNAME алиас), то взаимная аутентификация не сработает. В этой ситуации у вас есть два варианта: SSL или TrustedHosts.
Взаимная аутентификация через SSL
Для использования этого метода, вам нужно получить цифровой сертификат SSL для машины, к которой вы собираетесь подключиться. Сертификат должен быть выдан на то же имя, которое вы будете указывать в команде подключения. Именно так, если вы вводите команду Enter-PSession –computerName DC01.COMPANY.LOC -UseSSL -credential COMPANY\Administrator, то сертификат, установленный на DC01 должен быть выдан на имя «dc01.company.loc». В ином случае подключение не установится. Заметьте, что параметр -credential является обязательным при использовании данного сценария.
После получения сертификата, вам нужно установить его в Хранилище личных сертификатов (Personal) компьютера – это удобнее всего сделать из Microsoft Management Console (MMC). Если просто дважды щелкнуть на сертификате – он установится в персональное хранилище пользователя. Для нашего сценария это не подходит.
После установки сертификата, вам нужно создать HTTPS-Listener на компьютере и указать, что он должен использовать полученный сертификат. Пошаговая инструкция для этого процесса достаточно объемная, и так как вряд ли этим будет заниматься большое количество людей, мы не будем приводить все это здесь. Если вам все таки интересно – взгляните на Don’s Secrets of PowerShell Remoting guide. Там вы найдете пошаговые инструкции со скриншотами.
Взаимная аутентификация через TrustedHosts
Это несколько проще, нежели использование SSL-сертификата и требует гораздо меньше настройки, но в то же время и опаснее, поскольку это фактически отключает взаимную аутентификацию для определенных хостов. Перед тем как использовать этот способ, вы должны быть полностью уверены в следующем заявлении: «это маловероятно, что кто-либо сможет скомпрометировать один из этих хостов или подменить их DNS-записи». Для компьютеров вашей внутренней сети, вы с большой степенью вероятности можете быть в этом уверены.
Затем вам нужно идентифицировать компьютеры, которым вы будете доверять без использования взаимной аутентификации. В доменной среде это может быть что-то вроде «*.COMPANY.COM» для всех хостов домена company.com.
В этом случае вы, вероятнее всего захотите указать эти настройки для всех компьютеров домена, поэтому мы рассмотрим как это сделать при помощи групповой политики. Вы также можете воспользоваться этими инструкциями и при настройке локальной групповой политики компьютера.
В любом объекте групповой политики или редакторе локальной групповой политики выполните следующее:
1. Разверните Computer Configuration
2. Разверните Administrative Templates
3. Разверните Windows Components
4. Разверните Windows Remote Management
5. Разверните WinRM Client
6. Дважды щелкните на Trusted Hosts
7. Включите политику и укажите список доверенных компьютеров. Несколько записей могут быть разделены запятыми, например «*.company.com,*.sales.company.com».
Заметка: Более ранние версии Windows могут не обладать шаблонами для отображения этих настроек в локальной групповой политике. Это также касается и контроллеров домена, работающих на ранних версиях Windows, и их объектов доменной групповой политики. В этом случае вы можете указать список доверенных хостов в Windows PowerShell. Для инструкций как это сделать запустите команду Help about_remote_troubleshooting в консоли PowerShell.
Summary
Теперь взаимная аутентификация не помешает вам подключиться к этим компьютерам. При подключении вам необходимо указать параметр credential – без него попытка подключения окончится неудачей.
На этом все. Книга Дона станет доступна в течение этого месяца.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell