• Инфраструктура открытых ключей в Windows Server 2016. Отказоустойчивость

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

    • Внедрение Инфраструктуры Открытых Ключей на основе Windows Server. Установка и настройка издающего центра сертификации

      В этой части нашего цикла мы рассмотрим развертывание издающего удостоверяющего центра в двухуровневой иерархии. В отличие от корневого, этот сервер должен быть постоянно доступен клиентам, причем здесь мы имеем в виду не только возможность получения сертификатов, но и что важней, их отзыва при компрометации. Точно также, как и с корневым УЦ, перед установкой понадобится подготовить файл capolicy.inf [1] и разместить его правильном месте расположения [2].

      • Установка и настройка корневого центра сертификации (RootCA)

        Степан Москалев

        Леонид Шапиро

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

        • Внедрение Инфраструктуры Открытых Ключей на основе Windows Server 2016

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

          • Доверие в сфере информационных технологий

            • Рубрика: Security,Windows
            • Автор: Леонид Шапиро
            • Дата: Friday 09 Mar 2018

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

            • Публикация виртуальных машин в UAG

              Microsoft Forefront Unified Access Gateway (UAG) 2010 – очень интересное средство для публикации внутренних ресурсов для внешних (да и внутренних тоже) пользователей. Но вот есть в нем очень серьезный недостаток – нет никаких средств автоматизации процесса управления. Точнее так, средства автоматизации есть, в виде COM-интерфесов, но они недокументированы и понять, как они работают и какие параметры принимают, мне так и не удалось.
              • Microsoft DirectAccess 2012: DirectAccess и Windows 8

                ed31_earth_in_my_room

                В прошлой статье я постарался в понятной форме рассказать о технологии DirectAccess, о ее плюсах и минусах. Теперь, как и обещал, расскажу о том, каким образом настроить сервер DirectAccess в базовой конфигурации для работы только с клиентами Windows 8. Что значит в базовой конфигурации? Это когда у вас есть Windows Server 2012 на котором будет поднята роль для DirectAccess и  клиенты (с операционной системой Windows 8 Enterprise) имеющие  прямое подключение к интернету . В базовой конфигурации не будет использоваться инфраструктура открытых ключей (PKI) и  используется только одна входная точка (сервер DirectAccess), подключенная в одном сайте Active Directory. Так же в базовую конфигурацию не могут входить дополнительные опции, такие как двухфакторная аутентификация (OTP Auth), проверка доступа к сети (NAP). Ну и самое важное – в ней не могут использоваться клиенты Windows 7.

                • Microsoft DirectAccess 2012: Введение

                  ed31_earth_in_my_room

                  Время не стоит на месте, и мы, что бы не отставать от современного ритма, должны быть активными и мобильными. Для организаций любого уровня становится все  более важным иметь простой и  безопасный способ подключения удаленных и мобильных клиентов к внутренней сети предприятия. Одной из распространенных технологий удаленного доступа  является  VPN, хотя можно было обойтись и без него, используя  прямые подключения средствами RDP, Radmin, Ammyy и тому подобных вещей. Теперь в списке появляется значимая альтернатива – Microsoft DirectAccess 2012. Число 2012 говорит нам о том, что это сервис включенный в новую редакция сервера Windows Server 2012. Это важно, потому что DirectAccess уже был реализован в 2008 R2, но с кучей нюансов и серьезных требований к инфраструктуре предприятия, где внедряли DirectAccess 2008 R2. Именно поэтому  я специально сказал, что только теперь появилась альтернатива для удаленного подключения клиентов, и сейчас объясню почему.

                • Главная Windows, Без рубрики, Новое Windows Server 2012
                  • Windows Server 2012: новые возможности (Часть1)

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

                  • Главная Windows, Без рубрики, Новое Active Directory, PowerShell, Windows 2008 R2
                    • Типовые задачи администрирования AD с использованием PowerShell

                      monolisa-ascii_thumbВсем администраторам Active Directory периодически приходится сталкиваться с рутинными задачами, которые хотелось бы так или иначе автоматизировать. Как правило, это делается с использованием скриптов на наиболее известных языках программирования: VBScript, Jscript, PowerShell. Последний я считаю наиболее удобным. Благодаря некоторым из его особенностей те же процедуры, которые занимают в VBScript десяток строк и требуют понимания работы WMI, LDAP и еще многих китайских слов – в PowerShell занимает всего пять строк и требуют всего лишь знания программирования на уровне школьных уроков информатики. В настоящей статье мы рассмотрим типовые задачи администрирования Active Directory, и их автоматизацию с помощью PowerShell.

                      P.S. Статья рассчитана на полных, или почти полных «чайников», пару раз видевших или где-то слышавших о PowerShell. На звание Терминатора не претендую, по сему просьба ногами не пинать.

                       

                      Общие положения

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

                      В первую очередь, необходимо заметить, что для того, чтобы все нормально работало – необходимо иметь хотя бы один контроллер домена Windows Server 2008 R2 с установленной компонентой ActiveDirectory Web Services. Увы и ах, Windows Server 2003 уходит на свалку истории. Для работы с модулем ad_powershell необходимо установить Remote Server Administration Tools, его так же можно установить на рабочем компьютере и запускать скрипты оттуда. Разумеется, ОС на компьютере должна быть не ниже Windows 7. На контроллерах домена Windows Server 2008 R2 необходимые компоненты уже установлены.
                      Перед тем, как выполнять скрипты – необходимо установить политику выполнения скриптов. По умолчанию, в целях безопасности включена политика Restricted, что означает, что на данном компьютере вообще запрещен запуск любых PowerShell-скриптов. О том, какие еще бывают политики выполнения – можно почитать в мануале:

                      Get-Help Set-ExecutionPolicy –Detailed

                      В нашем случае я рекомендую установить политику RemoteSigned, что позволит запускать любые собственноручно написанные скрипты, при этом запуск скриптов, скачанных из Интернета будет возможен только при наличии цифровой подписи с доверенным сертификатом. Запустите оболочку PowerShell с правами администратора (Run as Administrator) и выполните команду

                      Set-ExecutionPolicy RemoteSigned

                      Можно так же выбрать политику Unrestricted, что вообще позволит запускать любой скрипт, независимо от того, откуда он взялся – но я делать этого не рекомендую из соображений безопасности.

                      Теперь можно проверить работу скриптов – написать простейший скрипт «Hello World!». Я предпочитаю пользоваться PowerShell ISE, хотя можно писать и в простейшем Notepad’е. PowerShell ISE – удобная среда програмирования для PowerShell с возможностью отладки. Входит в состав ОС Wondows 7 и 2008 R2. Вобщем, рекомендую.

                      image

                      Теперь переходим непосредственно к автоматизации. Для того, чтобы создать объекты в Active Directory, или изменить какие-либо свойства, нам необходим список объектов со всеми необходимыми параметрами. Например, список пользователей может содержать следующие парамеры: Имя, Фамилия, Логин, Пароль. Проще всего для этого использовать CSV-файл. CSV – это текстовый файл, содержащий список объектов (например – пользователей), с разделением параметров каким-либо символом (как правило, это запятая «,», хотя может быть и точка с запятой, знак табуляции и т.д.). Каждый объект обозначается одной строчкой. Так же, первая строчка может содержать список параметров.

                       

                      Пример:

                       

                      Name;Surname;Login;Password

                      Ivan,Ivanov;i.ivanov;p@ssw0rd1

                      Petr,Petrov;p.petrov;p@ssw0rd2

                      Sidor;Sidorov;s.sidorov;p@ssw0rd3

                       

                      Чтобы получить список объектов из CSV-файла, используется командлет Import-CSV:

                      $Users = Import-CSV “c:\temp\users.csv”

                      Такой файл можно создать и в блокноте, но проще всего будет использовать Microsoft Excel. В Excel необходимо при сохранении файла выбрать формат CSV. Интересно, что Excel при сохранении в формат CSV в качестве разделителя использует знак “;”, хотя вроде бы написано «CSV (разделители – запятые)». PowerShell же по умолчанию считает, что в качестве разделителя используется запятая («,»). Чтобы наш скрипт работал корректно – необходимо либо заменить в CSV-файле все точки с запятой на запятые (используя автозамену в блокноте) либо же, что на мой взгляд правильнее – указать в скрипте использовать точку с запятой в качестве разделителя:

                      $Users = Import-CSV “c:\temp\users.csv” –Delimiter “;”

                      Чтобы проверить, как прошел импорт – можно посмотреть, что хранится в переменной $Users.

                      image

                      Как видим, в переменной $Users теперь хранится массив объектов с параметрами Name, Surname, Login, Password. Эти параметры можно использовать для создания учетных записей пользователей в AD.

                      Прежде чем приступить к работе с Active Directory, необходимо произвести импорт соответствующего модуля в PowerShell. Только после этого появятся команды для работы с AD:

                      Import-Module ActiveDirectory

                      Эту строку можно (и даже нужно) вставлять в начало всех скриптов – чтобы не вводить эту команду вручную.

                       

                      Создание учетных записей пользователей

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

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

                       

                      • Name – имя пользователя
                      • Surname – фамилия пользователя
                      • Password – пароль
                      • OU – организационное подразделение, где будет находиться пользователь (вида Contoso_Users/Fin/Accounting)

                       

                      Вначале нам нужно импортировать пользователей из списка:

                      $Users = Import-CSV $1 –Delimiter “;”

                      Параметр $1 означает, что в качестве пути к CSV-файлу будет использоваться первый по счету параметр командной строки. Запускаться скрипт будет следующим образом:

                      PS C:\Users\admin > Add_Users.ps1 c:\temp\users.csv

                      Далее нам нужно пройтись по всему массиву пользователей из списка:

                      Foreach($CurrentUser in $Users) {

                      Знак открытой фигурной скобки означает начало цикла. Этот цикл проходит по всем объектам списка, и прискаивает текущий объект переменной $CurrentUser.

                      Затем, для упрощения – присвоим значения соответствующих полей отдельным переменным:

                       

                      $Name = $CurrentUser.Name

                      $Surname = $CurrentUser.Surname

                      $Password = $CurrentUser.Password

                      $OU = $CurrentUser.OU

                       

                      Для того, чтобы задать пароль пользователю – необходимо перевести его в шифрованный формат SecureString:

                      $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

                      Так же, OU нам нужно перевести в формат, соответствующий стандарту LDAP (для примера выше: “OU=Accounting,OU= Fin,OU= Contoso_Users,DC=contoso,DC=com”).

                       

                      Для этого вначале разделим строку $OU на отдельные составляющие:

                      $OUTmp = $OU –Split “/”

                       

                      В результате переменная $OUTmp будет содержать массив из всех элементов пути:

                      PS C:\Users\admin> $OUTmp

                      Contoso_Users

                      Fin

                      Accounting

                       

                      Далее, используя командлет Foreach-Object, получим из нашего массива первую часть LDAP-пути:

                       

                      $Path = “” #незабудьте проинициализировать переменную!

                      $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

                       

                      В переменной $Path появляется первая часть LDAP-пути:

                       

                      PS C:\Users\admin> $Path

                      OU=Accounting,OU=Fin,OU=Contoso_Users,

                       

                      Теперь нам нужно получить полный путь, добавив к пути домен:

                       

                      $Path += “DC=contoso,DC=com”

                      Получили полный LDAP-путь:

                      PS C:\Users\admin> $Path

                      OU=Accounting,OU=Fin,OU=Contoso_Users,DC=contoso,DC=com

                       

                      Теперь сформируем дисплейное имя пользователя, его логин, User Principal Name.

                       

                      $Login = $Name[0] + “.” + $Surname #логин формируется из первой буквы имени и фамилии, например: i.ivanov

                      $Displayname = $Name + “ “ + $Surname #Дисплейное имя: Ivan Ivanov

                      $UserPrincipalName = $Login + “@contoso.com

                       

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

                       

                      New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

                      Здесь, в принципе, все параметры понятны. Параметр -ChangePasswordAtLogon 1 означает, что пользователю будет предложено сменить пароль сразу после логина.

                      По умолчанию в PowerShell, в отличие от стандартного визарда в оснастке ActiveDirectory Users And Computers учетные записи только что созданных пользователей будут отключены (Disabled). Поэтому сразу после создания учетные записи нужно включить:

                      Enable-ADAccount $Login

                      Теперь нужно закрыть цикл знаком «}». Можно сохранять скрипт и пробовать.

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

                       

                      Import-Module ActiveDirectory

                      $Users = Import-CSV $1 –Delimiter “;”

                      Foreach($CurrentUser in $Users) {

                      $Name = $CurrentUser.Name

                      $Surname = $CurrentUser.Surname

                      $Password = $CurrentUser.Password

                      $OU = $CurrentUser.OU

                      $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

                      $OUTmp = $OU –Split “/”

                      $Path = “” #незабудьте проинициализировать переменную!

                      $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

                      $Path += “DC=contoso,DC=com”

                      $Login = $Name[0] + “.” + $Surname

                      $Displayname = $Name + “ “ + $Surname #в кавычках – пробел!

                      $UserPrincipalName = $Login + “@contoso.com”

                      New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

                      Enable-ADAccount $Login

                      }

                       

                      Создание учетных записей компьютеров

                      Как известно, для работы с Active Directory перво-наперво необходимо вводить компьютеры в домен. Сделать это можно двумя способами:

                      · Мышкой – самый известный способ, через «Свойства» «Моего компьютера». Легко и просто.

                      · Командой netdom join. Тоже несложно, и можно использовать в скриптах.

                      У первого способа есть существенный недостаток: учетные записи компьютеров создаются в дефолтном OU Computers. В организациях же, как правило имеются разные OU для разных типов компьютеров (сервер, десктоп, ноутбук), а так же отдельные OU для разных отделов/департаментов/и т.д., с различными групповыми политиками, действующими для разных OU. Поэтому после ввода компьютеров в домен необходимо переносить учетные записи компьютеров вручную в соответствующий OU, а затем перезагружать компьютер еще раз, чтобы на нем применились все необходимые политики. При использовании команды netdom можно указать нужное OU, но набирать все это с клавиатуры – та еще задачка, особенно – когда компьютеров много, и особенно, что часто бывают – задачку эту поручают простым эникейщикам. Где-то в какой-то букве обязательно ошибется.

                      Самый лучший выход из этой ситуации – создать учетные записи компьютеров заранее, в соответствующих OU. Тогда компьютер сразу после ввода в домен и перезагрузки применит все соответствующие политики.

                      Разумеется, учетные записи компьютеров, как и пользователей, можно создавать и вручную. Но, поскольку мы – админы, а не эникейщики – будем использовать PowerShell.

                      Для учетных записей, как и для компьютеров, используем CSV-файл

                      ComputerName;OU

                      Server1;Cnotoso_Computers/Servers

                      Server2;Cnotoso_Computers/Servers

                      Desktop1;Cnotoso_Computers/Desktops

                      Desktop2;Cnotoso_Computers/Desktops

                      Desktop3;Cnotoso_Computers/Desktops

                      Laptop1;Cnotoso_Computers/Laptops

                       

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

                       

                      Import-Module ActiveDirectory

                      $Computers = Import-CSV $1 –Delimiter “;”

                      Foreach($CurrentComputer in $Computers) {

                      $ComputerName = $CurrentComputer.ComputerName

                      $OU = $CurrentComputer.OU

                      $OUTmp = $OU –Split “/”

                      $Path = “” #незабудьте проинициализировать переменную!

                      $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

                      $Path += “DC=contoso,DC=com”

                      New-ADComputer –Name $ComputerName –Path $Path

                      }

                       

                      Массовый сброс паролей

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

                      Структура CSV-файла:

                      • Login – логин пользователя
                      • NewPassword – новый пароль

                      Import-Module ActiveDirectory

                      $Users = Import-CSV $1 –Delimiter “;”

                      Foreach($CurrentUser in $Users) {

                      $Login = $CurrentUser.Login

                      $NewPassword = $CurrentUser.NewPassword

                      $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

                      Set-ADAccountPassword –Identity $Login –Reset –NewPassword $SecurePwd

                      }

                       

                      Массовое изменение параметров

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

                       

                      • Имя
                      • Фамилия
                      • E-Mail
                      • Телефон
                      • Организация (у компании несколько юр.лиц)
                      • Должность

                       

                      Из нее мы создаем CSV-файл с полями:

                       

                      • Name
                      • Surname
                      • E-Mail
                      • Phone
                      • Organization
                      • JobTitle

                       

                      Скрипт будет следующего вида:

                       

                      Import-Module ActiveDirectory

                      $Users = Import-CSV $1 –Delimiter “;”

                      Foreach($CurrentUser in $Users) {

                      $Name = $CurrentUser.Name

                      $Surname = $CurrentUser.Surname

                      $Email = $CurrentUser.E-Mail

                      $Phone = $CurrentUser.Phone

                      $Organization = $CurrentUser.Organization

                      $JobTitle = $CurrentUser.JobTitle

                      $Login = (Get-ADuser –Filter {GivenName –eq $Name –and Surname –eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин

                      Set-ADUser $Login –EmailAddress $Email –MobilePhone $Phone –Company $Organization –Title $JobTitle

                      }

                       

                      Заключение

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

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

                      Например:

                       

                      • Добавить обработку ошибок (например, если пользователь с таким именем уже существует, или наоборот – не существует) – конструкции типа try… catch…
                      • Автоматическую генерацию паролей заданной длины и сложности
                      • Вывод логинов с автоматически сгенерированными праолями для только что созданных учетных записей в CSV-файл – командлет Export-CSV

                       

                      Ресурсы

                      Эти ресурсы очень сильно помогут в изучении PowerShell. Во всяком случае мне они помогли.

                      Надеюсь, эта статья была вам полезна, и кто-то, кто раньше боялся консоли – перестанет ее бояться. Улыбка

                      Александр Косивченко