在配置安装vsftpd过程中,我遇到了很多坑?查了上百篇博客,才把这些坑一一填满。这里记录是为了方便后来者查阅,我也是个小白。有问题请不要客气,直接喷就是了!

vsftpd 就是very secure FTP  的意思

快速版我会再写一篇博客。这里我们还是来讨论到底怎么才能弄清如何配置ftp?

首先配置ftp服务器中会遇到几个坑?

其实我们只需要清楚几个核心,就可以快速的配置出自己的ftp服务器了

第一个是ftp服务器本身

第二个是用户

第三个是linux主机

第四个是防火墙

第五个是selinux  selinux我这里环境禁用了。我们暂且不谈

那么说回第一个。ftp服务器本身。

如果需要安装ftp服务器。他的主要涉及文件就是

       /etc/vsftpd/vsftpd.conf

       /etc/pam.d/vsftpd

第一个是主要配置文件。我们的本地和匿名只要用到他就够了。

如果我们需要安装ftp服务器。我们需要先检查linux主机是否安装过ftp服务器

因此   我们使用rpm命令查找ftp

rpm -qa  | grep ftp

如果没有任何返回我们即可安装ftp了 使用yum -y install vsftpd 安装

成功安装以后。我们便可以编辑vsftpd.conf主配置文件了

vsftpd 允许三种不同的方式配置 分别是匿名  本地  虚拟账户

匿名的话是最简单的
     什么都不需要动。

      在改动配置文件,请先使用mv  cp 备份文件
     如果你使用vi 打开vsftpd.conf 感觉有点乱,

     使用grep "#"  -v  vsftpd.conf_bak  >vsftpd.conf 

     接下来就直接重启systemctl restart vsftpd 就可以了

不要使用fileZilla连接,filezilla作为小白来讲,filezilla加太多东西了
使用从cmd连接
  其中  ftp ipAdress
  cd changeDirectory  put上传  get  下载
  你在那个地方打开cmd,你的文件就下载在哪里,你的文件上传也是如此, 更直接可以使用绝对路径

  如果打不开,就是防火墙开了,或者selinx开启了

  基本上匿名是什么都不要改动,开箱即用

  如果返回错误需要检查防火墙是否开启。
   
  firewall-cmd --add-service=ftp --permanent //永久开放ftp服务

  你还可以尝试使用systemctl stop firewalld 
  
  关闭防火墙之后查看是否可以登录

   
  而本地用户的配置则只需要更改动配置即可

              anonymous_enable=NO
            local_enable=YES
            local_root=/var/ftp/pub
            write_enable=YES
            local_umask=022
            file_open_mode=0755
            chroot_local_user=YES
            pam_service_name=vsftpd
            userlist_enable=NO
            userlist_deny=NO

            chroot_local_user=YES
            allow_writeable_chroot=YES

            其中需要关注的配置项为local_root,local_root限制本地用户登录后的家目录

            此外pam_service_name,在本地用户中,会使用pam认证,因此需要保证你的pam文件是正确的

            如果出现
              530 login  inCorrect

            那么有可能就是pam文件不正确。
            当然也有可能是家目录的权限不正确

            可以使用tail -f /var/log/secure 查看错误的日志文件

            一般都可以查找出来

            其他的可以自行百度

对于虚拟用户的配置
       首先需要安装db文件,他的目的就是用来加密我们的虚拟账户中的账户和密码

       因此使用  yum install  db*

       之后新建我们虚拟账户文件  
         即:
          一行账户abc
          一行密码123456

          对虚拟账户文件进行加密即vuser.list
       使用db加密
         db_load -T -t hash -f vuser.list vuser.db

       此时完成加密,生成db文件

        对db文件进行保护,因此
         chmod 600 vuser.db
        
       这个时候我们新建ftp的系统账户,而并不是虚拟账户

       useradd -d /var/ftp/pub -s /sbin/nologin  tom

      -d 指定家目录 -s  限制此账户登录系统,仅用作ftp虚拟账户映射 

      此时对该家目录需要让其他用户可以访问
      chmod -RF  755 /var/ftp/pub

      使用passwd user  更改密码

      最后,虚拟账户也使用pam认证
      因此我们需要对pam进行修改
      备份之后,删除原内容后添加上以下两句
        auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于检查用户密码,数据库文件不要写后缀.db

        account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于检查用户是否在有效期内,数据库支持虚拟用户的PAM认证文件。

      这之后更改主配置文件即vsftpd.conf

            anonymous_enable=NO
            local_enable=YES
            write_enable=YES
            guest_enable=YES
            guest_username=tom
            pam_service_name=vsftpd
            user_config_dir=/etc/vsftpd/vuser_list
            pasv_enable=YES

    
            其中我么们需要关注的就是guest_username=tom 
            这个指定的账户表示的就是我们登录虚拟账户以后使用就是tom的家目录
            pam_service_name 表示的是pam认证的文件
            他位于/etc/pam.d/vsfptd下

            user_config_dir 这个就是我们虚拟用户的配置文件所在的文件夹
            这是一个存放我们虚拟用户配置文件的文件夹
         
         因此,我们如果要配置我们虚拟账户的权限还需要在这个文件夹中生成和虚拟账户同名的配置文件

         配置文件为:abc   文件位置为 /etc/vsftpd/vuser_list/abc

         其中配置项为:

                local_root=/var/ftp/pub //虚拟账号的家目录

                anonymous_enable=NO

                local_umask=022

                anon_upload_enable=YES //上传权限

                anon_mkdir_write_enable //创建文件和目录的权限

                anon_other_write_enable //删除文件和目录的权限

                anon_world_readable_only=YES //当文件的“其他人”有读权限的时候可以下载

                download_enable=YES //下载权限

                之后重启vsftpd,基本就可以实现了。
      参考文档:
       https://www.sohu.com/a/280848734_100155594        https://blog.51cto.com/yuanbin/108262