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


Answers:


34

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

在客户端,您可能需要连接-N。这将阻止客户端请求诸如Shell之类的远程命令,只是在身份验证部分完成后才停止。感谢评论者指出这一点。


我会尝试这个:P thx!
LanceBaynes 2011年

2
要增加Caleb的答案,您可能还需要告诉客户端不要执行Shell。在openssh命令行中,这是通过-N标志完成的。PuTTY中有一个类似的选项,但我不记得确切的名称。
Bill B

嗯,那基本上是客户端安全,不是吗?我正在搜索服务器端安全性设置,但谢谢!
LanceBaynes 2011年

2
抱歉,我不清楚-我的意思是与服务器设置结合使用。我过去的经验是,如果将shell设置为非shell,则根本无法连接,因为它试图打开shell但不能。因此,安全性是在服务器端强制执行的(使用Caleb的方法),但是如果此后出现连接问题,则可能需要设置客户端开关。
Bill B

3
您可以使用创建此类用户useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
fracz

13

下面的优点是也不允许X11和SSH代理套接字转发,但仍然可以按Calebs的方式允许转发。另一个优点是,如果用户能够通过任何其他方式更改其默认外壳,这仍将其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。如果要避免这种情况并保持转发连接打开,请将该-N标志添加到ssh命令。这不会尝试执行任何命令,但仍允许设置TCP转发。

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

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

1
我将答案改写为比Calebs答案更好的解决方案。
AEF

当然。我也打扫过 很高兴看到误解得以解决。晚安。
加库耶

1

您可以通过匹配组来控制人们可以在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和更早版本中,匹配组非常有限。

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.