假设我创建了一个帐户,其登录 shell 实际上是一个脚本,它不允许交互式登录,并且只允许远程执行一组非常有限的特定命令。
尽管如此,ssh
允许该账户的用户转发端口,这是一个漏洞。
现在,问题在于我实际上希望该帐户在建立会话时设置特定的端口转发配置ssh
。但配置任意端口转发肯定是不可能的。
(如果允许的端口转发配置作为每个会话的一部分无条件建立,则这是一个可接受的解决方案。)
答案1
事实证明,OpenSSH 有一个功能可以解决这个问题,即限制-L
服务器端的样式打开。该功能有两种使用方式。
在服务器配置文件中有一个
PermitOpen
选项。此选项可用于指定可以建立转发的主机和端口。此选项可在Match
块内使用,因此可以通过用户、组或主机名或 IP 地址模式进行限制。在
authorized_keys
文件中,选项可以与特定键相关联。有一个permitopen
选项的作用与 server-config 选项类似。
注意事项/限制:
该选项
AllowTcpForwarding
禁用所有方向的转发,阻止在服务器上设置监听端口以及主动转发。对于样式连接没有
PermitOpen
访问控制-R
。这可能没问题。这意味着用户可以使用ssh
来打开各种非特权端口以监听服务器。这些端口连接到 SSH 连接另一端的位置是客户端的问题。如果我们限制方向的转发-L
,用户就无法使用这些-R
端口(至少不能通过ssh
,如果该用户无法创建任意交互式会话)。似乎没有办法创建一个允许打开的空列表,以防止用户进行任何
-L
样式连接。但是,一种解决方法是使用无害、不存在或不可能的主机名,例如空字符串。具体来说,这permitopen=":1234"
可以解决问题。
答案2
似乎没有办法创建一个允许打开的空列表,以防止用户进行任何 -L 样式的连接。但是,一种解决方法是使用无害、不存在或不可能的主机名,例如空字符串。具体来说,permitopen=":1234" 可以解决问题。
可以使用“any”参数来删除所有限制并允许任何转发请求。可以使用“none”参数来禁止所有转发请求。默认情况下,允许所有端口转发请求。