解决 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 一致,否则被动模式失效
相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟2 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome