将 OpenSSH 控制套接字放置在 /run 中

将 OpenSSH 控制套接字放置在 /run 中

OpenSSH 具有允许您通过控制套接字复用连接的功能。人们普遍认为,由于公共访问套接字会引发安全问题,这些控制套接字不应驻留在公共区域。

使用诸如~/.ssh/sockets套接字位置之类的东西也是一般策略。这提出了一个我已经解决了一段时间的问题。

当主进程被强制终止并且清理未完成时,您的套接字存储将充满需要手动清除的剩余套接字。此类情况的示例包括断电或其他硬件故障。

现代 Linux 发行版都/run包含包含易失性运行时数据以及/run/user/<uid>针对每个用户的易失性运行时数据。该目录只能由所有者访问,并且由系统为用户创建。

考虑到控制套接字完全符合此描述,我很乐意将套接字转移到那里。然而,存在某些问题 OpenSSH 配置仅允许您通过用户名来寻址当前用户,而目录是为用户的 UID 创建的。我在主机之间共享一般配置,因此我不想在配置中对 UID 进行硬编码。

我正在寻找一种干净的解决方案,允许人们使用通用 OpenSSH 配置,从而在启动时清除套接字。

答案1

自 2016 年 2 月发布的 OpenSSH 7.2 起,%i现在支持ControlPath表达式,扩展为数字 UID。

例如,

ControlPath /run/user/%i/master-%l-%r@%h:%p

或者,如果较新的 OpenSSH 不可用,您可以考虑使用它/dev/shm来存储临时数据。它是世界上可写的并且始终是tmpfs。尽管其他用户可以访问它,但控制套接字本身具有适当的访问权限,因此它应该是安全的。

https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp

相关内容