Windows 的 Sudo
Microsoft 正在为 Windows 添加原生 `sudo` 命令,让用户无需打开单独的“以管理员身份运行”外壳,就能在未提升权限的终端中对单个命令进行提权运行。评论者普遍欢迎这一变化,认为它属于一系列更偏开发者友好的功能(WSL、Terminal、winget)的一部分,但也对安全性、复用 `sudo` 名称却未完全对齐 Unix 版行为(例如 sudoers、以其他用户身份运行)、以及与长期存在的 `runas` 命令和 gsudo 等第三方工具的重叠提出担忧。许多人将其视为一个有用的便捷功能和对开发者体验的提升,同时认为命名、兼容性和长期安全影响需要谨慎处理。
功能概览与初步反应
- Windows 的 Sudo 允许用户从未提升权限的控制台运行需要管理员权限的命令,很多情况下无需再打开单独的“以管理员身份运行”窗口。
- 其实现使用两个
sudo.exe进程:未提升权限的进程通过 RPC 调用一个已提升权限的进程,传递命令行、环境变量和控制台句柄,以便目标应用附加到原始控制台。 - 许多开发者对此表示满意,称它早就该有,并且与近期面向开发者的改进(WSL、Windows Terminal、PowerShell、winget)一致。也有人认为,现有工具已经足够,因此它是重复功能。
可用性(Windows 10 / Server)
- 目前的预览版仅限 Windows 11,但 Microsoft 表示
sudo.exe本身并不依赖新的操作系统功能,Windows 10 的移植正在积极推进;主要障碍是 Settings 界面的移植。
与 runas 及现有工具的行为差异
runas已经存在多年,但它会打开一个新窗口,且不会传递工作目录或环境变量;sudo 则增加了复用当前控制台和环境变量的选项。- 目前它不能以任意用户身份运行,也不能模拟
sudoers风格的策略;这一点最多只能算“在路线图上”。 - 有人质疑,为什么这些能力没有加到
runas上,而是要创建一个新工具。
命名与跨平台兼容性
- 一个很大的讨论分支认为“sudo”这个名称具有误导性,因为其行为和选项与 Unix sudo 差异很大,而且没有 sudoers 文件。
- 批评者把这与 PowerShell 过去的
curl/wget别名类比,并担心文档和搜索会产生混淆;也有人认为,只要常见用例相似,复用名称是可以接受的,并指出 Windows 上几乎不可能与真正的 sudo 共存。
安全性担忧
- Sudo 天生就是权限提升向量,因此一些人对它居然发布了感到惊讶。
- UAC 仍会弹出;按设计,UAC 对话框会将
sudo.exe显示为 Microsoft 出品方,并在详细信息中显示实际命令行。一些评论者认为这具有误导性。 - 还有人担心其复杂性(多个进程、RPC、句柄)以及这是否构成正式的“安全边界”;UAC 被描述为纵深防御,而非硬边界。
- 早期第三方分析声称存在多个问题;维护者表示其中许多已在内部修复,但由于 Insider 版本的发布节奏而尚未公开。
配置模式
- 默认的“新窗口”模式会启动一个提升权限的控制台,以避免在同一窗口中混合不同完整性级别带来的安全问题。
- 可选的“inline” / “disableInput” 模式可以在现有控制台中运行提升权限的命令;这些模式被明确指出风险更高,但因使用体验更顺手而受到欢迎。
现有替代方案
- 讨论中提到的工具包括:gsudo、scoop 的
sudo.ps1、win-sudo 包装器、NirSoft 的elevate、psexec -i -s、PowerShell 的Start-Process -Verb RunAs。 - 许多人表示,他们仍会继续使用 gsudo 来获得高级功能(例如以 SYSTEM/TrustedInstaller 运行);Microsoft 的博客甚至链接了它,视为互补工具。
更广泛的 Windows 开发体验
- 有人认为 sudo 是让 Windows 更接近 Unix 友好化的一部分(PowerShell、WSL2、winget),并推测(常带怀疑态度)这是否暗示更深层的 Linux 集成,甚至未来会出现 Linux 内核版 Windows。
- 也有人认为 Windows 仍然显得碎片化(多个 shell、重叠工具),而且通过 WSL 在 Windows 上“跑 Unix”本来就让像 sudo 这样的原生增强显得不那么有吸引力。
其他
- 讨论还涉及企业从 Windows 10 迁移到 11、硬件要求、合规性工作负载,以及外包 IT 使操作系统升级并不简单。
- 另一个侧边话题提到 Microsoft 团队会为 epics/大型讨论串保留“整十编号”的 GitHub issue。