云计算百科
云计算领域专业知识百科平台

Linux中FTP配置与vsftpd服务部署指南

Linux中FTP配置与vsftpd服务部署指南

一、FTP 核心概念

1、基本定义
  • 文件传输协议(FTP),基于 C/S模式 工作。
  • 控制端口:21(身份验证与指令传输)
    数据端口:20(主动模式数据传输)
2、工作模式对比
  • 主动模式(standard):
    • 客户端从一个随机非特权端口N(>1024)连接到服务器的控制端口(21)
      • 其中Prot命令包含了客户端的IP地址和数据端口(N+1)
    • 服务器收到这条PORT命令,从它的数据端口(20)主动发起连接到客户端指定的IP地址和端口(N+1)
    • 需要服务端与客户端重新建立一个新的连接来传输数据
  • 被动模式(passive):
    • 客户端从一个随机非特权端口N(>1024)连接到服务器的控制端口(21)
      • 其中Pasv命令包含了客户端的数据端口(N+1)
    • 此时服务端会随机生成一个高端端口P(P>1024),并发送PORT命令给客户端(使用控制端口)
      • 其中Prot命令包含了服务端的IP地址和数据端口P
    • 客户端从数据端口N+1发起一个请求连接服务端数据端口P,这时产生了数据连接
    • 不需要服务端与客户端重新建立一个新的连接来传输数据
  • 模式连接发起方端口使用相同点
    主动模式 服务端 → 客户端 服务端数据端口20 → 客户端高端口N+1 服务端控制端口为21
    被动模式 客户端 → 服务端 客户端高端口N+1 → 服务端随机高端口p 服务端控制端口为21

    二、FTP服务器主配置文件参数

    参数默认值功能说明注意事项
    anonymous_enable NO 控制匿名用户访问权限 YES表示允许匿名访问FTP服务器
    local_enable YES 控制FTP用户是否可以访问FTP服务器 SELinux启用时需注意调整ftp_home_dir的bool值(RHEL7+ 无需配置)
    write_enable YES 控制FTP用户对FTP服务器的可写权限 必须启用后,其他写操作参数才生效
    local_umask 022 FTP用户创建目录或文件时的umask值 创建目录权限 755,文件权限 644
    anon_upload_enable 注释 控制匿名用户上传文件的权限 SELinux启用时需注意调整 ftpd_anon_write 和 ftpd_full_access 的bool值
    anon_mkdir_write_enable 注释 控制匿名用户创建目录的权限 需同时启用 write_enable=YES
    anon_other_write_enable 允许匿名用户重命名/删除文件 高风险操作,谨慎启用
    dirmessage_enable YES 显示说明性文件 用户进入目录时自动显示
    xferlog_enable YES 控制文件在传输过程中是否被日志记录 日志默认位置:/var/log/xferlog
    connect_from_port_20 YES 强制使用20端口进行数据传输 仅主动模式生效
    chown_uploads 注释 默认匿名用户上传文件的所有者为FTP 需配合 chown_username 使用
    chown_username 注释 匿名用户上传文件的所有者将变成该FTP用户 例:chown_username=whoever
    xferlog_file 注释 设置FTP服务日志文件位置 例:xferlog_file=/var/log/xferlog
    xferlog_std_format YES 设置标准的FTP Xferlog模式 兼容 wu-ftpd 日志格式
    idle_session_timeout 600 控制连接空闲超时(秒) 超时自动断开连接
    data_connection_timeout 120 数据传输连接空闲超时(秒) 超时自动断开数据连接
    nopriv_user 注释 指定非特权运行用户 例:nopriv_user=ftpsecure
    ftpd_banner 注释 成功连接FTP服务器时的提示语 例:ftpd_banner=Welcome to My FTP service
    deny_email_enable 注释 禁止下载文件到指定的邮箱地址中 需配合 banned_email_file 使用
    banned_email_file 注释 设置电子邮箱地址 例:banned_email_file=/etc/vsftpd/banned_emails
    chroot_local_user 注释 控制FTP用户能否离开自己的FTP主目录 YES表示禁止FTP用户离开自己的FTP主目录
    chroot_list_enable 注释 控制列表中的FTP用户能否离开自己的FTP主目录 需配合 chroot_list_file 使用
    chroot_list_file 注释 FTP用户列表文件,每一行一个用户名 默认:/etc/vsftpd/chroot_list
    ls_recurse_enable 注释 控制FTP用户是否能使用类似 ls -R命令 默认是禁止的,YES表示允许使用
    listen NO 控制是否侦听ipv4套接字 与 listen_ipv6 互斥
    listen_ipv6 YES 控制是否侦听ipv6套接字 启用时兼容 IPv4 连接
    pam_service_name vsftpd 设置PAM认证文件的名称 默认:/etc/pam.d/vsftpd
    userlist_enable YES 启用用户列表控制 需配合 /etc/vsftpd/user_list 文件
    tcp_wrappers YES 启用 TCP Wrappers 主机访问控制 通过 /etc/hosts.{allow,deny} 管理
    pasv_min_port 被动模式最小端口号 建议设置高端口范围(例:10000)
    pasv_max_port 被动模式最大端口号 需在防火墙放行该端口范围(例:11000)
    allow_writeable_chroot 允许 chroot 环境下的可写主目录 避免 500 错误(替代 chmod u-w /home/user)

    三、配置场景示例

    服务端下载:

    yum -y install vsftpd

    客户端下载:

    yum -y install lftp

    1、匿名用户
  • 设置允许匿名用户访问FTP服务器:

    vim /etc/vsftpd/vsftpd.conf
    pasv_enable=YES# 启用passive被动模式
    pasv_min_port=10000# 开启最低的pasv端口,建议采用大于1024的高端口
    pasv_max_port=11000# 开启最高的pasv端口

    systemctl restart vsftpd

    centos7默认允许,不用做修改;centos8修改如上

    在这里插入图片描述

  • 设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传:

    vim /etc/vsftpd/vsftpd.conf
    write_enable=YES
    anon_upload_enable=YES

    systemctl restart vsftpd

    setfacl -m u:ftp:rwx /var/ftp/pub

    在这里插入图片描述

  • 设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录:

    vim /etc/vsftpd/vsftpd.conf
    write_enable=YES
    anon_mkdir_write_enable=YES

    systemctl restart vsftpd

    setfacl -m u:ftp:rwx /var/ftp/pub

    在这里插入图片描述

  • 设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作:

    vim /etc/vsftpd/vsftpd.conf
    write_enable=YES
    anon_other_write_enable=YES

    systemctl restart vsftpd

    setfacl -m u:ftp:rwx /var/ftp/pub

    在这里插入图片描述

  • 2、FTP目录

    创建用户:

    useradd ftpuser1
    useradd ftpuser2
    useradd ftpuser3

    for i in ftpuser{1..3}
    >do echo 123321 | passwd –stdin $i
    >done

    在这里插入图片描述

  • 设置允许FTP用户访问FTP服务器:

  • local_enable=YES write_enable=YES 这两个值为默认设置

  • 通过FTP用户访问FTP服务器时,默认访问的主目录为FTP用户家目录

  • 此时FTP用户可以在自己的家目录下上传文件、下载文件、创建目录、重命名文件或者目录、删除文件或目录,同时FTP用户可以切换至其他目录中访问

  • vim /etc/vsftpd/vsftpd.conf
    local_enable=YES
    write_enable=YES

    systemctl restart vsftpd

    在这里插入图片描述

  • 设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,不允许FTP用户访问其他目录:

    vim /etc/vsftpd/vsftpd.conf
    chroot_local_user=YES

    systemctl restart vsftpd

    在这里插入图片描述

    发现提示登录失败

    这是因为如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!

    但是用户主目录此时任然具有写权限,所以提示该错误

    解决方法一:

    chmod u-w /home/ftpuser1

    使用命令 chmod u-w /home/ftpuser1 去除用户主目录的写权限

    可以解决问题,但不合理,不推荐使用

    在这里插入图片描述

    解决方法二:

    vim /etc/vsftpd/vsftpd.conf
    allow_writeable_chroot=YES

    systemctl restart vsftpd

    在这里插入图片描述

  • 设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录:

    vim /etc/vsftpd/vsftpd.conf
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

    vim /home/ftpuser1chroot_list
    ftpuser1

    systemctl restart vsftpd

    在这里插入图片描述

    • 当 chroot_local_enable=NO 时
      • chroot_list_enable=YES 代表只限制 /etc/vsftpd/chroot_list 文件中定义的FTP用户,其他的ftp用户不受限
      • chroot_list_enable=NO 所有的FTP用户均不受限
  • 设置FTP用户访问FTP服务器时,部分FTP用户可以访问其他目录,其他FTP用户访问的目录仍然限制在自己的家目录中:

    vim /etc/vsftpd/vsftpd.conf
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

    vim /home/ftpuser1chroot_list
    ftpuser1

    systemctl restart vsftpd

    在这里插入图片描述

    • 当 chroot_local_enable=YES 时
      • chroot_list_enable=YES 代表 /etc/vsftpd/chroot_list 文件中定义的FTP用户不受限,其他的ftp用户受限
      • chroot_list_enable=NO 代表所有的FTP用户受限
  • 仅允许:

    vim /etc/vsftpd/vsftpd.conf
    userlist_deny=NO

    vim /etc/vsftpd/user_list
    ftpuser1

    systemctl restart vsftpd

    在这里插入图片描述

    /etc/vsftpd/ftpusers 和/etc/vsftpd/user_list 文件默认禁用这些用户访问ftp服务器

    将 userlist_deny=NO 写入 /etc/vsftpd/vsftpd.conf后

    • /etc/vsftpd/ftpusers 为黑名单
    • /etc/vsftpd/user_list 为白名单
    • 两者名单列表冲突时,拒绝优先
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux中FTP配置与vsftpd服务部署指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!