在 Windows Server 2012(及更高版本)中,PowerShell Remoting 默认即已启用。尽管许多 IT 团队将其视为潜在的安全风险,但如果遵循最佳实践,PowerShell 实际上是管理服务器最安全的方式之一。本文将向您展示如何配置 Windows Server 2012 R2,以便仅接受来自特定用户组的远程 PowerShell 连接,并限制可运行的 cmdlet。
什么是受限终结点?
远程终结点(Remote endpoints)决定哪些用户可以通过 PowerShell Remoting 连接到设备,以及在完成身份验证后他们可以执行哪些操作。默认的 PowerShell 终结点允许属于内置 Administrators 和 Remote Management Users 组的用户远程连接,并在设备上公开所有可用的 cmdlet 和函数。
好消息是,你可以创建自己的 constrained 终结点,并限制用户能够执行的操作,从而尽量降低为了管理目的而允许 PowerShell Remoting 所带来的风险。
在 Windows Server 2012 R2 中创建受限终结点(Constrained Endpoints)
让我们在 Windows Server 2012 R2 中创建自己的受限终结点。使用本地管理员权限登录,然后点击桌面任务栏上的蓝色 PowerShell 图标。
- 要查看服务器上现有的终结点,请在 PowerShell 提示符中输入
Get-PSSessionConfiguration,然后按 ENTER。 - 在 PowerShell 控制台中,您应该能看到四个默认终结点(endpoints)。
为了限制用户在连接到受限终结点(constrained endpoint)时可以执行的 cmdlet 和函数,我们需要创建一个配置文件。在 PowerShell 控制台中,输入下面显示的 cmdlet,然后按 ENTER。 New-PSSessionConfigurationFile 会创建一个名为 PrintAdmin.pssc 的新配置文件,并设置限制,包括将远程用户限制为只能使用属于 PrintManagement PowerShell 模块的函数。
New-PSSessionConfigurationFile – Path PrintAdmin.pssc – SessionType RestrictedRemoteServer -LanguageMode NoLanguage – ExecutionPolicy Restricted – ModulesToImport PrintManagement -VisibleFunctions Get-Printer
NoLanguage 会将用户限制为只能运行 cmdlet 和函数,也就是说不能使用脚本块、变量或运算符。–SessionType 的值 RestrictedRemoteServer 会将用户限制为只能使用以下代理函数(proxy functions):Exit-PSSession,Get-Command,Get-FormatData,Get-Help,Measure-Object,Out-Default 和 Select-Object。Restricted 作为 –ExecutionPolicy 参数的值也会阻止脚本运行。请注意,如果您要导入的模块包含 cmdlet,还可以使用 –VisibleCmdlets 参数。
现在我们有了配置文件,就可以注册一个名为 Helpdesk 的新终结点(endpoint):
Register-PSSessionConfiguration -Name Helpdesk -Path PrintAdmin.pssc –ShowSecurityDescriptorUI
系统将提示您确认是否要配置新的终结点(endpoint)、重新启动 WinRM 服务,并为该终结点配置访问权限。在这个示例中,我将为名为 Helpdesk 的组授予对新终结点的“Execute (Invoke)”权限。别忘了给 Helpdesk 组授予在远程设备上管理打印机的权限,否则 get-printer 将会失败。
如果你再次运行 Get-PSSessionConfiguration ,你就可以看到新端点已列出。
连接到受限端点
现在从远程计算机连接到该端点。使用属于 Helpdesk 组或你在端点上分配了权限的组的用户登录到 Windows 8。打开 PowerShell 提示符并运行下面的命令,将 contososrv1 替换为远程服务器的名称:
Enter-PSSession -ComputerName contososrv1 -ConfigurationName Helpdesk
连接到远程服务器后,提示符会相应更改,以表明你正在使用远程设备。输入 get-command 并按 ENTER,你将看到可用函数和 cmdlet 的列表会受到端点的限制。在这个示例中,你只剩下 RestrictedRemoteServer 会话类型允许的 7 个代理函数,以及端点配置文件中指定的 get-printer 函数。
分享到
了解更多
关于作者
Russell Smith
IT 顾问
专注于管理与安全技术的 IT 顾问和作者。Russell 拥有超过 15 年的 IT 经验,撰写过一本关于 Windows 安全的书籍,并共同撰写了 Microsoft 官方学术课程(MOAC)系列的相关教材。