CentOS环境下VSFTP常见问题及解决方法
systemctl start vsftpd后服务无法启动,或启动后立即停止。journalctl -xeu vsftpd.service(日志会提示配置文件语法错误、端口冲突等关键信息);/etc/vsftpd/vsftpd.conf是否有语法错误(如等号两边有空格、无效配置项);netstat -tuln | grep 21,若有冲突需修改vsftpd.conf中的listen_port或停止占用进程。firewall-cmd --permanent --add-service=ftp(或手动添加--add-port=21/tcp),然后firewall-cmd --reload;vsftpd.conf中的pasv_min_port和pasv_max_port(如pasv_min_port=60000,pasv_max_port=61000),并开放这些端口;getenforce若为Enforcing,可临时关闭setenforce 0测试,或永久关闭(修改/etc/selinux/config中的SELINUX=disabled)。/etc/ftpusers文件中(该文件列出的用户禁止FTP登录);vsftpd.conf中的local_enable=YES(允许本地用户登录)、anonymous_enable=NO(禁止匿名登录,若需匿名需单独配置);/etc/pam.d/vsftpd文件是否存在且配置正确(默认通常无需修改);/etc/vsftpd/virtual_users.db)路径正确,且vsftpd.conf中启用了guest_enable=YES、guest_username=ftp(虚拟用户映射到系统用户)。chmod 755 /home/username(确保用户对目录有读和执行权限,上传需写权限);vsftpd.conf中write_enable=YES;chroot(chroot_local_user=YES),需允许chroot目录可写:allow_writeable_chroot=YES(注意:此设置存在安全风险,建议仅在测试环境使用,生产环境可通过调整目录结构避免);setsebool -P ftp_home_dir on(允许FTP访问用户主目录)、setsebool -P allow_ftpd_full_access on(允许FTP完全访问,谨慎使用)。setenforce 0(若问题消失,说明是SELinux导致);/etc/selinux/config中的SELINUX=disabled,重启服务器;setsebool -P ftp_home_dir on(允许访问用户主目录)、setsebool -P ftpd_disable_trans 1(允许FTP穿越chroot目录,解决“cannot change directory”问题)。vsftpd.conf后服务无法启动,或功能不生效(如chroot_local_user=YES未限制用户)。vsftpd -t(命令会提示语法错误的具体行);option=value(无空格),如local_enable=YES(而非local_enable = YES);vsftpd.conf中启用了被动模式:pasv_enable=YES;pasv_min_port=60000,pasv_max_port=61000(范围根据需求调整,建议大于1024);firewall-cmd --permanent --add-port=60000-61000/tcp,然后firewall-cmd --reload;pasv_address为服务器公网IP(若为内网,客户端需配置被动模式端口转发)。user1换行password1);db_load -T -t hash -f virtual_users.txt /etc/vsftpd/virtual_users.db(生成Berkeley DB格式文件);/etc/pam.d/vsftpd.vuauth,添加auth required pam_userdb.so db=/etc/vsftpd/virtual_users和account required pam_userdb.so db=/etc/vsftpd/virtual_users;vsftpd.conf:guest_enable=YES、guest_username=ftp(虚拟用户映射到系统用户ftp)、user_config_dir=/etc/vsftpd/user_config(虚拟用户个人配置文件目录,如user1的配置文件为/etc/vsftpd/user_config/user1,可单独设置权限)。