Как получить список пользователей, имеющих доступ к чужим почтовым ящикам?

Как получить список пользователей, имеющих доступ к чужому почтовому ящику?

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

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

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


get-mailbox -resultsize unlimited | Get-MailboxPermission | 
where-object {($_.Deny -eq $False) -and($_.isinherited -eq $false) -and ($_.User -notlike "*SELF*")} | 
sort-object  identity |format-table User, AccessRights -GroupBy Identity -AutoSize > c:\mailbox-permission.txt

Действия скрипта
  • Получить список всех почтовых ящиков в организации Exchange
  • Получить права на эти почтовые ящики
  • Отфильтровать только нужные права
  •  Отсортировать и сгруппировать по почтовым ящикам
  • Вывести информацию в текстовый файл, т.к. вывод иногда может быть большой.
Вывод скрипта
Identity: z365.ru/Tenants/wicrosoft/Andrey Beshkov User AccessRights —- ———— Z365\pnagaev {FullAccess} Z365\OKrylov {FullAccess}
Мы видим, что у пользователей pnagaev и okrylov есть полный доступ к почтовому ящику Andrey Beshkov. Этот скрипт позволит получить текущее состояние прав доступа к почтовым ящикам. Я рекомендую этот скрипт выполнять ежемесячно и просматривать полученный отчет на предмет лишних прав. Лучше всего скрипт немного модифицировать и результаты отправлять владельцам почтовых ящиков, чтобы в случае лишних прав, они могли самостоятельно инициировать процесс отзыва прав доступа к почтовому ящику по процедуре, написанной заранее. А когда в вашей организации последний раз проводился аудит доступа к почтовым ящикам?

Связанные записи:


, , ,

  • Валерий

    Добрый день.
    Имею связку Exchange 2010 со всеми текущими обновлениями и клиентов Outlook 2003.
    Для совместимости рекомендуют либо поставить галку «Шифровать трафик»  у клиентов, либо отключить требование обязательного шифрования на сервере.

    Могу ли я настроить сервер Exchange, чтобы у всех пользователей (в том числе удаленных, по pop3 подключение)  проставилась эта галка?

    Либо как отключить обязательное шифрование на самом сервере?
    Статьи по этому поводу читал, но запутался…

    Спасибо заранее! 

  • Зажигалка Зиппо

    Файл можно открывать потом прямо из консоли Powershell

    notepad c:\mailbox-permission.txt

  • Pavel Nagaev

    Вот нашел обновленную версию скрипта:

    Get-MailboxPermission * -resultsize unlimited | ?{($_.Deny -eq $False) -and($_.isinherited -eq $false) -and($_.User  -notmatch ‘SELF|5555|S-1-5-21’)} | sort| ft Identity,User,AccessRights -autosize >c:\permissions.txt

     

    -notmatch позволяет выкинуть «лишние» записи из отчетов, оставить только SELF и необходимое вам.

    Список почтовых ящиков можно и не получать.

  • Pavel Nagaev

    Скрипт конечно написан своеобразно, особенно порадовала конструкция
    $err = (Get-MailboxFolderPermission $calendarEng) 2>&1

    Я сижу и думаю, что это может значить.

    Главное — работает и хорошо 🙂

  • MicroDog

    А вот мой небольшой скрипт. В нашей организации стоят Exch 2003  и немного 2010-тых. Поэтому скрипт на PS, но информацию о ящиках вытаскиваю с Exch2003. 
    Скрипт получает список различных уровней прав (RW, send on behalf, send as и права на календарь) и записывает результаты в файлики. Написан криво, но я по другому не умею ))
    $login = read-host «Enter Login: »
    $path = read-host «Enter Path: »
    $calendarRus = $login + «:\Календарь»
    $calendarEng = $login + «:\Calendar»
    $err = (Get-MailboxFolderPermission $calendarEng) 2>&1
    $dn = Get-Mailbox -Identity $login
     
    if ((Test-Path -path $path) -ne $True) 
    {new-item -type directory -path $path}
     
    Get-MailboxPermission -Identity $login | where {$_.user -like «corp\*» -and $_.accessrights -like «Full*» -and $_.IsInherited -eq $False} | select user > $path\full.txt
     
    Get-MailboxFolderPermission -Identity  $login | select User,accessrights  > $path\Read.txt
     
    if ($err.writeErrorStream -eq «True»)
    {Get-MailboxFolderPermission -Identity  $calendarRus | select user,accessrights > $path\calendarRus.txt}
    else
    {Get-MailboxFolderPermission -Identity  $calendarEng | select user,accessrights > $path\calendarEng.txt}
     
    $temp1 = Get-Mailbox -Identity $login | Select-Object -property GrantSendOnBehalfTo
    $temp2 = $temp1.GrantSendOnBehalfTo | Select -Property DistinguishedName
    $send = for( $i = 0; $i -lt $temp2.count; ++$i ){(get-mailbox $temp2[$i].DistinguishedName).SamAccountName}
    $send > $path\sendOnbehalf.txt
     
    Get-ADPermission -Identity $dn.identity | where {($_.extendedrights -like «*send-as*») -and ($_.user -like «Corp\*»)} | select user > $path\sendAs.txt

  • Константин

    Спасибо за скрипт! как бы еще сделать так, чтобы он отображал почтовые ящики, права на которые выданы через свойства почтовых ящиков в Outlook?

  • Pavel Nagaev
  • http://www.facebook.com/profile.php?id=1386655156 Павел Нагаев

    test

  • https://stackoverflow.com/users/9504910/degun Degun

    Подскажите, где нужно запускать этот скрипт — на сервере, где расположен exchange, или можно на своей рабочей станции?

    • Pavel

      и там и там можно.

  • http://vkontakte.ru/id96880481 Алексей Купцов

    Добрый день! Данный скрипт считывает права предоставленные через группу безопасности, через вложенные группы?