解决 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 一致,否则被动模式失效
相关推荐
土星云SaturnCloud17 小时前
边缘计算微服务器自然散热技术详解
服务器·人工智能·ai·边缘计算
张小姐的猫17 小时前
【Linux】多线程实战 —— 日志类 | 策略模式
linux·运维·服务器·c++·bash·策略模式
qq_4523962317 小时前
第七篇:《Docker 存储:Volume、Bind Mount 与 tmpfs》
运维·docker·容器
handler0118 小时前
【Linux】五种IO模型详解
linux·运维·服务器·c语言·网络·笔记·php
运维行者_1 天前
Applications Manager中的Redis监控
大数据·服务器·数据库·人工智能·网络协议
xingyuzhisuan1 天前
网络 Token 常见故障原理,基础排查科普
运维·服务器·网络·php
APIshop1 天前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
wljy11 天前
二、进制状态转换
linux·运维·服务器·c语言·c++
handler011 天前
【MySQL】常用命令总结(库与表增删查改)
运维·数据库·mysql·命令·总结
week@eight1 天前
Linux - Doris
linux·运维·数据库·mysql