如何配置仅允许SSH端口转发的受限服务器用户
如何配置仅允许SSH端口转发的受限服务器用户
刚好做过好多次这种场景的配置!给不可信设备开反向SSH转发的话,核心就是把用户的所有额外权限彻底锁死,只保留TCP端口转发的能力,绝对不能让用户拿到shell或者访问服务器文件。下面是一步步的实操流程:
步骤1:创建无交互shell的受限用户
首先要创建一个专门的用户,并且给它一个无法登录交互shell的程序作为默认shell,这样用户连上来后根本没法进入命令行。
执行这条命令创建用户:
sudo useradd -m -s /usr/sbin/nologin limited-forwarder
-m:强制创建用户的家目录(部分SSH配置依赖家目录存放密钥文件,所以建议加上)-s /usr/sbin/nologin:指定用户的登录shell为nologin,这是系统自带的、专门用来禁止交互式登录的程序
如果是比较老的系统,/usr/sbin/nologin不存在的话,可以换成/bin/false,效果一致。
步骤2:修改SSH服务端配置(核心环节)
接下来要编辑SSH服务的配置文件/etc/ssh/sshd_config,给这个用户单独设置权限规则,把所有无关的功能全部禁用。
打开配置文件:
sudo nano /etc/ssh/sshd_config
在文件末尾添加以下配置块(一定要放在所有全局配置之后):
Match User limited-forwarder # 允许TCP端口转发(正向+反向都包含) AllowTcpForwarding yes # 禁用X11图形转发 X11Forwarding no # 禁用SSH代理转发 AllowAgentForwarding no # 禁止分配终端(彻底堵死交互式登录的可能) PermitTTY no # 强制执行提示命令,阻止用户执行任何自定义操作 ForceCommand echo "This account is ONLY for SSH port forwarding. No shell access permitted!" # 可选:用密码登录就设yes,用密钥登录建议设no更安全 PasswordAuthentication yes # 禁用隧道模式(非必需的话务必关闭) PermitTunnel no # 可选:限制只能转发到特定本地端口,比如只允许转本机8080 # 启用后能大幅提升安全性,防止用户随意转发其他服务 # PermitOpen 127.0.0.1:8080
关键配置项说明:
Match User limited-forwarder:后续所有配置仅对该用户生效,不影响其他正常用户ForceCommand:不管用户尝试执行什么命令参数,都会强制输出提示后断开连接,彻底阻断shell访问PermitOpen:可选的强限制规则,如果你只需要用户反向转发到某个固定业务端口,一定要加上这条
步骤3:重启SSH服务生效配置
修改完配置后,必须重启SSH服务才能让新规则生效:
# 适用于systemd系统(Ubuntu 16.04+/CentOS 7+/Debian 9+) sudo systemctl restart sshd # 适用于老SysVinit系统(比如CentOS 6) sudo service ssh restart
步骤4:验证配置效果
需要做两个验证,确保权限锁死且转发功能正常:
验证无法登录shell:
尝试用该用户直接登录:ssh limited-forwarder@your-server-ip此时应该会看到我们设置的提示信息,随后连接自动断开,无法进入命令行。
验证反向端口转发正常:
在NAT后的客户端执行反向转发命令:ssh -R 8080:localhost:3000 limited-forwarder@your-server-ip这条命令的作用是:将客户端的3000端口,反向转发到你的服务器8080端口。
接着在你的服务器上执行以下命令,检查端口监听状态:ss -tulpn | grep 8080如果能看到类似
LISTEN 0 128 127.0.0.1:8080 0.0.0.0:*的输出,说明转发成功。
额外安全提示
- 优先使用密钥登录:避免密码泄露风险,将用户公钥放入
/home/limited-forwarder/.ssh/authorized_keys,同时将sshd_config中的PasswordAuthentication设为no,并确保/home/limited-forwarder/.ssh权限为700、authorized_keys权限为600。 - 用组批量管理用户:如果需要给多个用户开这个权限,建议先创建组(
sudo groupadd forward-users),再将用户加入组(sudo usermod -aG forward-users limited-forwarder),最后把sshd_config中的Match User改成Match Group forward-users,方便批量管理。
备注:内容来源于stack exchange,提问作者HappyFace




