文章最后更新时间:2025年06月12日
FTP简介与原理
FTP(File Transfer Protocol)中文称为“文件传输协议”。
- 主动模式:服务端从20端口向客户端发起连接。
- 被动模式:服务端在指定范围内某个端口被动等待客户端连接。
FTP端口
- 控制连接:TCP21,用于发送FTP命令信息。
- 数据连接:TCP20,用于上传、下载的数据。
FTP相关文件
- 主配置文件:
/etc/vsftpd/vsftpd.conf
- 用户控制列表文件:
- 黑名单:
/etc/vsftpd/ftpusers
- 可配置为黑名单或白名单:
/etc/vsftpd/user_list
- 黑名单:
FTP相关用户
- 匿名用户:
anonymous
或ftp
,安全性低,建议禁止匿名登录。 - 本地用户:使用Linux系统用户和密码,因FTP明文传输,存在密码泄露风险。
- 虚拟用户:管理员自定义的模拟用户,建议使用。
配置文件详解
默认配置文件
anonymous_enable=YES # 允许匿名用户登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许本地用户上传
local_umask=022 # 本地用户上传umask值
dirmessage_enable=YES # 用户进入目录时,显示.message文件信息
message_file=.message # 指定信息文件
xferlog_enable=YES # 激活记录日志
connect_from_port_20=YES # 主动模式数据传输接口
xferlog_std_format=YES # 使用标准的FTP日志格式
ftpd_banner # 登录欢迎信息
listen=YES # 允许被监听
pam_service_name=vsftpd # 设置PAM认证服务配置文件名
userlist_enable=YES # 用户登录限制
tcp_wrappers=YES # 是否使用tcp_wrappers作为主机访问控制方式
常用全局配置
listen_address=0.0.0.0 # 设置监听的IP地址
listen_port=21 # 设置监听FTP服务端口号
download_enable=YES # 是否允许下载文件
max_clients=0 # 限制并发连接数
max_per_ip=0 # 限制同一IP地址的并发连接数
被动模式配置
pasv_enable=YES # 开启被动模式
pasv_min_port=24500 # 被动模式最小端口
pasv_max_port=24600 # 被动模式最大端口
常用安全配置
accept_timeout=60 # 被动模式连接超时时间
connect_timeout=60 # 主动模式连接超时时间
idle_session_timeout=600 # 600秒无操作则断开连接
data_connection_timeout=500 # 资料传输超时时间
Windows客户端访问方式
1. DOS窗口访问(仅支持文件上传下载,不支持目录)
使用put
上传MP4文件,get
下载文件。
2. Windows对话框访问(支持目录下载)
匿名用户访问配置
anon_upload_enable=YES # 允许匿名用户上传
anon_mkdir_write_enable=YES # 允许匿名用户新建目录
anonymous_enable=YES # 允许匿名用户访问
anon_umask=022 # 设置umask值(默认600)
注意事项:
- 默认上传目录:
/var/ftp/pub
- 需同时满足服务权限和系统目录权限
- Vsftp服务伪用户为
ftp
本地用户访问
特点与风险
支持文件上传下载,但用户可切换至根目录,存在拷贝系统文件风险(如passwd
)。
配置文件(限制用户主目录)
anonymous_enable=NO
local_enable=YES
local_umask=022
chroot_local_user=YES # 开启用户目录限制,将用户禁锢在主目录
常见报错与修复
报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
原因:用户主目录有写权限(vsftpd 2.3.5后增强安全检查)。
修复:
- 去除用户家目录写权限:
chmod a-w /home/user
- 或在配置文件中添加:
访问控制:allow_writeable_chroot=YES local_root=/var/ftp/pub # 设置本地用户FTP根目录(注意目录权限) local_max_rate=0 # 限制传输速率(字节/秒)
默认开启配置
chroot_local_user=YES # 把用户禁锢在主目录中
userlist_enabled=YES # 用户访问控制
注意:以下配置默认开启,无需重复设置:
userlist_enable=YES # 开启用户访问控制
userlist_deny=YES
Userlist_file=/etc/vsftpd/user_list # 此文件内用户不能访问FTP服务器
虚拟用户访问
环境配置(注释以下内容)
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#userlist_deny=YES
配置步骤
添加虚拟用户口令文件
生成认证数据库
yum install db4-utils -y db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
编辑PAM认证文件
注释原行后添加:auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
建立本地映射用户与目录
useradd -d /home/vsftproot -s /sbin/nologin vuser chmod 755 /home/vsftproot/
修改配置文件
guest_enable=YES # 开启虚拟用户 guest_username=vuser # 虚拟用户对应的系统用户 pam_service_name=vsftpd # PAM认证文件
重启服务
systemctl restart vsftpd
调整上传权限
anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
自定义用户目录与配置
user_config_dir=/etc/vsftpd/vuser_dir mkdir /etc/vsftpd/vuser_dir # 为用户创建独立配置文件(例) local_root=/tmp/cang # 指定独立上传目录 chown vuser:vuser /tmp/cang/
被动模式验证
配置端口范围后,可通过客户端连接验证端口是否在指定范围内:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
最终配置文件示例
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
local_max_rate=0
allow_writeable_chroot=YES
guest_username=vuser
guest_enable=YES
listen=NO
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
listen_ipv6=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
user_config_dir=/etc/vsftpd/vuser_dir
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
异常处理
1. 访问权限错误
现象:打开文件夹时提示权限错误。
解决:
- 关闭所有IE浏览器。
- 进入“工具”→“Internet选项”→“高级”,取消勾选“使用被动FTP”。
2. 目录切换报错
现象:500 OOPS: cannot change directory:/home/nginx
原因:映射用户(如nginx
)无家目录。
解决:手动创建用户家目录。
C:\Users\Administrator>ftp 159.75.255.125
连接到 159.75.255.125。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(159.75.255.125:(none)): www_ftp
331 Please specify the password.
密码:
230 Login successful.
ftp>
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。