如何限制ssh端口转发,而不否认它?


6

假设我创建了一个帐户,其登录shell实际上是一个不允许交互式登录的脚本,并且只允许远程执行非常有限的特定命令集。

尽管如此, ssh 允许该帐户的用户转发端口,这是一个漏洞。

现在,扭曲的是我实际上希望该帐户在设置特定的端口转发配置时 ssh 会议成立。但是必须配置任意端口转发。

(如果允许的端口转发配置无条件地建立为每个会话的一部分,则这是可接受的解决方案。)


如果没有人在几天内挺身而出,我会接受我自己的答案。也许正在努力。
Kaz

如果你保持不接受/打开一段时间,那么你将得到更多的关注。有些人喜欢周末度过 别的地方 比SO :)
Sampo Sarrala

我的原始答案是提议的补丁,但OpenSSH中的现有功能可以完成这项工作。
Kaz

哎呀,这属于serverfault,不是吗!很容易忘记这里的“超级用户”并不意味着“root”或“sysadmin”。
Kaz

Answers:


7

事实证明,OpenSSH有一个功能,限制 -L 样式在服务器端打开。该功能有两种方式。

  1. 在服务器配置文件中有一个 PermitOpen 选项。此选项可用于指定可以建立转发的主机和端口。此选项可在a内使用 Match 阻止,因此可以受用户,组或主机名或IP地址模式的限制。

  2. 在一个 authorized_keys 文件,选项可以与特定键相关联。有一个 permitopen 选项与server-config类似。

注意事项/限制:

  • 选项 AllowTcpForwarding 禁用所有双向转发,防止在服务器上设置侦听端口,以及活动转发。

  • 没有 PermitOpen 访问控制 -R 风格连接。这可能还可以。这意味着用户可以使用 ssh 打开各种非特权端口以在服务器上侦听。这些连接在SSH连接的另一端是客户端的问题。如果我们限制转发 -L 方向,用户无法使用它们 -R 港口(至少不通过 ssh,如果该用户无法创建任意交互式会话)。

  • 似乎没有办法创建允许打开的空列表,以防止用户进行任何打开 -L 风格的联系。但是,解决方法是使用无害,不存在或不可能的主机名,例如空字符串。具体而言, permitopen=":1234" 诀窍。


因为我可以没有细粒度的访问控制 -R这对我有用。
Kaz

0

似乎没有办法创建一个允许的空列表   打开,以防止用户进行任何-L样式连接   任何。但是,解决方法是使用无害,不存在或   不可能的主机名,例如空字符串。具体而言,   permitopen =“:1234”就可以了。

“any”的参数可用于删除所有限制并允许任何转发请求。参数“none”可用于禁止所有转发请求。默认情况下,允许所有端口转发请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.