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 的 elevatepsexec -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。