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

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

Одним из требований аудита почтовой организации 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
  • Получить права на эти почтовые ящики
  • Отфильтровать только нужные права
  •  Отсортировать и сгруппировать по почтовым ящикам
  • Вывести информацию в текстовый файл, т.к. вывод иногда может быть большой.

[su_box title=»Вывод скрипта» color=»#333333″] Identity: z365.ru/Tenants/wicrosoft/Andrey Beshkov User AccessRights —- ———— Z365\pnagaev {FullAccess} Z365\OKrylov {FullAccess} [/su_box]

Мы видим, что у пользователей pnagaev и okrylov есть полный доступ к почтовому ящику Andrey Beshkov. Этот скрипт позволит получить текущее состояние прав доступа к почтовым ящикам. Я рекомендую этот скрипт выполнять ежемесячно и просматривать полученный отчет на предмет лишних прав. Лучше всего скрипт немного модифицировать и результаты отправлять владельцам почтовых ящиков, чтобы в случае лишних прав, они могли самостоятельно инициировать процесс отзыва прав доступа к почтовому ящику по процедуре, написанной заранее. А когда в вашей организации последний раз проводился аудит доступа к почтовым ящикам?

Related Posts

This Post Has 11 Comments

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

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

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

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

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

    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 и необходимое вам.

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

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

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

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

  4. А вот мой небольшой скрипт. В нашей организации стоят 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

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

Добавить комментарий