You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置仅允许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:验证配置效果

需要做两个验证,确保权限锁死且转发功能正常:

  1. 验证无法登录shell
    尝试用该用户直接登录:

    ssh limited-forwarder@your-server-ip
    

    此时应该会看到我们设置的提示信息,随后连接自动断开,无法进入命令行。

  2. 验证反向端口转发正常
    在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

火山引擎 最新活动