![使用 /bin/cat 作为受限用户的 shell 是否安全?](https://linux22.com/image/24694/%E4%BD%BF%E7%94%A8%20%2Fbin%2Fcat%20%E4%BD%9C%E4%B8%BA%E5%8F%97%E9%99%90%E7%94%A8%E6%88%B7%E7%9A%84%20shell%20%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8%EF%BC%9F.png)
我需要远程登录少数人的机器来执行维护任务,但有时这些机器可能位于防火墙或 NAT 后面。
我一直这样做的方式是向用户提供有关如何使用 SSH 登录我的系统的建议,以便启用反向隧道,例如“使用命令并使用密码登录”。ssh -R 12345:localhost:22 [email protected]
xyzzy
现在,这工作正常,但为了安全起见,我需要uremonte
在完成后禁用用户的 ssh 登录,并记住在我再次需要时重新启用它,否则有人可能会登录到我的管理前端机器不需要,或者说合法用户可能会在我使用隧道时尝试乱搞。
我考虑将用户 shell 设置为/etc/passwd
,/bin/cat
这样任何登录的人都没有机会在 shell 上执行任何操作,并且连接仍然会在反向隧道中保持活动状态。这似乎没问题,但我想确保这不会在我的系统中造成任何漏洞。
那么问题来了,这绝对安全吗?登录此帐户的人有什么办法可以摆脱猫陷阱吗?
答案1
这是更换外壳的一个非常标准的原因。通常使用/bin/false
或其他类似的外壳。/bin/cat
通常,您无法逃脱/bin/cat
,并且不太可能cat
存在安全错误,但其他方法可能仍然有效,例如创建拒绝服务或绕过防火墙规则。
另一个可能更严重的问题是,如果您将该internal-sftp
模块用于sftp
.这将允许/bin/cat
使用 as shell的用户sftp
访问您的文件系统并浏览其内容。
对于您的特定用例,我建议使用隧道或 VPN,而不是为您的客户提供 ssh 访问权限。