Управление UPN суффиксами (UserPrincipalName) в Active Directory
21.05.2021
itpro
Active Directory, Azure, Windows Server 2016
комментариев 12
В этой статье мы рассмотрим, что такое UPN (UserPrincipalName) суффиксы в Active Directory, как добавить дополнительные суффиксы в лесу AD, и назначить/изменить UPN суффикс пользователям Active Directory через графическую консоль и PowerShell.
UserPrincipalName (UPN) – это имя для входа пользователя в формате email адреса, например [email protected] (UPN имя не обязательно должно соответствовать email адресу пользователя). В этом примере kbuldogov это имя пользователя в домене AD (user logon name), contoso.com – UPN суффикс. Между ними разделитель @ .
По умолчанию в Active Directory в качестве UPN суффикса используется DNS имя вашего домена AD. Например, UserPrincipalName пользователя в домене winitpro.local выглядит так: [email protected]
Если в вашей внутренней AD DS используется немаршрутизируемое имя домена (например domain.local), вы не сможете верифицировать такой домен в Azure (Microsoft 365). Чтобы настроить синхронизацию с Azure вам придется переименовать домен AD (не всегда возможно), или (гораздо проще) добавить дополнительные (альтернативные) UPN суффиксы в своем AD.
Добавляем дополнительный UPN суффикс в Active Directory
В Active Directory вы можете добавить дополнительные (альтернативные) UPN суффиксы с помощью графической консолей Active Directory Domains and Trusts или через PowerShell.
Откройте консоль PowerShell и выполните команду Get-ADForest из модуля AD PowerShell. Следующая команда выведет все назначенные UPN суффиксы в лесу:
Get-ADForest | Format-List UPNSuffixes
Если список пуст, значит у вас используется суффикс UPN по умолчанию, соответствующий имени DNS домена.
Чтобы добавить дополнительный UPN суффикс (например, winitpro.ru), выполните команду:
Get-ADForest | Set-ADForest -UPNSuffixes @
Проверьте, что суффикс появился в UPNSuffixes:
Get-ADForest | Format-List UPNSuffixes
- Также можно добавить UPN суффикс через консоль Active Directory Domains and Trusts:
- Откройте консоль domain.msc ;
- Откройте свойства Active Directory Domains and Trusts:
- Добавьте новый суффикс в поле Alternative UPN suffixes и нажмите Add.
Как изменить UserPrincipalName у пользователей Active Directory?
Текущее значение UserPrincipalName пользователя можно вывести с помощью командлета Get-ADUser:
Dы можете задать новый UPN суффикс для своих пользователей. Самый простой вариант – изменить UserPrincipalName в свойствах пользователя в консоли ADUC ( dsa.msc ).
Как вы видите, в выпадающем списке доступны все UPN суффиксы домена. Выберите нужный и нажмите OK.
Обратите внимание, что на этой форме UserPrincipalName как бы состоит из двух частей – имени пользователя и UPN суффикса. Но по факту значение UserPrincipalName хранится в одном атрибуте AD.
Когда вам нужно изменить UPN сразу нескольким пользователям, можно выбрать
несколько пользователей в консоли ADUC и нажать Properties. Перейдите на вкладку Account и вы можете сменить UPN суффикс сразу для всех пользователей (если нужно собрать в плоский список пользователей из разных OU, воспользуйтесь сохраненными запросами в консоли ADUC).
На гораздо проще для смены UPN суффикса использовать PowerShell.
Чтобы изменить UPN суффикс одному пользователю, используйте командлет Set-ADUser с параметром UserPrincipalName
Set-ADUser kbuldogov -UserPrincipalName [email protected]
Следующий PowerShell скрипт позволит найти в указанной OU всех пользователей с определённым UPN суффиксом и изменить UserPrincipalName на новый.
Get-ADUser -Filter
ForEach-Object <
$UPN = $_.UserPrincipalName.Replace(«resource.loc»,»winitpro.ru»)
Set-ADUser $_ -UserPrincipalName $UPN -verbose
>
Следующая команд PowerShell позволит найти пользователей, у которых userPrincipalName не задан:
Get-ADUser -LDAPFilter «(!(userPrincipalName=*))» | Select distinguishedName
Если вы создаёте нового пользователя, можете выбрать нужный UPN суффикс вместо DNS имени вашего домена.
Если вы создаёте пользователей с помощью PowerShell командлета New-ADUser, укажите новый UPN суффикс с помощью параметра UserPrincipalName:
New-ADUser -Name «Test User2» -GivenName «Test» -Surname «User2» -SamAccountName «testuser2» -UserPrincipalName «[email protected]»
Сегодня вопрос с UPN суффиксами чаще всего возникает, когда вы планируете настроить синхронизацию локальной (on-premises) Active Directory с Azure AD, Microsoft 365, Intune. В Azure именно userPrincipalName является уникальным идентификатором пользователя.
Исторически так сложилось, что многие компании для своих внутренних доменов AD использует немаршрутизируемые или несуществующие DNS имена (вида *.loc, *.local).
У каждого пользователя AD, который будет синхронизироваться в Azure должен быть назначен уникальный и маршрутизируемый в интернете userPrincipalName, который соответствует доменному имени вашего тенанта Azure (Microsoft 365).
Предыдущая статья Следующая статья
Сколько имен у пользователя в Active Directory
Одной из проблем в Active Directory является множество имен, которые можно использовать для обозначения или описания объекта. Большинство этих имен являются атрибутами (или свойствами) объекта. Путаница возникает из-за того, что один и тот же атрибут может иметь разное имя, в зависимости от используемого провайдера. Кроме того, имя одного атрибута может ссылаться на другой атрибут, что также не добавляет ясности. Ну и наконец, у атрибутов существуют методы (функции), которые вычисляют значение имени из других атрибутов.
Попробуем разобраться в этой ситуации на примере объекта пользователя. Для этого откроем оснастку Active Directory Users and Computers (ADUC) и создадим новую учетную запись. При создании мы указываем Имя (First name), Фамилию (Last name) и инициалы (Initials), из которых формируется полное имя (Full name). Ну и целых два имени для входа — User logon name и User logon name (pre-Windows 2000).
А теперь перейдем к редактору атрибутов и посмотрим что получилось. Для этого необходимо в оснастке ADUC в меню View отметить пункт Advanced Features.
Открываем редактор атрибутов и видим знакомые имена, но под совершенно разными названиями.
Полному имени здесь соответствуют целых три атрибута — name, displayName и cn. Можно подумать, что это одно и то же, но нет — это совершенно разные атрибуты пользователя.
Полное имя (name) и общее имя (Common name, cn) — это два разных атрибута, хотя возвращают они одно и то же значение. Это происходит потому, что атрибут name аналогичен относительному отличительному имени (Relative Distinguished Name, RDN), а RDN — это часть отличительного имени (Distinguished Name, DN). Так если DN равно ″CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local″, то RDN будет ″CN=Иванов Иван Иванович″. Отсюда получаем, что если cn = ″Иванов Иван Иванович″, то name = ″cn=Иванов Иван Иванович″.
Получается довольно запутанно. Но если посмотреть с практической точки зрения, то можно сказать так — изменить значение атрибута cn мы не можем, оно всегда будет равно значению атрибута name.
Отображаемое имя (displayName) по умолчанию формируется по такому же принципу, как полное (name) и общее (cn) имена, однако не зависит от их значений. Для проверки изменим полное имя нашего пользователя. Как видите, полное и отображаемое имена изменяются независимо друг от друга.
А в редакторе атрибутов видим, что вместе со значением атрибута name изменилось и значение cn, хотя его мы и не меняли.
Кстати, кроме отображаемого имени (displayName) у пользователя есть еще отображаемое имя для печати (displayNamePrintable). Это два разных, независимых друг от друга атрибута.
Примечание. Атрибут displayNamePrintable используется почтовым сервером Exchanhe при отправке сообщений вне организации. Его можно использовать в том случае, если необходимо в письме показывать имя пользователя, отличное от DisplayName (напр. англоязычный вариант).
Идем дальше. Имя соответствует атрибуту givenName, а фамилия — атрибуту sn (Surname). Может найдется и отчество? Давайте попробуем поискать его с помощью PowerShell, командой:
Get-ADUser ivanov_ii -Properties * | select *name
Нашелся атрибут с названием OtherName, возможно это оно и есть?
Зададим этому атрибуту значение:
Get-ADUser ivanov_ii -Properties * | Set-ADUser -OtherName «Иванович»
и проверим что получилось. А получилось сразу два новых атрибута — OtherName и MiddleName, оба с заданным значением.
На самом деле это просто два названия одного и того же атрибута:
cn: OtherName
ldapDisplayName: MiddleName
При этом если в PowerShell мы видим оба имени, то в оснастке ADUC отображается только одно MiddleName.
Переходим к именам входа (logon names), которых у пользователя тоже два.
Если посмотреть в редакторе атрибутов, то User logon name (pre-Windows 2000) скрывается под именем sAMAccountname, а User logon name соответствует атрибуту userPrincipalName.
Давайте немного углубимся в детали и посмотрим, чем же отличаются эти два имени.
sAMAccountName — имя учетной записи SAM. Предназначено для для совместимости со старыми (до Windows 2000) операционными системами. Впрочем это не означает, что sAMAccountName не используется в качестве имени для входа в современных системах Windows. sAMAccountname должно быть уникальным в рамках домена, имеет ограничение в 20 символов и работает в сочетании с NETBIOS именем домена, например TEST\ivanov_ii. sAMAccountName является обязательным атрибутом пользователя.
userPrincipalName (UPN) — имя участника-пользователя. Это новый формат указания имени пользователя для входа в систему, основанный на интернет-стандарте RFC 822. Для входа используется сочетание имени пользователя с доменным суффиксом, например ivanov_ii@test.local. Имя участника-пользователя должно быть уникальным среди всех объектов-участников безопасности в лесу доменов. Максимальная длина UPN составляет 1024 символа. UPN не является обязательным атрибутом, оно может быть не назначено при создании учетной записи пользователя.
И еще два важных имени, которые есть у пользователя. Это DistinguishedName (различающееся имя) и CanonicalName (каноническое имя). Оба эти атрибута о днозначно определяют объект в Active Directory.
Различающееся имя включает в себя относительное отличительное имя объекта (RDN), а также полный путь к контейнеру, содержащему объект в Active Directory, например ″ CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local″. Каноническое имя — это то же различающееся имя объекта, но в каноническом виде, например ″test.local/Users/Иван Иванович Иванов″.
Примечание. CanonicalName является конструируемым атрибутом (constructed attribute). Такие атрибуты не хранятся явным образом в AD, а вычисляются на лету при получении соответствующих запросов.
Как видите, у пользователя в Active Directory множество различных имен. Чтобы немного их упорядочить я составил небольшую табличку, в которую внес все атрибуты пользователя, так или иначе имеющие отношение к его имени.
Имя атрибута | Имя в оснастке ADUC | Описание | Значение (пример) |
givenName | First name | Имя | Иван |
sn (SurName) | Last name | Фамилия | Иванов |
OtherName (middleName) | Дополнительное имя (напр. отчество) | Иванович | |
Initials | Initials | Инициалы | И |
CommonName (cn) | Общее имя | Иванов Иван Иванович | |
name | Full name | Полное имя | Иванов Иван Иванович |
displayName | Display name | Отображаемое имя | Иванов Иван Иванович |
DisplayNamePrintable | Отображаемое имя для печати | Иванов Иван Иванович | |
DistinguishedName (DN) | Отличительное (уникальное) имя | CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local | |
sAMAccountName | User logon name (pre-Windows 2000) | Имя входа пользователя (пред-Windows 2000) | Ivanov_ii |
userPrincipalName | User logon name | Имя входа пользователя | Ivanov_ii@test.local |
CanonicalName | Canonical Name | Имя объекта в каноническом формате | test.local/Users/Иван Иванович Иванов |
Ну а теперь главное) Как вы думаете, нужны ли все эти имена для создания учетной записи пользователя. Чтобы выяснить это, откроем редактор атрибутов и отфильтруем все атрибуты кроме обязательных (Mandatory). И оказывается, что для пользователя обязательными являются всего два имени — CommonName (cn) и sAMAccountName. Безо всех остальных пользователь может легко обойтись.
Как управлять учетными записями пользователей в Active Directory. Часть 1: Создание и удаление пользователей
Пользовательские учетные записи одни из самых популярных объектов в AD. Они нужны для аутентификации и авторизации на рабочих компьютерах и во многих сервисах, интегрированных с AD. Решение различных проблем связанных с УЗ пользователей, а так же управление ими является одной из главных рутин для администраторов и специалистов хелпдеска. Данное руководство поможет вам сделать это несколькими способами. Чтобы управлять УЗ пользователей, необходимо войти на контроллер домена или сервер или устройство с установленными средствами удаленного администрирования сервера (RSAT) для Active Directory Domain Services.
Для того чтобы не было ошибок доступа, нам нужен аккаунт администратора домена или группы операторов учетных записей (Account Operators group), либо УЗ, которая делегирована на создание пользовательских объектов в домене или в нужной нам организационной единице (OU), которую мы будем использовать для хранения аккаунтов.
Как создать учетную запись пользователя
Давайте создадим учетную запись пользователя AD несколькими способами.
Создание учетной записи пользователя с помощью ADUC
Запустите Active Directory Users and Computers (dsa.msc).
Перейдите в нужную вам OU (organizational unit) или контейнер. На панели задач нажмите на значок New User, или щелкните правой кнопкой мыши пустое место в главном окне и выберите New -> User из меню, или щелкните правой кнопкой по выбранному вами OU или контейнеру и выберите New -> User.
Появится окно New Object — User, укажите параметры для вашего пользователя:
- Full Name, введите полное имя в поле Full Name или введите отдельно фамилию и имя в поля First Name и Last Name.
- User logon name — Имя логина пользователя, данный параметр создаст атрибут userPrincipalName и атрибут sAMAccountName, которые пользователь будет вводить при входе в систему.
Нажмите Next и укажите Пароль, затем наберите его во втором поле и отметьте нужные настройки, обычно для нового пользователя нужно отметить «User must change password at next logon«(Пользователь должен сменить пароль при следующем входе).
Нажмите Next и Finish. Поздравляем, учетная запись пользователя успешно создана!
Создание УЗ пользователя с помощью cmd.exe
Используйте следующую команду с необходимыми параметрами для создания объекта пользователя в контейнере «Users«, имя пользователя в примере будет GSoul:
dsadd.exe user «CN=GSoul,CN=Users,DC=office,DC=local» -upn GSoul@office.local -fn «Gordon» -ln «Soul» -display «Gordon Soul» -pwd «P@&&W0rd»
Создание учетной записи пользователя с помощью Windows PowerShell
Запустите следующий код PowerShell с правами администратора:
Import-Module ActiveDirectory
New-ADUser -Name FRobinson -Path «CN=Users,DC=office,DC=local» -GivenName «Frank» -Surname «Robinson» -sAMAccountName FRobinson
Как удалить учетную запись пользователя
Для того чтобы удалить пользователя из Active Directory, используйте один из следующих методов. Обратите внимание, что это не приведет к полному удалению УЗ, если у вас настроена корзина AD Recycle Bin.
Удаление учетной записи пользователя с помощью Active Directory Users and Computers
Чтобы удалить пользователя из домена, откройте Active Directory Users and Computers (dsa.msc).
Нажмите на меню View, включите Advanced Features. Перейдите в OU или контейнер, где находится объект пользователя, который вы собираетесь удалить. В меню Action выберите Find.
В поле Name введите имя пользователя, которого вы хотите удалить, и нажмите кнопку «Find now«. В списке результатов поиска выберите нужного пользователя.
Щелкните правой кнопкой мыши на пользователя и выберите из списка пункт «Delete«, а затем «Yes«.
Удаление учетной записи пользователя с помощью командной строки
Следующая команда удаляет пользователя «GSoul» из контейнера “Users” из домена office.local:
dsrm.exe «CN=Gregory Soul,CN=Users,DC=office,DC=local»
Удаление учетной записи пользователя с помощью Windows PowerShell
Используйте следующий PowerShell код для удаления пользователя из AD, синтаксис для примера использован такой же, как и в примере выше:
Import-Module ActiveDirectory
Remove-ADUser -Identity «CN=GSoul,CN=Users,DC=office,DC=local»
Configuring UserPrincipalName and UPN Suffixes in Active Directory
In this article, we’ll look at what UPN (UserPrincipalName) suffixes in Active Directory are, how to add alternative suffixes in an AD forest, and change UPN suffixes of Active Directory users with the ADUC console and PowerShell.
UserPrincipalName (UPN) is the user’s logon name in the format of an email address, for example, maxb@contoso.com . UPN name doesn’t necessarily have to match the user’s email address. In this case, maxb is the username in an Active Directory domain (user logon name), contoso.com is the UPN suffix. They have a delimiter @ between them.
By default, the DNS name of your AD domain is used as the UPN suffix in Active Directory. For example, a UserPrincipalName in the woshub.local domain looks like this: username@woshub.local .
If your internal AD DS uses a non-routable domain name (like, mydomain.loc), you won’t be able to verify the domain in Azure (Microsoft 365). To configure synchronization with Azure, you will have to rename your AD domain (it is not always possible) or (much easier) add extra (alternative) UPN suffixes to your AD.
How to Add Alternative UPN Suffix in Active Directory?
In Active Directory, you can add additional (alternative) UPN suffixes using the Active Directory Domains and Trusts graphic console or PowerShell.
Open a PowerShell console and run the Get-ADForest command from the AD PowerShell module. The command below will list all assigned UPN suffixes in the forest:
Get-ADForest | Format-List UPNSuffixes
If the list is empty, it means that you are using a default UPN suffix matching your DNS domain name.
To add an alternative UPN suffix (for example, woshub.com ), run this command:
Get-ADForest | Set-ADForest -UPNSuffixes @
Make sure that the suffix appeared in UPNSuffixes:
Get-ADForest | Format-List UPNSuffixes
- You can also add a UPN suffix using the Active Directory Domains and Trusts console;
- Run the domain.msc snap-in;
- Open the Active Directory Domains and Trusts properties;
- Add a new suffix to the Alternative UPN suffixes box and click Add.
Changing the User Principal Name (UPN) in Active Directory
You can display the current value of the UserPrincipalName attribute using the Get-ADUser cmdlet:
Get-ADUser f.martusciello -properties select userprincipalname
You can change the UPN suffix for your AD users. The easiest way to do it is to change UserPrincipalName in user properties in the ADUC console ( dsa.msc ).
As you can see, all UPN suffixes of the domain are available in the list. Select the one you want and click OK.
Note that UserPrincipalName in this form consists of two parts: a user name and a UPN suffix. In fact, UserPrincipalName value is stored a single AD attribute.
When you want to change UPN for multiple users at once, you can select users in the ADUC console and click Properties. Go to the Account tab and change the UPN suffix for all selected users. (If you want to get users from different OUs into a flat list, use the saved queries in the ADUC console.)
But it is easier to use PowerShell to change the user UPN suffix.
To change a UPN suffix for a user, use the Set-ADUser cmdlet with the UserPrincipalName parameter:
Set-ADUser f.martusciello -UserPrincipalName f.martusciello@woshub.com
The following PowerShell script allows to find users with the specific UPN suffix in an OU and change the UserPrincipalName to a new one.
Get-ADUser -Filter
ForEach-Object <
$UPN = $_.UserPrincipalName.Replace(«mydomain.loc»,»woshub.com»)
Set-ADUser $_ -UserPrincipalName $UPN -verbose
>
This PowerShell command allows to find users who have no UserPrincipalName set:
Get-ADUser -LDAPFilter «(!(userPrincipalName=*))» | Select distinguishedName
If you create a new user, you can select an alternate UPN suffix instead of a DNS name of your domain.
If you create users using the New-ADUser PowerShell cmdlet, specify a new UPN suffix with the UserPrincipalName switch:
New-ADUser -Name «Jan Kraus» -GivenName «Jan» -Surname «Kraus» -SamAccountName «j.kraus» -UserPrincipalName j.kraus@woshub.com
Today an issue of UPN suffixes arises if you are going to configure on-premises Active Directory synchronization with Azure AD, Microsoft 365, Intune. It is UserPrincipalName that is a unique user identifier in Azure.
Historically, many companies have been using non-routable or non-existing DNS names (like *.loc , *.local ) for their internal AD domains.
Each AD user that will sync to Azure must be assigned a unique and internet-routable userPrincipalName that matches the domain of your Azure tenant (Microsoft 365).