如何限制SSH服务器上的用户以仅允许他们使用SSH TUNNELING的特权?也就是说,即使他们通过SSH登录,他们也无法运行命令。
我的Linux服务器是Ubuntu 11.04和OpenWrt。
如何限制SSH服务器上的用户以仅允许他们使用SSH TUNNELING的特权?也就是说,即使他们通过SSH登录,他们也无法运行命令。
我的Linux服务器是Ubuntu 11.04和OpenWrt。
Answers:
在服务器端,您可以通过将其用户外壳程序设置为来限制此设置/bin/true
。这将允许他们进行身份验证,但实际上不能运行任何东西,因为它们没有外壳可用于运行。这意味着它们将限于SSH能够提供给它们的任何子集。如果它提供端口转发,他们仍然可以做到。
在客户端,您可能需要连接-N
。这将阻止客户端请求诸如Shell之类的远程命令,只是在身份验证部分完成后才停止。感谢评论者指出这一点。
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
。
下面的优点是也不允许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
您可以通过匹配组来控制人们可以在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和更早版本中,匹配组非常有限。