如何通过组策略(GPO)禁用Windows Subsystem for Linux(WSL)并阻止用户安装及启用该功能?
如何通过组策略(GPO)禁用Windows Subsystem for Linux(WSL)并阻止用户安装及启用该功能?
我完全理解你的处境——安全团队要求禁用WSL,但常规的PowerShell、注册表修改、Intune方案要么用不了,要么过不了安全审核,连找常规GPO选项都碰了壁。下面给你几个切实可行的GPO方案,能覆盖禁用现有WSL、阻止用户启用/安装的全部需求:
一、全面拦截WSL相关执行文件(堵死操作入口)
只限制wsl.exe确实不够,用户还能通过其他工具绕开。建议用软件限制策略(SRP)或AppLocker(后者更灵活,适合企业环境)来批量拦截:
- 必须拦截的核心执行文件:
C:\Windows\System32\wsl.exeC:\Windows\System32\wslconfig.exeC:\Windows\System32\lxrun.exe(针对旧版WSL)
- 额外拦截分发版运行路径:WSL分发版通常安装在
%USERPROFILE%\AppData\Local\Packages下带有Canonical、MicrosoftStore字样的文件夹,可通过路径规则禁止这些目录下的所有可执行文件运行。 - 操作路径:
计算机配置 -> Windows设置 -> 安全设置 -> 软件限制策略(或AppLocker),创建哈希规则或路径规则来禁止上述文件/路径的执行权限。
二、阻止用户启用WSL相关Windows功能
WSL依赖「适用于Linux的Windows子系统」「虚拟机平台」「Windows Hypervisor Platform」这几个系统功能,用GPO可以彻底锁死这些功能的启用入口:
- 直接隐藏「Windows功能」页面
- 转到
计算机配置 -> 管理模板 -> 程序 -> 控制面板 -> 程序和功能 - 启用「隐藏‘Windows功能’页面」,这样用户根本打不开功能列表,彻底阻止操作。
- 转到
- 精准禁用指定功能(保留其他功能可见)
如果不想完全隐藏所有系统功能,可以通过GPO推送注册表项来禁用WSL相关功能的启用:- 针对「适用于Linux的Windows子系统」,添加注册表项
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9P9TQF7HHKLNP}(注:GUID可能因Windows版本略有差异,可自行查询对应版本的功能GUID),设置NoRemove值为1。 - 或者直接禁用WSL核心服务:推送注册表项
HKLM\SYSTEM\CurrentControlSet\Services\LxssManager,将Start值设为4(代表禁用服务),这样即使功能没卸载,WSL也无法启动。
- 针对「适用于Linux的Windows子系统」,添加注册表项
三、通过GPO脚本移除已安装的WSL
如果需要清理已存在的WSL环境,可以部署开机脚本自动执行移除操作:
- 编写PowerShell脚本,内容如下:
# 注销所有WSL分发版 wsl --unregister-all # 禁用WSL及依赖功能 dism /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart dism /online /disable-feature /featurename:VirtualMachinePlatform /norestart - 操作路径:
计算机配置 -> Windows设置 -> 脚本(启动/关机),添加该脚本并设置好执行权限,确保开机时能自动运行。
另外你提到在系统服务GPO里找不到LxssManager,这大概率是因为你的组策略管理控制台(GPMC)没有更新到对应Windows版本的ADMX模板,不过没关系,用上面的注册表推送方法同样能达到禁用服务的效果,完全可以替代。
备注:内容来源于stack exchange,提问作者Merlin The Wizard




