当前位置:首页>Linux>Linux FTP 服务器搭建:匿名、本地、虚拟用户三种模式全攻略

Linux FTP 服务器搭建:匿名、本地、虚拟用户三种模式全攻略

  • 2026-10-11 07:03:22
Linux FTP 服务器搭建:匿名、本地、虚拟用户三种模式全攻略

一、FTP 工作原理

FTP 采用 客户端/服务器 架构,使用两个通道:

控制连接:端口 21,用于传输命令和响应

数据连接:端口 20(主动模式),用于传输文件数据

两种工作模式:

模式
发起方
数据端口
适用场景
主动模式(Active)
服务器→客户端
20
客户端无防火墙
被动模式(Passive)
客户端→服务器
>1024 随机
客户端有防火墙

匿名用户:使用公用账号 anonymous(密码随意)即可登录下载,适合公开软件分发。

二、安装 vsftpd 并启动

安装命令

# 检测 + 挂载光盘 + 清除缓存 + 安装rpm -q vsftpdmount /dev/cdrom /mediadnf clean alldnf install vsftpd -ydnf install ftp -y  同时装客户端工具

启动与防火墙/SELinux(一次搞定)

systemctl restart vsftpd

systemctl enable vsftpd

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

firewall-cmd --reload

setsebool -P ftpd_full_access=on  永久允许FTP访问

三、vsftpd 配置文件体系

文件
作用
/etc/vsftpd/vsftpd.conf
主配置文件
/etc/vsftpd/ftpusers
禁止访问的黑名单(root等系统账号)
/etc/vsftpd/user_list
可设黑/白名单(由 userlist_deny 决定)
/etc/pam.d/vsftpd
PAM 认证模块配置
/var/ftp
FTP 数据目录(含 pub 子目录)

user_list 的两种模式:

userlist_deny=YES(默认)→ 拒绝列表内用户

userlist_deny=NO → 仅允许列表内用户

核心参数速查:

参数
作用
anonymous_enable
是否允许匿名访问
local_enable
是否允许本地用户登录
write_enable
是否允许写入
local_umask
本地用户上传文件的 umask(默认022)
chroot_local_user
是否禁锢用户在其主目录
anon_upload_enable
允许匿名用户上传
anon_mkdir_write_enable
允许匿名用户创建目录
local_max_rate
本地用户最大传输速率(字节/秒)
max_clients
最大客户端连接数(0=不限制)
max_per_ip
同一 IP 最大连接数

过滤注释查看精简配置:grep -v "#" /etc/vsftpd/vsftpd.conf

四、三种认证模式

模式
安全性
适用场景
匿名开放
低
公开软件下载
本地用户
中
内部员工文件交换
虚拟用户
高
对外提供服务(推荐)

五、匿名用户 FTP 配置

允许任何人无需密码登录,常用于公开下载。根目录默认 /var/ftp。

关键配置(vsftpd.conf):

anonymous_enable=YES

anon_upload_enable=YES  允许上传

anon_mkdir_write_enable=YES  允许创建目录

anon_other_write_enable=YES  允许重命名/删除

anon_root=/var/ftp  设置根目录

常见错误:匿名用户无法上传

原因:本地文件系统权限不足。需要将 pub 目录属主改为 ftp 或赋予其他用户写权限:

chown ftp /var/ftp/pub

六、本地用户模式 + chroot 锁定

本地用户用系统账号登录,配合 chroot 可将用户锁定在指定目录,提高安全性。

案例:team1/team2 只能访问 /web/www/html:

# 1. 创建账号useradd team1 && passwd team1

# 2. vsftpd.conf 配置:

anonymous_enable=NO

local_enable=YES

local_root=/web/www/html

chroot_local_user=NO  列表外用户不受限

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

allow_writeable_chroot=YES  必须加!否则连接报错

# 3. chroot_list 写入受限用户:

team1

team2

# 4. 本地权限chmod -R o+w /web/www/html

chroot 两种策略:chroot_local_user=YES 时列表内用户不受限(自由),chroot_local_user=NO 时列表内用户受限(锁定)。

七、虚拟用户模式(最安全)

虚拟账号不在系统中真实存在,通过数据库文件 + PAM 模块映射到系统账号,安全性最高。

配置五步走:

第1步:创建用户文本文件(一行账号一行密码)

/vftp/vuser.txt:

user2

123456

user3

123456

第2步:生成数据库 + 改权限

db_load -T -t hash -f /vftp/vuser.txt /vftp/vuser.db

chmod 700 /vftp/vuser.db

第3步:配置 PAM(/etc/pam.d/vsftpd,保留以下两行):

auth   required   pam_userdb.so   db=/vftp/vuser

account   required   pam_userdb.so   db=/vftp/vuser

第4步:创建映射系统用户

useradd -d /var/ftp/vuser vuser

chown vuser.vuser /var/ftp/vuser

第5步:vsftpd.conf 关键配置

anonymous_enable=NO

local_enable=YES

guest_enable=YES  开启虚拟用户

guest_username=vuser  映射到系统账号

chroot_local_user=YES

allow_writeable_chroot=YES

pam_service_name=vsftpd

八、主动 / 被动模式配置

主动模式

Port_enable=YES

Connect_from_port_20=YES

被动模式

connect_from_port_20=NO

PASV_enable=YES

PASV_min_port=30000

PASV_max_port=31000

总结

vsftpd 配置要点:匿名模式注意文件系统权限(chown ftp);本地模式配合 chroot 锁定目录;虚拟模式最安全,五步搞定(文本→数据库→PAM→系统用户→guest配置)。别忘了 SELinux(setsebool -P ftpd_full_access=on)和防火墙(add-service=ftp)!

--- END ---

最新文章

随机文章