CentOS 下 vsftpd 配置文件详解
一 配置文件位置与格式
anonymous_enable=YES、write_enable=YES。该文件控制匿名访问、本地用户、写权限、日志、端口、chroot、SSL 等关键行为。二 核心配置项速查
anonymous_enable=YES/NO:是否允许匿名登录(默认YES)。local_enable=YES/NO:是否允许本地系统用户登录(默认NO,示例配置常为YES)。write_enable=YES/NO:是否允许写操作(全局开关,默认NO,示例常为YES)。local_umask=022:本地用户新建文件的权限掩码(常见为022)。anon_upload_enable=YES/NO:允许匿名上传(需同时开启 write_enable,默认NO)。anon_mkdir_write_enable=YES/NO:允许匿名建目录(默认NO)。anon_other_write_enable=YES/NO:允许匿名删除/重命名等(默认NO)。anon_world_readable_only=YES/NO:仅允许下载“世界可读”文件(默认YES)。anon_root=/var/ftp:匿名登录根目录(默认**/var/ftp**)。chroot_local_user=YES/NO:是否将所有本地用户禁锢在其家目录(默认NO)。chroot_list_enable=YES/NO:是否启用 chroot 用户列表(默认NO)。chroot_list_file=/etc/vsftpd.chroot_list:chroot 列表文件路径。allow_writeable_chroot=YES/NO:是否允许 chroot 目录可写(默认NO,开启可避免某些客户端在禁锢目录内写入时报错)。xferlog_enable=YES/NO:启用传输日志(默认NO,示例常为YES)。xferlog_file=/var/log/xferlog:wu-ftpd 风格传输日志路径。xferlog_std_format=YES/NO:是否使用标准 xferlog 格式(默认NO)。dual_log_enable=YES/NO:同时生成 xferlog 与 vsftpd 日志(默认NO)。dirmessage_enable=YES/NO、message_file=.message:进入目录显示提示信息。ftpd_banner=...、banner_file=...:登录横幅。connect_from_port_20=YES/NO:主动模式是否使用20端口发起数据连接(示例常为YES)。pasv_enable=YES/NO:是否启用被动模式(默认YES)。pasv_min_port=1024、pasv_max_port=1048:被动模式端口范围(建议固定范围便于防火墙放行)。listen=YES/NO、listen_ipv6=NO:是否以独立模式监听(默认YES),与 IPv6 互斥。max_clients=0、max_per_ip=0:最大连接数/每 IP 最大连接数(0 为不限制)。userlist_enable=YES/NO、userlist_deny=YES/NO、userlist_file=/etc/vsftpd.user_list:用户列表访问控制(两种语义:黑名单或白名单)。pam_service_name=vsftpd:PAM 认证配置文件名(对应**/etc/pam.d/vsftpd**)。tcp_wrappers=YES/NO:是否启用 TCP Wrappers(/etc/hosts.allow、/etc/hosts.deny)。/etc/vsftpd/ftpusers:系统级禁止登录的高权限用户列表(如 root 等),优先级高于 user_list 的允许规则。ssl_enable=YES/NO、allow_anon_ssl=NO、force_local_logins_ssl=YES、force_local_data_ssl=YESssl_tlsv1=YES、ssl_sslv2=NO、ssl_sslv3=NOrsa_cert_file=、rsa_private_key_file=:证书与私钥路径。三 典型场景配置示例
示例A 本地用户安全发布(禁锢家目录,主动/被动均可)
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
pasv_enable=YES
pasv_min_port=21234
pasv_max_port=30999
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
pam_service_name=vsftpd
要点:禁锢用户后,若需写入,开启allow_writeable_chroot=YES;被动模式固定端口便于防火墙放行(示例范围21234–30999)。
示例B 启用 TLS 加密传输
ssl_enable=YES
allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
pasv_min_port=21234
pasv_max_port=30999
要点:生成 PEM 证书后,客户端需使用FTPS;被动端口同样建议固定并放行。
四 访问控制与用户列表优先级
/etc/vsftpd/ftpusers:系统级禁止登录列表(如 root),优先级高。/etc/vsftpd.user_list:配合 userlist_enable=YES 使用;当 userlist_deny=YES 时为黑名单,当 userlist_deny=NO 时为白名单(仅列表内用户可登录)。chroot_local_user=YES, chroot_list_enable=NO:所有用户均被禁锢。chroot_local_user=NO, chroot_list_enable=YES:仅列表用户被禁锢。chroot_local_user=YES, chroot_list_enable=YES:仅列表用户不被禁锢(其余禁锢)。chroot_local_user=NO, chroot_list_enable=NO:所有用户均可跳出家目录。五 常见问题与排查要点
getsebool -a | grep ftp;必要时执行:setsebool -P ftp_home_dir on(允许本地用户家目录写入),或 setsebool -P ftpd_full_access on(放行更宽松的 FTP 访问),再重启 vsftpd。pasv_min_port/pasv_max_port 已设置;云服务器还需在安全组放行对应端口。xferlog_enable=YES、dual_log_enable=YES 便于定位;需要协议级调试可启用 log_ftp_protocol=YES(与 xferlog_std_format 互斥)。