Представим себе ситуацию, когда один из ключевых сотрудников серьезно заболел, а в его почтовом ящике находятся данные для составления срочного отчета и его менеджер попросил предоставить права на этот ящик другому пользователю. Вы это сделали, но права забрать забыли. Со временем в компании может возникнуть хаос в правах доступа к почтовым ящикам.
Одним из требований аудита почтовой организации 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. Этот скрипт позволит получить текущее состояние прав доступа к почтовым ящикам. Я рекомендую этот скрипт выполнять ежемесячно и просматривать полученный отчет на предмет лишних прав. Лучше всего скрипт немного модифицировать и результаты отправлять владельцам почтовых ящиков, чтобы в случае лишних прав, они могли самостоятельно инициировать процесс отзыва прав доступа к почтовому ящику по процедуре, написанной заранее. А когда в вашей организации последний раз проводился аудит доступа к почтовым ящикам?
Добрый день.
Имею связку Exchange 2010 со всеми текущими обновлениями и клиентов Outlook 2003.
Для совместимости рекомендуют либо поставить галку «Шифровать трафик» у клиентов, либо отключить требование обязательного шифрования на сервере.
Могу ли я настроить сервер Exchange, чтобы у всех пользователей (в том числе удаленных, по pop3 подключение) проставилась эта галка?
Либо как отключить обязательное шифрование на самом сервере?
Статьи по этому поводу читал, но запутался…
Спасибо заранее!
Файл можно открывать потом прямо из консоли Powershell
notepad c:\mailbox-permission.txt
Вот нашел обновленную версию скрипта:
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 и необходимое вам.
Список почтовых ящиков можно и не получать.
Скрипт конечно написан своеобразно, особенно порадовала конструкция
$err = (Get-MailboxFolderPermission $calendarEng) 2>&1
Я сижу и думаю, что это может значить.
Главное — работает и хорошо 🙂
А вот мой небольшой скрипт. В нашей организации стоят 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?
http://technet.microsoft.com/en-us/library/dd335061%28v=exchg.141%29.aspx
test
Подскажите, где нужно запускать этот скрипт — на сервере, где расположен exchange, или можно на своей рабочей станции?
и там и там можно.
Добрый день! Данный скрипт считывает права предоставленные через группу безопасности, через вложенные группы?