假设我创建了一个帐户,其登录shell实际上是一个不允许交互式登录的脚本,并且只允许远程执行非常有限的特定命令集。
尽管如此, ssh 允许该帐户的用户转发端口,这是一个漏洞。
现在,扭曲的是我实际上希望该帐户在设置特定的端口转发配置时 ssh 会议成立。但是必须配置任意端口转发。
(如果允许的端口转发配置无条件地建立为每个会话的一部分,则这是可接受的解决方案。)
假设我创建了一个帐户,其登录shell实际上是一个不允许交互式登录的脚本,并且只允许远程执行非常有限的特定命令集。
尽管如此, ssh 允许该帐户的用户转发端口,这是一个漏洞。
现在,扭曲的是我实际上希望该帐户在设置特定的端口转发配置时 ssh 会议成立。但是必须配置任意端口转发。
(如果允许的端口转发配置无条件地建立为每个会话的一部分,则这是可接受的解决方案。)
Answers:
事实证明,OpenSSH有一个功能,限制 -L 样式在服务器端打开。该功能有两种方式。
在服务器配置文件中有一个 PermitOpen 选项。此选项可用于指定可以建立转发的主机和端口。此选项可在a内使用 Match 阻止,因此可以受用户,组或主机名或IP地址模式的限制。
在一个 authorized_keys 文件,选项可以与特定键相关联。有一个 permitopen 选项与server-config类似。
注意事项/限制:
选项 AllowTcpForwarding 禁用所有双向转发,防止在服务器上设置侦听端口,以及活动转发。
没有 PermitOpen 访问控制 -R 风格连接。这可能还可以。这意味着用户可以使用 ssh 打开各种非特权端口以在服务器上侦听。这些连接在SSH连接的另一端是客户端的问题。如果我们限制转发 -L 方向,用户无法使用它们 -R 港口(至少不通过 ssh,如果该用户无法创建任意交互式会话)。
似乎没有办法创建允许打开的空列表,以防止用户进行任何打开 -L 风格的联系。但是,解决方法是使用无害,不存在或不可能的主机名,例如空字符串。具体而言, permitopen=":1234" 诀窍。
-R这对我有用。