解决 CentOS7+vsftpd 新建用户登录失败 + ls 卡住问题

一、背景与问题概述

在 VMware ESXi 环境下部署 CentOS7 虚拟机后,我计划搭建 vsftpd 服务实现文件传输,却接连遇到两个核心问题:

  1. 新建系统用户leo无法登录 FTP,报错530 Login incorrect
  2. 登录成功后执行ls命令卡住,无法查看目录文件

本文将完整复现问题排查与解决过程,帮助遇到相同问题的同学少走弯路。


二、前置环境说明

  • 虚拟化平台:VMware ESXi
  • 操作系统:CentOS7(内核 3.10+)
  • FTP 服务:vsftpd 3.0.2
  • 问题用户:新建普通用户leo(shell 为/bin/bash,家目录/home/leo

三、问题 1:新建用户登录失败(530 Login incorrect)

1. 问题表现

使用leo账号登录 FTP 时,输入密码后直接返回530 Login incorrect,但该账号可正常通过 SSH 登录系统,密码确认无误。

2. 排查过程

(1)基础信息确认

首先确认用户状态:

bash

运行

复制代码
grep leo /etc/passwd
# 输出:leo:x:1001:1001::/home/leo:/bin/bash

用户 shell 合法、家目录存在,排除账号本身问题。

(2)检查 vsftpd 黑名单

vsftpd 默认通过两个文件限制用户登录:

  • /etc/vsftpd/ftpusers:永久黑名单,禁止登录
  • /etc/vsftpd/user_list:可配置的允许 / 拒绝列表

执行命令检查:

bash

运行

复制代码
grep leo /etc/vsftpd/ftpusers
grep leo /etc/vsftpd/user_list

发现leo被写入了ftpusers黑名单。

(3)检查 PAM 认证配置

查看/etc/pam.d/vsftpd,发现关键限制规则:

bash

运行

复制代码
auth    required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth    required    pam_shells.so
  • pam_listfile.so:强制读取/etc/vsftpd/ftpusers作为黑名单,只要用户在文件中就拒绝登录
  • pam_shells.so:验证用户 shell 是否在/etc/shells中(本例中/bin/bash合法,无影响)

3. 解决方案

方案 A:清理黑名单(推荐保留规则)

bash

运行

复制代码
# 从黑名单中删除目标用户
sed -i '/leo/d' /etc/vsftpd/ftpusers
sed -i '/leo/d' /etc/vsftpd/user_list

# 重启vsftpd生效
systemctl restart vsftpd

四、问题 2:登录成功后 ls 命令卡住

1. 问题表现

用户成功登录 FTP(提示230 Login successful),但执行ls后无响应,终端卡住,最终超时断开,同时提示200 PORT command successful. Consider using PASV

2. 问题根源

FTP 有两种数据传输模式:

  • 主动模式(PORT):服务器主动连接客户端随机端口,易被防火墙 / NAT 拦截
  • 被动模式(PASV):客户端主动连接服务器指定端口,适配现代网络环境

CentOS7 默认防火墙会拦截主动模式的随机端口,导致数据通道无法建立,ls命令卡住。

3. 解决方案

(1)配置 vsftpd 被动模式

编辑/etc/vsftpd/vsftpd.conf,添加 / 修改以下配置:

ini

复制代码
# 启用被动模式
pasv_enable=YES
# 被动模式端口范围(自定义,避免与其他服务冲突)
pasv_min_port=40000
pasv_max_port=50000
# 被动模式对外暴露的IP(服务器实际IP)
pasv_address=10.18.18.77
(2)防火墙放行被动模式端口

bash

运行

复制代码
# 永久放行端口段
firewall-cmd --permanent --add-port=40000-50000/tcp
# 重新加载防火墙规则
firewall-cmd --reload
(3)重启 vsftpd 生效

bash

运行

复制代码
systemctl restart vsftpd
(4)客户端切换被动模式

在 FTP 客户端中执行:

bash

运行

复制代码
ftp> passive
Passive mode on.
ftp> ls

此时可正常查看目录文件,不再卡住。


五、总结

核心问题解决清单

表格

问题 核心原因 解决关键
530 登录失败 用户在 vsftpd 黑名单 / PAM 规则限制 清理黑名单
ls 命令卡住 主动模式被防火墙拦截 配置被动模式 + 放行指定端口段

避坑提醒

  1. CentOS7 官方源已停止维护,安装依赖前需先替换为国内镜像源(如阿里云)
  2. 新建用户的 shell 必须在/etc/shells中,否则会被pam_shells.so拦截
  3. 被动模式pasv_address必须与服务器实际 IP 一致,否则被动模式失效
相关推荐
ii_best2 小时前
手机自动化脚本按键精灵实战:随机布局安全数字键盘的自动化输入方案
android·运维·ios·自动化·手机
鲁邦通物联网2 小时前
充电站底层脱机DLB引擎解构:基于Linux调度的边缘计算网关并发控制实战
linux·运维·人工智能·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关
便利店10243 小时前
边界与远程:墙、洞与加密通道
运维·服务器·防火墙·acl·nat
Zhang~Ling3 小时前
Linux多线程互斥锁:从现象到原理解析
linux·运维·网络
KaiwuDB3 小时前
KaiwuDB 运维实战 03:双副本仲裁节点部署与高可用实践
运维·时序数据库·raft·kaiwudb·数据库运维·双副本高可用·仲裁节点
三言老师12 小时前
K8s集群运行时自动化运维全覆盖落地实操(下)
linux·运维·服务器·网络
Super 含13 小时前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
土星云SaturnCloud14 小时前
产线SOP动作级AI监管方案:土星云SE110S-WC8赋能合规识别、预警与效率分析
大数据·服务器·人工智能·ai·边缘计算
躺不平的理查德14 小时前
嵌入式 Linux 系统移植与 SD 卡量产镜像制作
linux·运维·服务器
一直走下去-明15 小时前
centos7无法安装tcpreplay
linux·运维