解决 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 一致,否则被动模式失效
相关推荐
qinyia2 小时前
Rocky Linux 9 源码编译 Asterisk 20 + FreePBX 17 搭建小型呼叫中心
linux·运维·人工智能
艾莉丝努力练剑2 小时前
【Linux网络】Linux 网络编程入门:TCP Socket 编程(上)
linux·运维·服务器·网络·tcp/ip·计算机网络
wgl6665202 小时前
ELF文件 && 链接与加载
linux·运维·服务器
liuluyang5302 小时前
linux kernel CONFIG_FHANDLE解析
linux·运维·服务器
2601_958320573 小时前
【详细版教程】Windows/macOS/Linux 安装 OpenClaw 2.6.6 指南(包含安装包)
linux·运维·windows·macos·小龙虾·open claw一键安装
霜落花轻扬3 小时前
在 Rails 中指定端口和 IP 地址
服务器·ruby on rails
一只专注api接口开发的技术猿4 小时前
京东商品实时监控选品实战:用 Open Claw API 快速搭建自动化工具
运维·数据库·自动化
ACP广源盛139246256734 小时前
磐石 100 :IX6012 :ASM1812@ACP#国产 PCIe 2.0 交换芯片,轻量级算力扩展应用分享
大数据·linux·运维·网络·人工智能·嵌入式硬件·电脑
H Journey4 小时前
网络编程:服务器监听+非阻塞设置
服务器·网络·服务器监听+非阻塞设置