在 CentOS 上添加 FTP 账号,常见的有两种方式:使用系统用户 或 使用虚拟用户(推荐用于安全隔离),以下分别介绍两种方法,并说明如何配置 vsftpd 服务。
使用系统用户(简单但安全性较低)
安装 vsftpd
yum install -y vsftpd systemctl start vsftpd systemctl enable vsftpd
添加系统用户
# 创建用户(默认会创建同名家目录 /home/username) useradd ftpuser -s /sbin/nologin # 禁止登录 shell passwd ftpuser # 设置密码 # 如果要指定家目录(/var/www/html) useradd ftpuser -d /var/www/html -s /sbin/nologin
配置 vsftpd(/etc/vsftpd/vsftpd.conf)
确保以下设置:

anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES # 限制用户在家目录 allow_writeable_chroot=YES # 允许 chroot 后可写
重启服务
systemctl restart vsftpd
使用虚拟用户(推荐:更安全)
安装必要组件
yum install -y vsftpd db4 db4-utils
创建虚拟用户数据库
# 1. 创建用户密码文本文件(奇数行用户名,偶数行密码) cat > /etc/vsftpd/virtual_users.txt <<EOF ftpuser1 password1 ftpuser2 password2 EOF # 2. 生成数据库文件 db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db chmod 600 /etc/vsftpd/virtual_users.* # 3. 创建 PAM 配置文件 cat > /etc/pam.d/vsftpd_virtual <<EOF auth required pam_userdb.so db=/etc/vsftpd/virtual_users account required pam_userdb.so db=/etc/vsftpd/virtual_users EOF
创建本地映射用户(所有虚拟用户映射为此系统用户)
useradd -d /var/ftproot -s /sbin/nologin virtualftp chmod 755 /var/ftproot
配置 vsftpd(/etc/vsftpd/vsftpd.conf)
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES # 虚拟用户配置 guest_enable=YES guest_username=virtualftp user_config_dir=/etc/vsftpd/user_conf pam_service_name=vsftpd_virtual # 使用自定义 PAM 文件
为每个虚拟用户创建独立配置(可选)
mkdir /etc/vsftpd/user_conf cat > /etc/vsftpd/user_conf/ftpuser1 <<EOF local_root=/var/ftproot/ftpuser1 # 设置专属目录 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES EOF # 创建对应目录 mkdir -p /var/ftproot/ftpuser1 chown virtualftp:virtualftp /var/ftproot/ftpuser1
重启服务
systemctl restart vsftpd
防火墙和 SELinux 设置
防火墙开放 FTP
firewall-cmd --permanent --add-service=ftp firewall-cmd --reload
SELinux 调整(如果启用)
# 允许 ftp 访问家目录 setsebool -P ftp_home_dir on # 或者允许自定义目录 semanage fcontext -a -t public_content_rw_t "/var/ftproot(/.*)?" restorecon -Rv /var/ftproot
测试连接
# 安装 ftp 客户端 yum install -y ftp # 测试连接 ftp localhost # 输入用户名密码
注意事项
被动模式:如果客户端在 NAT 后无法连接,需在配置中指定被动模式端口范围:
pasv_min_port=30000 pasv_max_port=31000
并在防火墙开放这些端口。

日志查看:
/var/log/xferlog和/var/log/vsftpd.log安全性:

- 使用虚拟用户更安全
- 考虑启用 TLS:
ssl_enable=YES - 限制用户访问目录(chroot)
选择适合你场景的方式,生产环境推荐使用虚拟用户方案。
