Когда вы создаёте нового пользователя в Active Directory, он автоматически добавляется в группу Domain Users. Группа Domain Users в свою очередь по умолчанию добавляется в локальную группу Users на компьютере при добавлении его в домен AD. Это означает что любой пользователь домена может войти на любой компьютер в вашей сети. В этой статье мы рассмотрим, как ограничить вход пользователей на компьютеры домена и ограничить разрешенное время входа.
Разрешить вход на определенные компьютеры в свойствах пользователя AD
В свойствах (атрибутах) учетной записи пользователя Active Directory можно задать список компьютеров, на которые ему разрешено входить. Например, вы хотите, чтобы определенный пользователь мог войти только на свой компьютер. Для этого:
- Запустите оснастку ADUC (Active Directory Users and Computers), выполнив команду
dsa.msc
; - С помощью поиска найдите учетную запись пользователя, которому нужно ограничить вход только на компьютеры домена и откройте его свойства;
- Перейдите на вкладку Account и нажмите кнопку Log On To;
- Как вы видите, пользователю разрешено входить на все компьютеры (The user can log on to: All computer). Чтобы разрешить пользователю аутентифицироваться только на определенных компьютерах, выберите опцию The following computers и добавьте в список имена компьютеров, но которые ему разрешено входить; Примечание. Нужно указывать полное NetBIOS или DNS имя компьютера (нельзя знаки подстановки использовать), параметр регистронезависимый.
- Количество компьютеров, которые можно добавить в этот список ограничено 64. При попытке добавить 65 компьютер появится сообщение об ошибке: This property is limited to 64 values. You must remove some of the existing values before you can add new ones.
- Сохраните изменения. Теперь пользователь может входить только на указанные компьютеры.
dsac.msc
) и с помощью PowerShell вы можете разрешить пользователю входить более чем на 65 компьютер. Однако максимальное значение ограничивается типом данных атрибута Logon-Workstation в схема Active Directory (Octet String). В Windows Server 2016 + в этом атрибуте может содержаться до 8192 символов (в предыдущих версиях Windows Server 2003-2012 использовалось ограничение 1024 символов).Еще одна интересная особенность появляется, если вы ограничили пользователю список компьютеров разрешенных для входа с помощью атрибута LogonWorkstation.
При попытке подключится к удаленному компьютеру (RDS ферме) по RDP, вы можете получить ошибку:
The system administrator has limited the computers you can log on with.
Системный администратор ограничил количество компьютеров с которых вы можете войти в систему.
Для решения этой проблемы нужно добавить в список LogonWorkstation компьютер с которого (!!!) осуществляется RDP вход.
Изменяем атрибут LogonWorkstations с помощью PowerShell
Вручную заполнять список компьютеров, на которые разрешено входить пользователю домена довольно утомительно. С помощью PowerShell можно автоматизировать это действие. Список компьютеров, на которые разрешено входить пользователю хранится в атрибуте пользователя в AD – LogonWorkstations. Например, наша задача разрешить определенному пользователю входить только на компьютеры, чьи имена содержатся в текстовом файле computers.csv (в этом примере в первой строке файла должно содержаться имя столбца – NetBIOSName).
Скрипт может выглядеть так (сначала загружаем модуль AD для Powershell):
Import-Module ActiveDirectory
$ADusername = ‘aapetrov’
$complist = Import-Csv -Path "C:\PS\computers.csv" | ForEach-Object {$_.NetBIOSName}
$comparray = $complist -join ","
Set-ADUser -Identity $ADusername -LogonWorkstations $comparray
Clear-Variable comparray
С помощью командлета Get-ADUser команды можно вывести список компьютеров, на которые разрешено входить пользователю:
Get-ADUser $ADusername -Properties LogonWorkstations | Format-List Name, LogonWorkstations
Либо можно посмотреть список компьютеров в консоли ADUC.
Чтобы добавить в список новый компьютер, воспользуйтесь такой командой:
$Wks = (Get-ADUser dvivannikov -Properties LogonWorkstations).LogonWorkstations
$Wks += ",newpc"
Set-ADUser aapetrov -LogonWorkstations $Wks
Ограничить часы входа пользователя в Active Directory
В свойствах учетной записи пользователя вы можете ограничить время входа учетной записи. Например, вы можете разрешить пользователю входить на компьютеры домена только в рабочие часы с 8:00 до 19:00.
- Для этого откройте свойства пользователя в оснастке ADUС, перейдите на вкладку и нажмите кнопку Logon Hours (Время входа);
- По умолчанию для пользователей не ограничено время входа в домена (все выделено синим);
- Выделите диапазоны времени, в которые вы хотите запретить вход пользователя и нажмите Logon Denied (цвет диапазонов, в которые запрещено логиниться пользователям изменится на белый).
Если вам нужно применить одинаковы ограничения Logon Hours для нескольких пользователей, проще всего использовать PowerShell. Сначала вручную настройте ограничения для одного пользователя, а затем используете значение его атрибута logonHours в качестве шаблона для других пользователей. Например, вы хотите ограничить время входа для группы удаленных пользователей:
$templateuser='a.khramov'
$templatehours= Get-ADUser -Identity $templateuser -properties logonHours
Get-ADGroupmember "msk-VPN_Users" |foreach {Set-ADUSer $_.samaccountname -Replace @{logonHours = $templatehours.logonHours} }
Если пользователь попытайся войти в компьютер за пределами разрешенных logonhours, он получит ошибку:
Account restrictions are preventing this user from signing in. For example: blank passwords aren't allowed, sign-in times are limited, or a policy restriction has been enforced.
В Windows нет встроенного функционала по принудительному завершению сессии пользователе, если его рабочее время закончено. Для гарантированного выполнения
logoff
можно создать простое задание планировщика и распространить его через GPO.
Также обратите внимание на два параметра GPO в разделе to Computer configurations -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options.
- Network security: Force logoff when logon hours expire
- Microsoft network server: Disconnect clients when logon hours expire
При включении этих политик SMB сервера будут отключать подключения пользователей, чьи часы работы просрочены.
Ограничить вход на компьютеры в Active Directory с помощью GPO
В больших доменах использовать свойство пользователя LogonWorkstations для ограничения доступа пользователей к компьютерам нецелесообразно из-за ограничений и недостаточной гибкости. Для более гибкого управления правилами запрета/разрешения входа на компьютеры используют групповые политики.
Можно ограничить список пользователей в локальной группе Users с помощью политики Restricted Groups (см. пример использования политик Restricted Groups из раздела Windows Settings -> Security Settings для добавления пользователей в локальную группу администраторов). Но мы рассмотрим другой вариант.
Есть две групповые политики, которые находятся в разделе Computer Configuration -> Policies -> Security Settings -> Local Policies -> User Rights Assignment (Конфигурация пользователя -> Политики -> Параметры безопасности -> Локальные политики -> Назначение прав пользователя):
- Deny log on locally (Запретить локальный вход) – позволяет запретить локальный вход на компьютеры для определенных пользователей или групп. ;
- Allow log on locally (Локальный вход в систему) – содержит список пользователей и групп, которым разрешено входить на компьютер локально.
Например, чтобы запретить пользователям определенной группы входить на компьютеры в определенной Organizational Unit (OU), вы можете создать отдельную группу пользователей, добавить ее в политику Deny log on locally и назначить ее на OU с компьютерами, доступ к которым вы хотите ограничить.
В больших доменах можно использовать комбинацию этих политик. Например, вы хотите запретить пользователям входить на компьютеры других OU.
Для этого в каждой OU нужно создать группу безопасности, куда нужно включить всех пользователей OU.
Import-module ActiveDirectory
$rootOU = “OU= Users,OU=MSK,DC=winitpro,DC=ru”
$group = “corp\msk-users”
Get-ADUser -SearchBase $rootOu -Filter * | ForEach-Object {Add-ADGroupMember -Identity $group -Members $_ }
Затем нужно включить параметр GPO Allow log on locally, добавить в него эту группу (+ различные администраторские группы: Domain Admins, администраторы рабочих станций и прочее) и назначить политику на OU с компьютерами. Таким образом вы разрешите входить на компьютеры только пользователям конкретного OU.
Обновите настройки GPO на клиентах. Теперь при попытке входа пользователя, которому не разрешен локальный метод входа, появится окно с предупреждением:
You cannot log on because the logon method you are using is not allowed on this computer. Please see your network administrator for more information.
Или
The sign-in method you are trying to use isn’t allowed. For more info, contact your network administrator.
Несколько важных моментов касательно данных политик:
- Не стоит применять данные политики, для ограничения доступа к серверам и тем более к контроллерам домена;Как разрешить обычным пользователям RDP доступ к DC.
- Не включаете эти политики через стандартные GPO: Default Domain Policy или Default Domain Controllers Policy;
- Запрещающая политика имеет больший приоритет;
- Не забывайте про сервисные учетные записи(в том числе gMSA), которые могут использоваться для запуска служб на компьютерах;
- Не стоит применить политики, ограничивающие локальный вход на весь домен. Назначайте их на конкретные OU;
- Пользователи смогут подключаться компьютерам с помощью интерактивных RDP сессий несмотря на запрет локального входа. Для этого нужно, чтобы на компьютере был включен протокол RDP и учетная запись пользователя находилась в группе Remote Desktop Users.
Спасибо за статью
Спасибо за публикации. всегда нахожу что-то полезное для себя
Здравствуйте! Есть задача, после работы выключить компьютер и блокировать доменные учётные записи. Задача выполнено через GPO и Время входа. Но пользователей после работы обратно включает компьютер и отключают сетевые подключения и авторизуется со своими учетными записями к компьютеру и обратно включает сетевое подключение. Как с этим бороться?
Через GPO разместить на всех компах локальное задание планировщика. Время запуска с 18:00 до 09:00 каждые 5 минут — выполнить команду выключения компьютера.
Отключить кэш пароля. и как верно заметил itpro настроить логаут.
https://winitpro.ru/index.php/2020/11/16/cached-credentials-windows-cashedlogonscount
Как поставить «галочку» доступа на все компьютеры?
Не понял вопроса. Сбросить галку на одном компьютере или изменить настройки на всех ПК в домене?
Добрый день.
После настройки ограничения по входу на ПК, у пользователя пропадает возможность подключаться по RDGW. В списке разрешенных, указаны ПК и сервер RDGW. Подскажите пожалуйста, можно ли решить эту проблему ?
Приветствую,
а если пользователей много, а не один?
выгрузил SamAccountName в *.csv как его теперь правильно подставить в ваш код?
Можно загрузить список пользователей из текстового файл:
$complist = Import-Csv -Path "C:\PS\computers.csv" | ForEach-Object {$_.NetBIOSName}
$comparray = $complist -join ","
$Users = gc "c:\PS\Users.txt"
foreach ($User in $Users) {
Set-ADUser -Identity $User -LogonWorkstations $comparray
}
Код не проверял — но по логике как-то так. Т.е. получаем список пользователей из файла, а потом для каждого пользователя добавляем список разрешенных компьютеров (в этом примере подразумевается, что список компов один)
Работает!
Спасибо!
Добрый день! Статический список работает — спасибо
Но у меня задача следующая: мне нужно из csv файла вида user,pc1,pc2,pc3 указать каким пользователям какие пк доступны для входа — у всех пользователей свой набор пк для входа. Как такое реализовать?
Import-Module ActiveDirectory
Import-CSV C:\temp3\pclist2aa.csv | % {
$UserN = $_.SamAccountName
$ComputerN1 = $_.LogonWorkstations1
$ComputerN2 = $_.LogonWorkstations2
$ComputerN3 = $_.LogonWorkstations3
$ObjFilter = "(&(objectCategory=person)(objectCategory=User)(samaccountname=$UserN))"
$objSearch = New-Object System.DirectoryServices.DirectorySearcher
$objSearch.PageSize = 15000
$objSearch.Filter = $ObjFilter
$objSearch.SearchRoot = "LDAP://dc=test,dc=company,dc=com"
$AllObj = $objSearch.findOne()
$user = [ADSI] $AllObj.path
$ErrorActionPreference = "silentlycontinue"
If (($user.get("userWorkstations")) -ne $null)
{$ComputerN = $user.get("userWorkstations")+","+ $ComputerN1 +","+ $ComputerN2 +","+ $ComputerN3}
Write-host -NoNewLine "Updating $UserN Properties ..."
$user.psbase.invokeSet("userWorkstations",$ComputerN)
Write-host "Done!"
$user.setinfo()
}
Этот пример не сработал почему-то
У вас скрипт на правку атрибутов через LDAP. В статье я предлагаю использовать модуль AD PowerShell. Это несколько проще.
Все верно список статический. А что вы подразумеваете под динамическим?
Навскидку, если у вас всего 3 компа в строке можно сделать так:
Import-Csv C:\temp3\pclist2aa.csv| foreach {Set-ADUser -Identity $_.SamAccountName -LogonWorkstations '$_.ComputerN1 + "," + $_.ComputerN2+ "," + $_.ComputerN3'}
Добрый день. Мне нужно применить GPO на OU, в которой хранятся компьютеры, но для конкретных пользователей. При этом данные пользователи размещены в другом OU. Можно ли это реализовать, создав политику и с настройками для пользователей, применить ее к OU с компьютерами и OU с пользователями и включив loopback? Заранее спасибо за ответ
Все верно — политику нужно применить к OU компьютерам и использовать Loopback Policy Processing
Добрый день!
Подскажите а как ограничить в ход на доменные копы, но ч о в почту с любого браузера мог входить
А браузер запускаете на компьютере/устройстве не в домене? Тогда разрешить вход толькос фейкового компьютера (т.е. доступ на все компьютеры будет запрещен).
Спасибо за статью! Как всегда все очень грамотно и по теме! 🙂
Может еще подскажите — как сделать, чтобы по RDP-подключению пользователя тоже пускало на указанные в The following computers физические компы или VM?
Доступ по RDP пропадает:(
Не быстро, но отвечу ))
Для этого необходимо в The following computers указать имя ПК с которого будут подключаться, т.е. если имя ПК юзера user1 а сервер куда надо подключиться server1 то прописать необходимо user1 и server1, либо обмануть прописав в файлике RDP параметр enablecredsspsupport:i:0 , тогда ПК юзера можно не прописывать.
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff393716(v=ws.10)
Как через powershell установить пользователю разрешение входить на все компьютеры домена?
По умолчанию вход на компьютеры домена под доменным аккаунтом не ограничен. Если ограничен, то как? В зависимости от этого нужно искать логику разрешения входа.
Здравствуйте, а есть задача несколько иного рода. В домене пользователям изначально в свойствах заданы компы на которые он вхож. Тут появляется что то типа компьютерного класса где проходят обучалки разного рода, и на эти компы нужно впустить конкретную группу…. Как это сделать если всем изначально присвоены компы. Пользователей более 400….
Я бы собрал компьютеры класса в одну OU/группу и POwerShell скриптом добавил их в LogonWorkstations всем пользователям. Потом аналогичным образом бы удалил.
Да ,так и сделал. В PowerShel я новичок, поэтому пришлось попотеть))) Но скрипт сделал, и теперь выгружаю список пользователей, потом скриптом просто прогоняю весь список пользователей вписывая им определённый набор компьютеров. Спасибо за ответ.
Добрый день! При включении это функции, перестает заходить на почту через веб интерфейс. почтовый сервер kerio connect. в логах пишет что не правильный введен пароль. Не знаете как решить эту проблему?
Возможно в свойствах учетки нужно разрешить вход на компьтер с kerio
Таких параметров нет
Приветствую
А как-то можно поменять надпись «Системный администратор ограничил количество компьютеров с которых вы можете войти в систему.» на что-то другое?
Штатно — нет. Если толкьо модифицировать какуюту библиотеку, где это хранится. Но это такое себе…
Интересный сценарий — пытаюсь подключиться со своего компьютер по RDP подключиться к RDS под другим пользователем (пользователю разрешено входить только на RDS) и получают ошибку:
Remote Desktop Connection
The system administrator has limited the computers you can log on with. Try logging on at a different computer. If the problem continues, contact your system administrator or technical support.
Как оказалось, если используется NLA для RDP, в этом случае нужно добавить в разрешенные еще и компьютер источник. Т.к. по факут пользователь аутентфицируется на нем.
При попытке добавить в политике в «Локальный вход в систему» например группу AD не удается сохранить конфигурацию, пишет
Администраторы должны иметь право локального входа в систему
Как ее можно использовать?
Чтобы автоматически блокировать сеанс пользователя, чье разрешенное время работы истекло, нужно включить параметр GPO Set action to take when logon hours expire в User Configuration -> Administrative Templates -> Windows Components -> Windows Logon Options
Можно заблокировать сеанс (lock), завершить (logoff) или отключить (disconnect)