В версии Active Directory, представленной в Windows Server 2016, появилась интересная возможность, позволяющая временно добавить пользователя в группу безопасности AD. Данный функционал временного членства в группах AD называется Temporary (Time Based ) Group Membership. Этот функционал можно использовать, когда пользователю нужно на время предоставить некие полномочия, основанные на членстве в группе безопасности AD. По истечению указанного времени пользователь будет автоматически удален из группы (без вмешательства администратора).
В этой статье мы рассмотрим особенности использования временного членства пользователей в группах Active Directory.
Для использования Temporary Group Membership нужно включить новую функцию Active Directory — Privileged Access Management Feature. По аналогии с Active Directory Recycle Bin (позволяет восстанавливать удаленные объекты), вы не сможете отключить PAM после включения.
Убедитесь, что функциональный уровень вашего леса AD —
Windows2016Forest
(или выше):
(Get-ADForest).ForestMode
Проверьте, включен ли функционал Privileged Access Management в текущем лесу с помощью команды из модуля AD PowerShell:
Get-ADOptionalFeature -filter *| select EnabledScopes
Нас интересует значение параметра EnableScopes, в этом примере оно пустое. Это значит, что функционал Privileged Access Management Feature для домена не включен.
Для его активации воспользуемся командой Enable-ADOptionalFeature с указанием имени домена:
Enable-ADOptionalFeature 'Privileged Access Management Feature' -Scope ForestOrConfigurationSet -Target contoso.com
Еще раз выполните команду
Get-ADOptionalFeature -filter *| select EnabledScopes
и проверьте, что поле EnableScopes теперь заполнено.
После активации PAM при добавлении пользователя в группу вы может указывать новый параметр MemberTimeToLive командлета
Add-ADGroupMember
. В данном параметре указывается время, на которое нужно предоставить доступ пользователя.
Удобно задать интервал времени (TTL) с помощью комнадлета New-TimeSpan. Допустим, вы хотите добавить пользователя a.ivanov в группу администраторов домена на 15 минут:
$ttl = New-TimeSpan -Minutes 15
Add-ADGroupMember -Identity "Domain Admins" -Members a.ivanov -MemberTimeToLive $ttl
Проверить оставшееся время, в течении которого пользователь будет состоять в группе поможет командлет Get-ADGroup:
Get-ADGroup “Domain Admins” -Property member –ShowMemberTimeToLive
В результатах выполнения команды среди членов групп можно увидеть запись формата <TTL=187,CN=Andrey A. Ivanov,OU=Users,DC=Contoso,DC=com>. Значение TTL отображается в секундах. Это означает, что данный пользователь добавлен в группу Domain Admins временно. Через 187 секунд он будет автоматически удален из группы.
При этом также просрочивается и его тикет Kerberos. Это реализуется за счет того, что для пользователя с временным членством в группе AD, KDC выдает билет со сроком жизни равным меньшему из оставшихся значений TTL.
Проверить время следующего обновления билета Kerberos можно командой:
Klist
Время следующего обновления билета TGT указано в параметре Renew Time.
Также в AD, начиная с версии Windows Server 2003 можно создавать временные группу AD. Для таких групп используется класс dynamicObject. Автоматическое удаление таких групп выполняется процедурой AD Garbage Collection.
Например, чтобы создать временную группу, которая автоматичски удалится через месяц (2592000=30*24*60*60), используйте следующий код PowerShell:
$OU = [adsi]"LDAP://OU=Groups,OU=SPB,OU=RU,DC=resource,DC=loc"
$Group = $OU.Create("group","cn=FS01_Public_tmp")
$Group.PutEx(2,"objectClass",@("dynamicObject","group"))
$Group.Put("entryTTL","2592000")
$Group.SetInfo()
Откройте атрибуты группы в консоли ADUC. Обратите внимание на атрибут entryTTL. В нем указано через сколько секунд данная группа будет удалена.
Ранее для реализации временного членства в группах AD приходилось использовать динамические объекты, скрипты и задания планировщика или сложные системы (FIM и т.п.). Теперь, в Windows Server 2016/2019 этот удобный функционал доступен из коробки.
«этот удобный функционал доступен из коробки»
Удобный функционал?! Вы серьёзно? Много вы выдели администраторов систем на Windows которые бы добавляли пользователей в группу посредством PowerShell?
Я не знаю, может это я тупой конечно. Но мне кажется не логичным, что для выполнения в общем-то повседневной задачи я должен держать в голове километровые строки команд на PS.
Так же мне вообще кажется весьма странным, что всё больше и больше вещей можно сделать только посредством PS. Я не хочу сказать, что командная строка это плохо. Отнюдь. Но если винда всё больше приближается к UNIX/Linux системам, то возникает законный вопрос — зачем тогда вообще её использовать? Linux бесплатен, а винда, на минуточку, стоит не малых денег, особенно в серверном варианте. Даже реализация той же службы каталогов, AFAIK, есть под Linux.
Администарторы Exchange уже с 2010 версии 80-90% своих повседневных задач выполняют через PowerShell. MS последовательно и неотвратимо убирает функции в ГУИ консоли.
На самом деле на типовых операциях PS руки набиваются довольно быстро. Тут дело привычки, со временем понимаешь что через командную консоль все даже быстрее делается.
У меня вообще есть ощущение, что MS последовательно и неотвратимо копает себе яму.
Обсуждение этого в разрезе данной статьи оффтоп конечно. Но всё же выскажусь почему я так считаю. Для очень многих домашних пользователей (а это сёрфинг, скайп, киношки и пару раз в месяц документ в текстовом редакторе) винда уже не нужна. Внезапно всё это есть в линуксе причём работает из коробки и бесплатно. Винда держится за счёт игроманов и инертности сознания. Плюс в СНГ за счёт того, что она тупо ворованная в большинстве случаев (т.е. за неё не надо платить). С игроманами ситуация может перемениться (консоли и Steam Machin/SteamOS от Valve). Инертность сознания тоже, как оказалось, ничего не значит. Ко мне человек пришел винду ну ноуте переставить. А я в порядке эксперимента предложил ему поставить Linux. Он спрашивает — а что это? Я говорю — типа как винда только не винда. Он — ?!?! Я — ты что на этом ноуте делаешь? Он — сёрфинг/скайп/киношки. Я — ну значит разницы ты и не заметишь особо. Поставил ему Xubuntu + Chromium + Skype. И всё. Отдал (причем еще и пароль рута забыл ему сказать), думал сейчас начнёт мне мозг клевать. Нет, не подошел ни разу. Я его через полгода спросил — как ноут? Он — да всё ок, всё работает, пользуюсь. Из чего я делаю вывод, что «обычному человеку» ему вообще все равно что у него там, лишь бы браузер запускался. И как выясняется головняка на линуксе даже меньше. Для меня для самого это шок был. Я не линуксоид ни разу. Линукс ставил второй раз в жизни на этот ноут.
Это что касается домашних пользователей. Теперь бизнес. Большинству контор (не всем конечно) нужен тот же самый набор задач, что и домашнему пользователю + еще 1С. А теперь вспоминаем как в последние годы стрельнули облачные технологии. Лично я не считаю их прям таки панацеей но многим пофиг. И это гораздо дешевле. Тот же 1С уже есть облачный. Это означает, что многим конторам вообще уже не нужна своя ИТ инфраструктура, можно полностью уйти в облака и держать только парк тонких клиентов.
Кто и зачем будет покупать у MS операционные системы в будущем?
Про обычных пользователей согласен, причем скорее всего они будут сидеть уже не за компами/ноутбуками, а на телефоне или планшете. Первые как класс отмирают (см. статистку продаж за последние 2-3 года).
По поводу корп. сектора: массового перехода в облака в РФ точно не будет, по крайней мере в среднем и крупном сегменте. Слишком сложно отдавать свои данные в третьи руки, к которым в любой момент могут придти люди в погонах и изъять файлы. Ну а тонкие клиенты — вполне себе могут иметь место.
Кстати да. Хотя многое удобнее делать на клаве с мышкой. Но это тоже дело привычки и инертность сознания. Я-то просто уже старый динозавр, работал за компами когда и мышь то у них не у всех была. А молодёжь вон тыкает в экранную клаву, которая пол экрана закрывает и их это ничуть не напрягает. И даже я за собой замечаю, что например сёрфить я стал больше на планшете/смартфоне. Как-то это удобнее оказалось делать лёжа кверху пузом чем сидя за столом ))) Так что всё верно — мобильные платформы грядут. И как раз на этом рынке MS _уже_ всё профукал. И похоже окончательно.
Про облака в корпоративном секторе. Да, массового перехода не будет. Но я думаю не по причине людей в погонах, а просто из-за того, что не всё получается [пока] засунуть в облако.
А люди с погонами это вообще тема отдельная. Опять же основанная в большей части на некомпетентности, заблуждениях и той же инертности сознания. Во-первых люди в погонах придут и тупо изымут сервера (это даже им будет проще). И внезапно оказывается, что у противников облаков и людей в погонах эта информация там хранится не зашифрованная. А то и вообще к ней доступ имеет кто ни поподя из внутренней сети, а большинство утечек происходит именно через инсайдеров, а не мифических хакеров. А даже если и зашифрована, то ключи шифрования знает админ. А админ человек наёмный и, как правило, не участвует в дележе доходов этого крупного бизнеса. И ему садиться, скрывая чужие преступления, смысла нет ну никакого (я свои работодателям это всегда объясняю прямо и заранее, что бы иллюзий не было). Во-вторых, кто поумнее, держит данные с облаках физически расположенных не в РФ. Там людям в погонах будет их получить посложнее.
А вообще надо жить честно 🙂
Всё именно так — точно так же пересадил несколько пользователей на Linux — порядок и тишина, всё работает, мир движется к кроссплатформенности.
ну Вы и кран.
Вброшу лишь один аргумент, автоматизация.
А как указать дату после которой пользователь должен быть удален из группы?
Попробуйте так. Вам нужно получить разницу во времени между будущей датой и текущей:
$StartDate = Get-Date
$EndDate = Get-Date '12/12/2018 00:00:00 AM'
$ttl = New-TimeSpan -Start $StartDate -End $EndDate
Как я понял из статьи, это работает только в
1) power shell
2) 2016 схеме.
Я из тех счастливчиков, у кого ни того ни другого. Поэтому пишу так
net group ts_users spl03 /add /domain
после этого создаю задачу на конкретное время и в ней пишу вот так: net group ts_users spl03 /delete /domain
Вроде не сильно сложнее, чем в PowerShell
Мы используем Динамические объекты. Скриптом создаешь группу, например «Удаленка Сидоров», у нее есть ТТЛ. Добавляешь группу в группу доступа, а пользователя во временную группу. Когда время жизни временной группы кончится пользователь потеряет членство в группе доступа.
Динамический объект можно создать так:
$OU = [adsi]″LDAP://cn=users,DC=domain,DC=local″
$Group = $OU.Create(″group″,″cn=Temp″)
$Group.PutEx(2,″objectClass″,@(″dynamicObject″,″group″))
$Group.Put(″entryTTL″,″900″)
$Group.SetInfo()
Часто надо пользователя посадить в группу n время, как это можно реализовать стандартными средствами. Планировщик и скрипт удаления пользователя из группы не предлагать.
А чем способ из статьи плох? или у вас старая версия домена?
Если старая — то только скрипты