Права на почтовый ящик

Права на почтовый ящик можно посмотреть с помощью двух командлетов

  • Get-MailboxPermission
  • Get-ADPermission
  • Работает с правами на сам почтовый ящик в базе Exchange (Information Store).
  • Определяет, кто может открывать ящик и работать с его содержимым.
  • Типичные права:
    • FullAccess — полный доступ.
    • DeleteItem — удаление элементов.
    • ReadPermission — просмотр ACL.
    • ChangePermission / ChangeOwner — изменение делегирования.
  • Работает с правами на объект почтового ящика в Active Directory.
  • Определяет, кто может делегировать администрирование или выполнять действия в AD/Exchange.
  • Типичные права:
    • Send As — отправка писем как владелец.
    • Receive As — приём писем как владелец (обычно на БД).
    • User-Change-Password / Reset Password — смена или сброс пароля.
    • ms-Exch-Store-Admin и другие расширенные права.
Критерий Get-MailboxPermission Get-ADPermission
Уровень База Exchange (Information Store) Active Directory (объект пользователя/почтового ящика)
Что регулирует Доступ к содержимому почтового ящика Делегирование действий над объектом в AD
Типичные права FullAccess, DeleteItem, ChangeOwner Send As, Receive As, User-Change-Password
Где применяются Outlook, OWA, ActiveSync AD, Transport, делегирование администрирования
Видимость в ECP Только Full Access Только Send As и Send on Behalf
  • Get-MailboxPermission — показывает, кто может открыть чужой ящик и работать с письмами.
  • Get-ADPermission — показывает, кто может отправлять письма как пользователь, менять пароль или администрировать объект в AD.

Соответствие прав в Exchange

PowerShell (`Get-MailboxPermission`) Что это значит Как отображается в ECP/EAC
FullAccess Полный доступ к ящику (чтение, создание, удаление писем, работа с папками) ✅ Отображается как Full Access
SendAs (через `Get-ADPermission`) Отправка писем как владелец ящика ✅ Отображается как Send As
SendOnBehalf (через `Set-Mailbox`) Отправка писем "от имени" ✅ Отображается как Send on Behalf
DeleteItem Удаление элементов ❌ Не отображается в ECP
ReadPermission Чтение ACL (просмотр прав) ❌ Не отображается в ECP
ChangePermission Изменение прав других пользователей на ящик ❌ Не отображается в ECP
ChangeOwner Изменение владельца объекта ❌ Не отображается в ECP

В консоли ECP/EAC отображаются только три типа прав:

  • Full Access
  • Send As
  • Send on Behalf

Все остальные детализированные права (`DeleteItem`, `ReadPermission`, `ChangePermission`, `ChangeOwner`) видны только через PowerShell (`Get-MailboxPermission`, `Get-ADPermission`) и в ECP/EAC не показываются.

Такие права в ACL могут появляться в следующих случаях:

  • После миграции почтовых ящиков из старых версий Exchange или сторонних систем.
  • Когда права назначались напрямую через Active Directory (например, через вкладку Security в ADSI Edit или вручную администратором).
  • При использовании сторонних скриптов/инструментов, которые изменяют ACL объекта ящика.
  • В результате наследования прав от контейнеров AD (организационные единицы, групповые политики безопасности).
  • В редких случаях — как "хвосты" после удаления или изменения делегатов.
⚠️ Важно: Наличие `DeleteItem`, `ChangeOwner` и подобных прав не всегда критично, но для «чистого» администрирования Exchange лучше опираться только на поддерживаемые сценарии: *Full Access*, *Send As*, *Send on Behalf*.

Нестандартные права (не видны в ECP/EAC)

Показываем только детальные ACL-права на сам ящик: DeleteItem, ReadPermission, ChangePermission, ChangeOwner.

# Замените user@domain на нужный ящик
Get-MailboxPermission -Identity user@domain |
  Where-Object {
      -not $_.IsInherited -and
      $_.User -notin 'NT AUTHORITY\SELF','NT AUTHORITY\SYSTEM','S-1-5-32-544','S-1-5-18' -and
      ($_.AccessRights -match 'DeleteItem|ReadPermission|ChangePermission|ChangeOwner')
  } |
  Select-Object Identity, User, Deny, AccessRights, InheritanceType |
  Format-Table -Auto

Пояснения:

  • Исключаем наследованные ACE (`-not $_.IsInherited`).
  • Фильтруем «системных» субъектов (SELF, SYSTEM, локальные SID’ы).
  • Оставляем только те права, которых нет в ECP: DeleteItem, ReadPermission, ChangePermission, ChangeOwner.

Показываем расширенные права на объекте пользователя в AD, которые не видны в ECP.

# DistinguishedName почтового ящика
$dn = (Get-Mailbox -Identity user@domain).DistinguishedName
 
Get-ADPermission -Identity $dn |
  Where-Object {
      -not $_.IsInherited -and
      $_.ExtendedRights -and
      $_.User -notin 'NT AUTHORITY\SELF','NT AUTHORITY\SYSTEM' -and
      # Исключаем то, что видно в ECP/EAC:
      ($_.ExtendedRights -notcontains 'Send-As') -and
      ($_.ExtendedRights -notcontains 'Send on behalf') -and
      ($_.ExtendedRights -notcontains 'ms-Exch-Send-As') # встречается в старых средах
  } |
  Select-Object ObjectDN, User, Deny, @{n='ExtendedRights';e={$_.ExtendedRights -join ','}}, InheritanceType |
  Format-Table -Wrap

Примечание:

  • Здесь «нестандартные» — всё, что не Send As / Send on Behalf (их ECP показывает), но попадает в ExtendedRights.
function Get-NonEcpMailboxAcls {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Identity
    )
 
    $mailbox = Get-Mailbox -Identity $Identity -ErrorAction Stop
    $dn = $mailbox.DistinguishedName
 
    $systemUsers = @('NT AUTHORITY\SELF','NT AUTHORITY\SYSTEM','S-1-5-32-544','S-1-5-18')
 
    $aclMailbox = Get-MailboxPermission -Identity $mailbox.Identity | Where-Object {
        -not $_.IsInherited -and
        $_.User -notin $systemUsers -and
        ($_.AccessRights -match 'DeleteItem|ReadPermission|ChangePermission|ChangeOwner')
    } | Select-Object @{n='Scope';e={'MailboxPermission'}},
                     @{n='Target';e={$mailbox.Identity}},
                     User, Deny, @{n='Right';e={($_.AccessRights -join ',')}}, InheritanceType
 
    $aclAd = Get-ADPermission -Identity $dn | Where-Object {
        -not $_.IsInherited -and
        $_.ExtendedRights -and
        $_.User -notin $systemUsers -and
        ($_.ExtendedRights -notcontains 'Send-As') -and
        ($_.ExtendedRights -notcontains 'ms-Exch-Send-As') -and
        ($_.ExtendedRights -notcontains 'Send on behalf')
    } | Select-Object @{n='Scope';e={'ADPermission'}},
                      @{n='Target';e={$dn}},
                      User, Deny, @{n='Right';e={($_.ExtendedRights -join ',')}}, InheritanceType
 
    $result = @($aclMailbox + $aclAd)
    if ($result.Count -eq 0) {
        Write-Host "Не найдено нестандартных прав, не отображаемых в ECP/EAC." -ForegroundColor Green
    } else {
        $result | Sort-Object Scope, User | Format-Table -Auto
    }
}
  • Если видите неожиданные права — проверьте, не пришли ли они после миграции/скриптов/наследования.
  • Права Receive As (на БД/сервер) в ECP у конкретного ящика не показываются — их проверяйте на объекте БД/сервера.