[玩转系统] 为 Exchange Online 用户禁用 PowerShell
作者:精品下载站 日期:2024-12-14 04:09:44 浏览:12 分类:玩电脑
为 Exchange Online 用户禁用 PowerShell
删除 Exchange Online PowerShell 以减少攻击面
除非属于管理员,否则用户邮箱不需要访问 Exchange Online PowerShell。当 Exchange 2007 最初引入 PowerShell 支持时,最终用户希望出于自己的自动化目的运行 PowerShell。尽管有可能,但我从未遇到过运行Get-Mailbox来检查其邮箱设置或Get-MailboxStatistics来检查其邮箱大小的最终用户。
Exchange 2010 中基于角色的访问控制 (RBAC) 的出现,通过根据用户帐户所持有的角色来限制可用 cmdlet 和参数集,从而限制了人们可以执行的操作。这使得 PowerShell 对最终用户的吸引力更小,但运行 PowerShell 的能力仍然是 Exchange Online 和 Exchange Server 的默认设置。这是一个问题。
锁定 Exchange Online PowerShell
问题很简单。尽管 Microsoft 已为不具有管理员角色的用户锁定了 Exchange Online 管理模块,使他们无法运行许多 cmdlet(图 1),但删除对人们不需要的功能的访问权限仍然是一个好主意。以防万一攻击者破坏帐户并找出可利用的弱点。
微软关于如何为最终用户禁用 PowerShell 的文档有点过时了。例如,它建议使用客户端访问规则来阻止 PowerShell 访问,尽管 Microsoft 将在 2023 年 9 月禁用大多数客户端访问规则。有关如何运行 Set-User cmdlet 来阻止 PowerShell 的建议是准确但有限。我们可以做得更好。
草拟解决方案
用于生产用途的可行解决方案的特征可能包括:
- 允许具有全局管理员或 Exchange 管理员角色的任何帐户进行 PowerShell 访问。
- 删除任何其他用户帐户的 PowerShell 访问权限。
- 按计划运行以禁用对新创建的邮箱的访问。
将这些要点转化为 PowerShell 代码相当简单:
- 查找全局管理员和 Exchange 管理员角色组的成员。
- 排除可能位于 Exchange 管理员角色组中的服务主体,以允许应用充当 Exchange 管理员。例如,运行 Exchange 脚本的 Azure 自动化帐户的服务主体必须添加到 Exchange 管理员角色组(请参阅本文中的示例)。
- 使用 Get-ExoMailbox 查找用户邮箱。
- 对于每个邮箱,检查该邮箱是否由管理员拥有。如果没有,请禁用 PowerShell 访问并在自定义属性中记下这一事实(因为不需要通过 Entra ID 访问信息,也可以使用 Exchange 自定义扩展属性)。
使用属性来记录邮箱是否可以使用 PowerShell 允许 Get-ExoMailbox 使用服务器端筛选器将邮箱集限制为尚未处理的邮箱集。第一次运行后,必须处理每个用户邮箱,过滤器会加快处理速度,甚至在非常大的组织中也能实现。
以下是使用 Microsoft Graph PowerShell SDK 和 Exchange Online 管理模块中的 cmdlet 执行此操作的一些代码:
Connect-MgGraph -Scopes Directory.Read.All
Select-MgProfile Beta
Connect-ExchangeOnline
# Get set of accounts holding the Exchange Online Administrator role
$ExoAdminRoleId = Get-MgDirectoryRole | Where-Object {$_.displayName -eq "Exchange administrator"} | Select-Object -ExpandProperty Id
[array]$ExoAdmins = (Get-MgDirectoryRoleMember -DirectoryRoleId $ExoAdminRoleId) | Select-Object -ExpandProperty AdditionalProperties
# Remove any service principals from the set
$ExoAdmins = $ExoAdmins | Where-Object {$_.'@odata.type' -eq '#microsoft.graph.user'}
# Now get the set of accounts holding the Global Administrator role
$GlobalAdminRoleId = Get-MgDirectoryRole | Where-Object {$_.displayName -eq "Global administrator"} | Select-Object -ExpandProperty Id
[array]$GlobalAdmins = (Get-MgDirectoryRoleMember -DirectoryRoleId $GlobalAdminRoleId) | Select-Object -ExpandProperty AdditionalProperties
# Create an array holding the user principal names of the two sets of administrator accounts
[array]$AdminAccounts = $GlobalAdmins.userPrincipalName + $ExoAdmins.userPrincipalName | Sort-Object -Unique
# Find Exchange user mailboxes that need to be processed
[array]$ExoMailboxes = Get-ExoMailbox -Filter {CustomAttribute5 -eq $Null} -ResultSize Unlimited -RecipientTypeDetails UserMailbox -Properties CustomAttribute5
ForEach ($Mbx in $ExoMailboxes) {
# If not an admin holder, go ahead and block PowerShell
If ($Mbx.userPrincipalName -notin $AdminAccounts) {
Write-Output ("Blocking PowerShell access for mailbox {0}..." -f $Mbx.displayName)
Try {
Set-User -Identity $Mbx.userPrincipalName -EXOModuleEnabled $False -Confirm:$False
$MessageText = "PowerShell disabled on " + (Get-Date -format s)
Set-Mailbox -Identity $Mbx.userPrincipalName -CustomAttribute5 $MessageText
}
Catch {
Write-Output ("Error disabling PowerShell for mailbox {0}" -f $Mbx.userPrincipalNane )
}
} Else {
Set-Mailbox -Identity $Mbx.userPrincipalName -CustomAttribute5 "PowerShell Enabled"
}
} # End ForEach
附带说明一下,用于禁用 PowerShell 访问的旧参数是 RemotePowerShellEnabled。您应该使用的新参数是EXOModuleEnabled。 Microsoft 正在从 Exchange Online 中删除远程 PowerShell,但 EXOModuleEnabled 参数继续控制用户对 Exchange PowerShell 的访问。
自动处理新邮箱
该脚本一次性运行,但为了更有效,它应该按自动计划运行。据我所知,执行此操作的最佳且最安全的方法是使用 Azure 自动化。由于它不需要 Azure 订阅,因此 Windows Scheduler 是一个更便宜的选择。缺点是您必须安排脚本在特定工作站上运行,并且必须为用于运行脚本的帐户安排安全身份验证。我喜欢 Azure 自动化托管标识提供的更好的安全性和自动化,这也是我所使用的。
在 Azure 自动化 Runbook 中执行上面显示的代码非常简单。要求是:
- 使用分配了必要权限 (Directory.Read.All) 的 Azure 自动化帐户从目录中读取角色信息。
- Azure 自动化帐户还必须拥有将 Exchange 作为应用程序管理角色。
- 使用大致相同的代码创建一个 Runbook。区别在于连接和身份验证。以下是 Runbook 如何获取访问令牌以登录 Graph 并连接到 Exchange Online。其余代码保持不变。
Connect-AzAccount -Identity
$AccessToken = Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com"
Connect-MgGraph -AccessToken $AccessToken.Token
# Connect to Exchange Online
Connect-ExchangeOnline -ManagedIdentity -Organization office365itpros.onmicrosoft.com
根据这些要求测试运行手册以获得预期结果。在图 2 中,我们看到一组管理员帐户(已模糊)和四个现在无法使用 PowerShell 的邮箱。
这里使用的脚本不包括日志记录。添加对每个邮箱执行的操作的日志记录并随后通过电子邮件或发布到 Teams 频道将日志发送给管理员将很简单。
调度运行手册
一旦调整 Runbook 以使其成功执行,您就可以发布它并将 Runbook 链接到自动化计划。计划是属于自动化帐户的资源,它指示 Azure 自动化何时执行作业。时间表可以是一次性的,也可以是重复性的。在这种情况下,每周检查一次可能足以阻止 PowerShell 访问新邮箱。图 3 显示 Runbook 链接到计划。
无需管理员干预即可确保作业运行。 Azure 自动化拥有值得信赖的强大调度和执行引擎。然而,明智的做法是验证这些作业是否产生了预期的结果。此代码检查是否阻止所有非管理员邮箱使用 PowerShell(使用上面的代码构建 $AdminAccounts 数组)。
$Report = [System.Collections.Generic.List[Object]]::new()
[array]$ExoMailboxes = Get-ExoMailbox -Filter {CustomAttribute5 -ne $Null} -ResultSize Unlimited -RecipientTypeDetails UserMailbox -Properties CustomAttribute5
ForEach ($Mbx in $ExoMailboxes) {
# If not an admin holder, go ahead and block PowerShell
If ($Mbx.userPrincipalName -notin $AdminAccounts) {
$Status = (Get-User -Identity $Mbx.userPrincipalName).EXOModuleEnabled
$UserData = [PSCustomObject][Ordered]@{
User = $Mbx.userPrincipalName
Name = $Mbx.displayName
PS = $Status
Status = $Mbx.CustomAttribute5}
$Report.Add($UserData) }
}
$Report | Out-GridView
总结
我们在本文中探讨了几个概念,从阻止用户邮箱的 Exchange Online PowerShell 到使用具有托管标识的 Azure 自动化以及按计划运行作业。重点是,我在这里描述的内容并不困难。这一切都是可能的,而且很容易实现。
更新:我在此处描述了阻止用户访问 Microsoft 365 PowerShell 模块的另一种方法。
按需迁移
使用一种全面的 Office 365 租户到租户迁移解决方案迁移所有工作负载和 Active Directory。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag