• [笔记]CentOS7 vsftpd安装及配置使用


    前言

    最近在调研ftp服务的登陆 所以有必要安装研究一下作为Linux端ftp的实现软件—— vsftpd

    以vsftpd 3.02版本为例

    一、安装配置

    1.1 卸载vsftpd

    先查找vsftpd是否安装

    [root@localhost ~]# rpm -aq vsftpd
    vsftpd-3.0.2-29.el7_9.x86_64
    
    • 1
    • 2

    有输出就代表已经安装了

    卸载之前先停止vsftpd

    systemctl stop vsftpd
    
    • 1

    再卸载

    rpm -e vsftpd
    
    • 1

    1.2 安装vsftpd

    yum install -y vsftpd
    
    • 1

    注意:如果提示"No package vsftpd available."

    执行如下

    wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/vsftpd-3.0.2-29.el7_9.x86_64.rpm
    rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
    
    • 1
    • 2

    1.3 安装ftp客户端

    vsftpd是服务端,ftp是客户端。
    要想访问我们的vsftpd服务就必须要先安装客户端。

    yum install ftp -y
    
    • 1

    如果提示“No package ftp available.”, 则执行以下操作

    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/ftp-0.17-67.el7.x86_64.rpm
    rpm -ivh ftp-0.17-67.el7.x86_64.rpm
    
    • 1
    • 2

    1.4 启动vsftpd

    systemctl start vsftpd
    
    • 1

    1.5 防火墙配置

    防火墙放行21端口

    firewall-cmd --zone=public --add-port=21/tcp --permanent
    
    • 1

    防火墙永久开放ftp服务,即类似windows 防火墙可让该应用 通行

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

    防火墙重新加载

    firewall-cmd --reload
    
    • 1

    1.6 Selinux配置

    CentOS的所有访问权限都是由SELinux来管理的,为了避免我们安装中由于权限关系而导致的失败,需要先将其关闭,以后根据需要再进行重新管理。

    查看selinux状态

    [root@localhost script]# sestatus 
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      31
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    临时关闭selinux

    # 临时关闭SE
    getenforce
    setenforce 0
    
    • 1
    • 2
    • 3

    永久关闭

    getsebool -a | grep ftp 
    setsebool -P ftpd_full_access on
    
    • 1
    • 2

    二、相关目录

    # vsftp配置文件
    /etc/vsftpd/vsftpd.conf
    
    # PAM认证文件
    /etc/pam.d/vsftpd
    
    # 匿名用户默认目录
    /var/ftp
    
    # 匿名用户的下载目录
    /var/ftp/pub
    
    # 不能访问 ftp server 的用户列表
    /etc/vsftpd/ftpusers
    
    # 允许访问 ftp server 的用户列表
    /etc/vsftpd/user_list
    
    # ftp 的上传下载日志
    /var/log/xferlog
    
    # ftp登陆日志目录 需要 vsftpd.conf conf dual_log_enable=YES
    /var/log/vsftpd.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    三、配置conf

    3.1 配置/etc/vsftpd/vsftpd.conf

    先备份一份

    cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
    
    • 1

    注意:添加配置项时结尾不要有空格 不然可能会启动不了服务

    3.2 vsftpd日志配置

    ftp服务器的日志设置,可以通过修改主配置文件/etc/vsftpd.conf实现。
    主配置文件中与日志设置有关的选项包括:

    • xferlog_enable
    • xferlog_file
    • dual_log_enable

    xferlog_enable

    如果启用该选项,系统将会维护记录服务器上传和下载情况的日志文件。默认情况下,该日志文件为 /var/log/vsftpd.log。但也可以通过配置文件中的 vsftpd_log_file 选项来指定其他文件。默认值为NO。

    xferlog_std_format

    如果启用该选项,传输日志文件将以标准 xferlog 的格式书写,该格式的日志文件默认为 /var/log/xferlog,也可以通过 xferlog_file 选项对其进行设定。默认值为NO。

    dual_log_enable

    如果启用该选项,将生成两个相似的日志文件,默认在 /var/log/xferlog/var/log/vsftpd.log 目录下。前者是 wu-ftpd 类型的传输日志,可以利用标准日志工具对其进行分析;后者是Vsftpd类型的日志。

    syslog_enable

    如果启用该选项,则原本应该输出到/var/log/vsftpd.log中的日志,将输出到系统日志中。

    四、使用

    4.0 ftp命令 基本使用

    vsftpd是服务端,ftp是客户端。
    要想使用ftp命令就必须要先安装ftp
    安装方法 参考本章 安装ftp客户端

    4.1 开启vsftpd登陆日志

    vsftp配置文件/etc/vsftpd/vsftpd.conf
    添加:

    dual_log_enable=YES
    
    • 1

    然后重启ftp服务即可

    systemctl restart vsftpd
    
    • 1

    4.2 使用Winscp Root账号登陆FTP

    1. 修改 vsftpd.conf 配置
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=077
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/xferlog
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    
    
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    anon_root=/var/ftp/
    dual_log_enable=YES
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. 修改 /etc/vsftpd/user_list 配置文件
      注释掉root
    2. 修改/etc/vsftpd/ftpusers配置文件
      注释掉root

    然后接下来你就可以使用root账号进行ftp登陆进行上传下载了

    4.3 匿名模式 访问ftp服务

    匿名模式是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。

    4.4 本地用户模式 访问ftp服务

    本地用户模式 是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

    4.5 虚拟用户模式

    参考

    虚拟用户模式是更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

    4.6 连接的主动模式和被动模式

    https://www.cnblogs.com/puloieswind/p/15727632.html

    1. 完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端口,21端口只是一个命令端口,其实另外还有一个数据端口,我想这就是有些朋友在内网架设FTP并且在网关上做了21端口的映射之后外网还是不能访问的原因吧,另外一个数据端口是多少呢?这又牵涉到另外一个问题。

    2. FTP具有两种模式,分别是port模式(也叫主动模式)pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西

    五、常见问题

    5.1 匿名访问ftp服务

    ftp://xx.xxx.xxx.xx 访问时超时或者无法访问

    5.2 使用Winscp Root角色登陆 提示 Permission denied.

    ftpusers文件

    查看root角色是否在 不能访问 ftp server 的用户列表/etc/vsftpd/ftpusers中,如果在删除

    user_list文件

    查看root角色是否在 允许访问 ftp server 的用户列表/etc/vsftpd/user_list中,如果不在就添加

    If userlist_deny=NO, only allow users in this file
    If userlist_deny=YES (default), never allow users in this file, and

    5.3 /var/log/vsftpd.log 不存在或者为空

    1.为空 可能是没有登陆行为
    2.vsftpd.conf 没有添加 dual_log_enable=YES 配置项

    5.4 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list

    参考
    /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
    找到以下三行,注释掉就行可以了

    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    
    • 1
    • 2
    • 3

    改为

    #chroot_local_user=YES
    #chroot_list_enable=YES
    #chroot_list_file=/etc/vsftpd/chroot_list
    
    • 1
    • 2
    • 3

    重启FTP

    systemctl restart vsftpd
    
    • 1

    Winscp登陆访问ftp时 提示“监测到超时! (数据连接) 无法获得目录列表 列出‘/‘的目录项时出错。”

    参考

    阿里云轻型应用服务器 公网连接vsftpd连接不上

    参考

    1. 检查一下阿里云服务器防火墙20-21端口是否开放
    2. 配置完如果发现没有生效 重启一下服务器 再试

    打开FTP 服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹 FTP

    解决方法1 地址栏\改为// 试试
    参考

    总结

    本节主要介绍了vsftp的安装和使用,有问题的可以评论留言


    参考:
    Linux使用笔记:配置FTP服务器(vsftp)
    VSFTP介绍安装使用
    centos7搭建vsftpd-配置文件全解
    阿里云的esc ftp搭建
    vsftpd日志配置
    《linux就该这么学》之 vsftpd

  • 相关阅读:
    数商云供应链管理系统助力化工行业企业实现客户订单管理可视化
    Android知识点整理
    【数据结构】详解二叉树之堆
    通讯网关软件008——利用CommGate X2Mysql实现OPC数据转储Mysql
    Swift中的协议
    数据情报分析EXCEL篇
    手把手教你搭建园林园艺小程序商城
    github push 失败 git did not exit cleanly(exit code 128) 账号登录失败 解决经验
    [2023年度回顾总结]凡是过往,皆为序章
    手写 Vue2 系列 之 初始渲染
  • 原文地址:https://blog.csdn.net/qq1113673178/article/details/127578304