如何限制 SSH 用户仅允许 SSH 隧道?

如何限制 SSH 用户仅允许 SSH 隧道?

如何限制 SSH 服务器上的用户以允许他们仅有的的特权SSH 隧道?即,即使他们通过 SSH 登录也无法运行命令。

我的Linux服务器是Ubuntu 11.04和OpenWrt。

答案1

在服务器端,您可以通过将用户 shell 设置为 来限制这一点/bin/true。这将允许他们进行身份验证,但实际上不能运行任何东西,因为他们没有 shell 来运行它。这意味着他们将仅限于 SSH 能够提供给他们的任何子集。如果它提供端口转发,他们仍然能够做到这一点。

在客户端,您可能希望与-N.这会阻止客户端请求远程命令(例如 shell),它只会在身份验证部分完成后停止。感谢评论者指出这一点。

答案2

以下的优点是 X11 和 SSH 代理套接字转发也被禁止,但在 Calebs 方式中可能仍然允许。另一个优点是,如果用户能够通过任何其他方式更改其默认 shell,这仍然会限制其 SSH 访问仅限于 TCP 转发。

将以下内容放入您的/etc/ssh/sshd_config

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

允许用户that-restricted-guy通过启用 SSH 的计算机转发任何 TCP 连接(到该计算机的连接,甚至localhost从该计算机到其他计算机的连接)。

如果您希望它更具限制性(这是一个好主意),您还可以执行以下操作:

Match User even-more-restricted-guy
  PermitOpen 127.0.0.1:12345
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

这将允许用户even-more-restricted-guy仅将连接转发到 127.0.0.1 TCP 端口 12345(因为它通过启用 SSH 的计算机可见)。

当用户正常连接时,他现在将立即断开连接,因为/bin/false将触发该命令,该命令不会执行任何操作,只会立即以代码 1 退出。如果您想避免这种情况并保持转发连接打开,请-Nssh命令中添加该标志。这不会尝试执行任何命令,但仍然允许设置 TCP 转发。

应该在后一种设置中工作的转发命令的示例:

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine

答案3

您可以通过匹配组来控制人们在 ssh 中可以执行的操作,假设您的 ssh 版本足够新以支持它(openssh 5.x+)。

基本上,我们将他们视为 sftp 用户,但允许 tcp 转发和可选地指定它们可能转发到的目的地。如果您给他们一个主目录,但没有在其下创建任何目录,他们将无法传输任何文件,因为他们没有这样做的权限。

Match Group                     nicepeople
    PubkeyAuthentication        yes
    PasswordAuthentication      yes
    PermitEmptyPasswords        no
    GatewayPorts                no
    ChrootDirectory             /opt/dummy_location/%u
    ForceCommand                internal-sftp
    AllowTcpForwarding          yes
        PermitOpen              192.168.0.8:22
        PermitOpen              192.168.0.5:8080
    # Or leave out the PermitOpen to allow forwarding to anywhere.
    HostbasedAuthentication     no
    RhostsRSAAuthentication     no
    AllowAgentForwarding        no
    Banner                      none

你可以重复这些比赛组您希望为每个组提供不同的行为或限制的块。

您可以使用 iptables 进一步控制此人可以在网络上访问的位置

/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT

假设组“nicepeople”GID 为 500。

上述一些 ssh 选项在旧版本的 openssh 中可用,但在“匹配组”部分中不可用。匹配组在 OpenSSH 4.x 及更早版本中非常有限。

相关内容