FTP服务

柳三千

文章最后更新时间: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相关用户

  • 匿名用户anonymousftp,安全性低,建议禁止匿名登录。
  • 本地用户:使用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

配置步骤

  1. 添加虚拟用户口令文件

  2. 生成认证数据库

    yum install db4-utils -y
    db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
    
  3. 编辑PAM认证文件

    注释原行后添加:

    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
    
  4. 建立本地映射用户与目录

    useradd -d /home/vsftproot -s /sbin/nologin vuser
    chmod 755 /home/vsftproot/
    
  5. 修改配置文件

    guest_enable=YES          # 开启虚拟用户
    guest_username=vuser      # 虚拟用户对应的系统用户
    pam_service_name=vsftpd   # PAM认证文件
    
  6. 重启服务

    systemctl restart vsftpd
    
  7. 调整上传权限

    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
  8. 自定义用户目录与配置

    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. 访问权限错误

现象:打开文件夹时提示权限错误。
解决

  1. 关闭所有IE浏览器。
  2. 进入“工具”→“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>
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码