博客 / Linux/ CentOS 7 系统下 vsftpd 安装、配置与常见错误(500/530/553)解决方案

CentOS 7 系统下 vsftpd 安装、配置与常见错误(500/530/553)解决方案

CentOS 7 系统下 vsftpd 安装、配置与常见错误(500/530/553)解决方案

一、安装 vsftpd

在 CentOS 7 系统上,使用 yum 包管理器安装 vsftpd。

yum -y install vsftpd

二、创建 FTP 用户及目录

vsftpd 默认会创建一个名为 ftp 的系统用户。但为了安全和管理方便,建议为每个 FTP 服务创建独立的专用用户。

1. 创建专用用户

以下命令创建一个名为 ftpuser 的用户,其主目录为 /var/ftp/pub,并禁止其登录系统 shell。

adduser -d /var/ftp/pub -g ftp -s /sbin/nologin ftpuser

2. 为用户设置密码

passwd ftpuser

3. 配置用户访问列表

编辑用户列表文件,将新建的用户名加入允许访问的列表(具体行为取决于 vsftpd.conf 中的 userlist_deny 设置)。

vi /etc/vsftpd/user_list

在文件末尾添加用户名 ftpuser

4. 配置用户根目录锁定(Chroot)

编辑 chroot 列表文件,指定哪些用户将被锁定在其主目录内。

vi /etc/vsftpd/chroot_list

在文件中添加用户名 ftpuser

三、修改 vsftpd 主配置文件

主配置文件为 /etc/vsftpd/vsftpd.conf。关键配置项说明:

  • anonymous_enable=NO:禁止匿名登录。
  • local_enable=YES:允许本地用户登录。
  • write_enable=YES:允许写入操作。
  • local_umask=022:设置本地用户创建文件的默认权限掩码。
  • chroot_local_user=YES:将所有本地用户限制在其主目录内。
  • chroot_list_enable=YES:启用 chroot 用户列表。
  • chroot_list_file=/etc/vsftpd/chroot_list:指定 chroot 列表文件路径。
  • userlist_enable=YES:启用用户列表功能。
  • userlist_file=/etc/vsftpd/user_list:指定用户列表文件路径。
  • userlist_deny=NO:仅允许 user_list 文件中的用户登录(白名单模式)。

修改后保存文件。

四、修正 PAM 认证配置(解决 530 Login incorrect 错误)

编辑 PAM 配置文件 /etc/pam.d/vsftpd,注释掉或修改可能导致认证失败的模块。一个常见的安全配置如下:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
# 注释掉 pam_shells.so,允许使用 /sbin/nologin 等 shell 的用户登录
#auth       required    pam_shells.so
auth       required    pam_nologin.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

关键是将 auth required pam_shells.so 一行注释掉,否则使用 /sbin/nologin shell 的用户将无法通过认证。

五、解决 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误

从 vsftpd 2.3.5 开始,出于安全考虑,被 chroot 的用户主目录不能有写权限。有两种解决方法:

方法一:移除用户主目录的写权限(推荐)

为用户创建一个子目录(如 upload)用于上传,并确保主目录本身不可写。

mkdir /var/ftp/pub/upload
chown ftpuser:ftp /var/ftp/pub/upload
chmod a-w /var/ftp/pub

方法二:允许可写的 chroot 目录(降低安全性)

/etc/vsftpd/vsftpd.conf 中添加以下配置:

allow_writeable_chroot=YES

注意: 方法二会降低安全性,仅在特定场景下使用。

六、解决 553 Could not create file 错误

此错误通常是由于目标目录的权限问题导致用户无法写入。请确保 FTP 用户对其上传目录拥有写权限。

chown -R ftpuser:ftp /var/ftp/pub/upload
chmod -R 755 /var/ftp/pub/upload

七、CentOS 7 下 vsftpd 服务管理命令

  • 启动服务:systemctl start vsftpd
  • 停止服务:systemctl stop vsftpd
  • 重启服务:systemctl restart vsftpd
  • 查看状态:systemctl status vsftpd
  • 设置开机自启:systemctl enable vsftpd

八、防火墙与 SELinux 配置

1. 防火墙

如果系统防火墙(firewalld)开启,需要放行 FTP 服务(端口 21)以及被动模式可能用到的端口范围。

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

2. SELinux

如果 SELinux 处于 enforcing 模式,需要调整布尔值以允许 FTP 访问用户主目录。

setsebool -P ftp_home_dir on

如果使用非标准目录,可能需要额外设置文件上下文标签。

九、FTP 客户端连接与测试

使用 FTP 客户端(如 FileZilla)或命令行工具 ftp 进行连接测试。确保使用正确的用户名、密码和服务器地址。

提示: 现代网络环境中,建议考虑使用更安全的 SFTP(基于 SSH)或 FTPS(FTP over SSL/TLS)替代传统的明文 FTP 协议。

发表评论

您的邮箱不会公开。必填项已用 * 标注。