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

如何为Linux用户限制VSFTPD与SSH的总并发连接数(上限5)?

可行!完整实现方案

这个需求完全可以落地,核心思路是通过PAM认证模块配合自定义脚本,在用户发起SSH/SFTP或VSFTPD连接前,统一统计该用户的两类连接总数,超过阈值就直接拒绝新请求。下面是具体的配置步骤:

一、编写连接计数脚本

先创建一个脚本,用来统计指定用户当前的SSH和VSFTPD连接数总和。保存为/usr/local/bin/check_user_connections.sh

#!/bin/bash
USER="$1"

# 统计SSH/SFTP连接数:筛选该用户名下的sshd子进程数量
SSH_COUNT=$(ps -u "$USER" | grep -c sshd)

# 统计VSFTPD连接数:筛选该用户名下的vsftpd子进程数量
VSFTP_COUNT=$(ps -u "$USER" | grep -c vsftpd)

# 计算总连接数
TOTAL=$((SSH_COUNT + VSFTP_COUNT))

# 阈值设为5,超过则返回非0值(PAM会触发拒绝逻辑)
if [ "$TOTAL" -ge 5 ]; then
    exit 1
else
    exit 0
fi

给脚本添加可执行权限:

chmod +x /usr/local/bin/check_user_connections.sh

二、配置PAM限制SSH/SFTP连接

编辑SSH的PAM配置文件/etc/pam.d/sshd,在文件开头新增一行:

auth    required    pam_exec.so quiet expose_authtok /usr/local/bin/check_user_connections.sh %u

说明:%u会自动将当前登录的用户名传递给脚本,pam_exec.so会在认证环节先执行脚本,若脚本返回非0值,直接拒绝用户登录请求。

三、配置PAM限制VSFTPD连接

编辑VSFTPD的PAM配置文件/etc/pam.d/vsftpd,同样在开头新增一行:

auth    required    pam_exec.so quiet expose_authtok /usr/local/bin/check_user_connections.sh %u

四、补充服务配置优化

  • SSH侧补充限制:如果想避免单个SSH会话开启过多子进程(比如多次SFTP复用连接),可以在/etc/ssh/sshd_config中针对目标用户/用户组设置会话上限(作为全局计数的补充):

    Match User target_user
        MaxSessions 5
    

    配置完成后重启sshd服务:systemctl restart sshd

  • VSFTPD侧确认配置:确保VSFTPD启用PAM认证,在/etc/vsftpd.conf中检查以下配置:

    pam_service_name=vsftpd
    userlist_enable=NO
    tcp_wrappers=NO
    

    重启vsftpd服务:systemctl restart vsftpd

五、测试验证

  1. 用目标用户同时开启4个SSH连接,尝试第5个可以正常登录;
  2. 保持5个SSH连接,再发起VSFTPD连接会被直接拒绝;
  3. 关闭1个SSH连接后,再次发起VSFTPD连接即可成功。

注意事项

  • 如果你的系统中vsftpd运行时的进程名不是vsftpd,需要修改脚本中grep的匹配关键词;
  • 确保系统已安装pam_exec模块(大部分主流发行版默认包含);
  • 针对批量用户,可以通过Match Group在sshd_config中配置组规则,或在脚本中添加用户组的判断逻辑。

内容的提问来源于stack exchange,提问作者CodeWriter

火山引擎 最新活动