在 Windows 10 服务器机箱上运行 Windows 版本的 OpenSSH(通过管理可选功能 GUI 安装)已有一段时间了。到目前为止,SSH 仅在 LAN 上使用,但我正在努力强化我的 SSH 配置,以便将其暴露给 WAN。
除了强化sshd_config
自身功能,IE 仅允许一个特定的受限用户在连接来自 WAN 时使用,我还在考虑服务本身。我知道在特定用户帐户下运行服务通常是一种很好的做法。(尽管我在这方面的经验非常有限)
目前,sshd.exe
似乎在SYSTEM
帐户下运行,我曾想过要更改这一点,因为SYSTEM
权限很高。但是,我注意到,当用户通过 SSH 连接时,sshd.exe
会创建另一个进程,并在该用户帐户下运行。这是否意味着可以将“初始”sshd.exe
进程作为 运行SYSTEM
?
另外,我注意到,当用户已连接但尚未进行身份验证(使用密码身份验证,最终将在 WAN 上被禁用)时,sshd.exe
将创建一个以该用户身份运行的实例sshd_644
。有人能解释一下这个用户帐户是什么吗?
任何意见均表示赞赏。
是的,而且这有点不可避免——sshd 的实际工作本质上是高度特权的;毕竟,它需要拥有成为任何用户的权限才能处理登录。(而不仅仅是通过标准的 Windows 进程进行“交互式”登录,因为这需要密码——SSH 密钥对身份验证不能使用密码,因此它必须完全信任 sshd 服务来验证凭据,然后模拟您的帐户,这是服务可以执行的最高特权操作之一。)
OpenSSH 源自 Unix 环境,其中 sshd 服务几乎总是以“root”身份运行,默认情况下,该帐户的权限甚至比 Windows 上的 SYSTEM 更高。(例如,在 Windows 上必须刻意激活文件权限绕过等功能,但在类 Unix 系统上,默认情况下 root 会启用这些功能。)它被设计为在这样的环境中生存(请参阅下一节),并且它很可能在 Windows 上以 SYSTEM 身份生存。
可以在受限帐户下运行 sshd,但这意味着您只能登录到同一个帐户(因为 sshd 不再被允许成为其他人)——并且它还会破坏 OpenSSH 本来会拥有的一些保护,因为它现在将同一个帐户暴露给预身份验证错误,否则这些错误只会局限于“sshd”帐户。
这就是 OpenSSH 为弥补其特权运行需求而实施的“特权分离”机制——它实际上并不让主特权进程处理登录;它会产生一个非特权进程,除了与客户端通信或将结果传达给父进程外,它几乎无能为力。(Linux 和 BSD 有各种机制,例如 seccomp,用于限制进程在标准“单独用户帐户”障碍之外可以执行的操作;Windows 在某种程度上也是如此,但我不知道 OpenSSH 是否使用它们——可能很大程度上取决于您安装了哪个OpenSSH Windows 端口。)
这种模式通常见于需要执行某些特权操作的 Linux 服务中,例如,邮件服务器将在 root 帐户下启动,但实际上它会有一个以 root 身份运行的监督进程和 3-5 个在有限帐户(通常是多个)下处理不同任务的进程。