CentOS 7 搭建vsftp server

CentOS 7 搭建vsftp server

一、 Vsftp服务器简介

  • 非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中 主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用 (1000用户)等。
  • Vsftpd基于GPL开源协议发布,在中小企业中得到广泛的应用,Vsftpd可以快速上手,基于Vsftpd 虚拟用户方式,访问验证更加安全。Vsftpd还可以基于MYSQL数据库做安全验证,多重安全防 护。

二、Vsftp的登陆类型

VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系 统用户,访问时的文件目录是为此系统用户的家目录;匿名用户也是虚拟用户,映射的系统用户为ftp, 详细信息可以通过man vsftpd.conf查看

三、Vsftp安装配置

  1. 环境需求

    • 服务端系统:CentOS 7.8.2003 ; 软件:vsftpd
    • 客户系统:windows 10 ;软件:File Zilla
  2. 安装epel 源

    [root@vsftp ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  3. 安装vsftpd及相关依赖

    [root@vsftp ~]# yum -y install vsftpd* pam*  db4*
    
    • vsftpd:ftp软件
    • pam:认证模块
    • DB4:支持文件数据库
  4. vsftp配置文件说明

    配置文件 作用
    /etc/vsftpd/vsftpd.conf vsftpd的核心配置文件
    /etc/vsftpd/ftpusers 用于指定哪些用户不能访问FTP服务器
    /etc/vsftpd/user_list 指定允许使用vsftpd的用户列表文件
    /etc/vsftpd/vsftpd_conf_migrate.sh 是vsftpd操作的一些变量和设置脚本
    /var/ftp/ 默认情况下匿名用户的根目录
  5. vsftpd配置详解

    属性 属性值 含义
    anonymous_enable YES/NO 是否允许匿名用户(anonymous)登录 FTP,如果 该设置被注释,则默认允许
    local_enable YES/NO 是否允许本地系统用户登录
    write_enable YES/NO 是否开启任何形式的 FTP 写入命令,上传文件
    local_umask xxx 本地用户的 umask 设置,如果注释该设置则默认为 077,但一般都设置成 022
    anon_upload_enable YES/NO 是否允许匿名用户上传文件,如果要设置为允许,则 需要先开启 write_enable,否则无效,此外对应目录 还要具有写权限
    anon_mkdir_write_enable YES/NO 是否允许匿名用户创建新目录
    dirmessage_enable YES/NO 当进入某个目录时,发送信息提示给远程用户
    xferlog_enable YES/NO 是否开启 上传/下载 的日志记录
    connect_from_port_20 YES/NO 是否使用 20 端口来连接 FTP
    chown_uploads YES/NO 匿名上传的文件是否由某一指定用户 chown_username 所有
    chown_username 有效用户名 匿名上传的文件由该设定用户所有
    xferlog_file 有效路径 设置日志文件的保存位置,默认为 /var/log/xferlog
    xferlog_std_format YES/NO 是否使用标准的 ftpd xferlog日志格式,该格式日志 默认保存在 /var/log/xferlog
    idle_session_timeout 数值 设置空闲连接的超时时间,单位 秒
    data_connection_timeout 数值 设置等待数据传输的大时间,单位 秒 (data_connection_timeout 与 idle_session_timeout 在同一时间只有一个有效)
    nopriv_user 有效用户名 指定一个非特权用户,用于运行vsftpd
    async_abor_enable YES/NO 是否支持异步 ABOR 请求
    ascii_upload_enable YES/NO 是否开启 ASCII 模式进行文件上传,一般不开启
    ascii_download_enable YES/NO 是否开启 ASCII 模式进行文件下载,一般不开启
    ftpd_banner ... 自定义登录标语
    deny_email_enable YES/NO 如果匿名登录,则会要求输入 email 地址,如果不希 望一些 email 地址具有登录权限,则可以开启此项, 并在 banned_email_file 指定的文件中写入对应的 email 地址
    banned_email_file 有效文件 当开启 deny_email_enable 时,需要通过此项指定 一个保存登录无效 email 的文件
    chroot_local_user YES/NO 是否将所有用户限制在主目录,当为 NO 时, FTP 用 户可以切换到其他目录
    chroot_list_enable YES/NO 是否启用限制用户的名单列表
    chroot_list_file 有效文 件 用户列表,其作用与 chroot_local_user 和 chroot_local_user 的组合有关,详见下表
    allow_writeable_chroot YES/NO 是否允许用户对 ftp 根目录具有写权限,如果设置成 不允许而目录实际上却具备写权限,则会报错
    ls_recurse_enable YES/NO 是否允许 ls -R 指令来递归查询,递归查询比较耗资 源
    listen YES/NO 如果为 YES,vsftpd 将以独立模式运行并监听 IPv4 的套接字,处理相关连接请求(该指令不能与 listen_ipv6 一起使用)
    listen_ipv6 YES/NO 是否允许监听 IPv6 套接字
    pam_service_name ... 设置 PAM 外挂模块提供的认证服务所使用的配置文 件名 ,即 /etc/pam.d/vsftpd 文件,此文件中 file=/etc/vsftpd/ftpusers 字段,说明了 PAM 模块能 抵挡的帐号内容来自文件 /etc/vsftpd/ftpusers 中
    userlist_enable YES/NO 是否启用 user_list 文件来控制用户登录
    userlist_deny YES/NO 是否拒绝 user_list 中的用户登录,此属性设置需在 userlist_enable = YES 时才有效
    tcp_wrappers YES/NO 是否使用 tcp_wrappers 作为主机访问控制方式
    max_clients 数值 同一时间允许的大连接数
    max_per_ip 有效目录 同一个IP客户端连接的大值
    local_root 有效目录 系统用户登陆后的根目录
    anon_root 有效目录 匿名用户登录后的根目录
    user_config_dir 有效目录 用户单独配置文件存放目录,该目录下用户的文件名 就是对应用户名
  6. vsftpd 修改配置前备份配置文件

    [root@vsftp ~]# cd /etc/vsftpd/
    [root@vsftp vsftpd]# ls
    ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
    [root@vsftp vsftpd]# cp vsftpd.conf{,.bak}
    [root@vsftp vsftpd]# ls
    ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
    
  7. vsftpd配置匿名用户

    1. 编辑配置文件

      [root@vsftp vsftpd]# cat vsftpd.conf
      write_enable=YES
      anon_umask=022
      anonymous_enable=YES
      anon_upload_enable=YES
      anon_mkdir_write_enable=YES
      anon_other_write_enable=YES
      dirmessage_enable=YES
      xferlog_enable=YES
      connect_from_port_20=YES
      xferlog_std_format=YES
      listen=YES
      pam_service_name=vsftpd
      userlist_enable=YES
      tcp_wrappers=YES
      
      
      vim下删除全部内容:ggdG,gg定位到首行

      注意:命令每行不能有空格,通过set list可以查看

    2. 常用的匿名FTP配置项

      anonymous_enable=YES                                # 是否允许匿名用户访问
      anon_umask=022                                      # 匿名用户所上传文件的权限掩码
      anon_root=/var/ftp                                  # 设置匿名用户的FTP根目录
      anon_upload_enable=YES                              # 是否允许匿名用户上传文件 anon_mkdir_write_enable=YES                         # 是否允许匿名用户允许创建目录 anon_other_write_enable=YES                         # 是否允许匿名用户有其他写入权 (改名,删除,覆盖) anon_max_rate=0                                     # 限制最大传输速率(字节/秒)0为 无限
      
    3. 开启vsftp服务

      [root@vsftp vsftpd]# systemctl start vsftpd.service
      [root@vsftp vsftpd]# netstat -lnpt | grep vsftpd
      tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      178636/vsftpd  
      
    4. 客户端登陆验证,登陆成功

      image-20201030091717278
    5. 修改权限实现上传

      [root@vsftp vsftpd]# cd /var/ftp/
      [root@vsftp ftp]# ls
      pub
      [root@vsftp ftp]# chown -R ftp.ftp pub/
      [root@vsftp ftp]# ll
      总用量 0
      drwxr-xr-x 2 ftp ftp 6 4月   1 2020 pub
      
      • 重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用 户的身份访问的,而pub默认的属主属组是root。
      • 注意:
        • 修改完配置之后需要重启完服务才能生效
        • 还需要重新从客户端登陆,否则修改后的配置看不到效果。
  8. vsftp配置本地(系统)用户

    1. 创建测试用户

      • 创建zhangsan、lisi 密码都设置为“123456”

        [root@vsftp ftp]# useradd zhangsan
        [root@vsftp ftp]# useradd lisi
        [root@vsftp ftp]# echo "123456" | passwd --stdin zhangsan
        更改用户 zhangsan 的密码 。
        passwd:所有的身份验证令牌已经成功更新。
        [root@vsftp ftp]# echo "123456" | passwd --stdin lisi
        更改用户 lisi 的密码 。
        passwd:所有的身份验证令牌已经成功更新。
        
    2. 修改配置文件

      [root@vsftp ftp]# cat /etc/vsftpd/vsftpd.conf
      local_enable=YES
      local_umask=077
      chroot_local_user=YES
      allow_writeable_chroot=YES
      write_enable=YES
      dirmessage_enable=YES
      xferlog_enable=YES
      connect_from_port_20=YES
      xferlog_std_format=YES
      listen=YES
      pam_service_name=vsftpd
      userlist_enable=YES
      userlist_deny=NO
      tcp_wrappers=YES
      
      
    3. 常用的本地用户FTP配置项

      local_enable=YES                                    # 是否允许本地系统用户访问
      local_umask=022                                     # 本地用户所上传文件的权限掩码
      local_root=/var/ftp                                 # 设置本地用户的FTP根目录
      chroot_list_enable=YES                              # 表示是否开启chroot的环境,默认 没有开启 chroot_list_file=/etc/vsftpd/chroot_list            # 表示写 在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。
      Chroot_local_user=YES                               # 表示所有写 在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。
      local_max_rate=0                                    # 限制最大传输速率(字节/秒)0为 无限制
      
    4. 添加用户到白名单

      [root@vsftp ftp]# vim /etc/vsftpd/user_list
      zhangsan lisi
      
    5. 重启服务

      [root@vsftp ftp]# systemctl restart vsftpd
      
    6. 登陆测试,登陆成功

      image-20201030093354429
    7. 添加并进行测试

      image-20201030093638529
  9. vstp配置虚拟用户

    1. 建立虚拟FTP用户的账号

      [root@vsftp /]# useradd -s /sbin/nologin vu
      
    2. 创建虚拟用户文件

      [root@vsftp /]# cd /etc/vsftpd/
      [root@vsftp vsftpd]# vim user 
      wangwu
      12345
      maliu
      12345 
      
      • 奇数行代表用户名,偶数行代表密码
    3. 创建数据文件

      • 通过 db_load 工具创建出 Berkeley DB 格式的数据库文件

        [root@vsftp vsftpd]# db_load -T -t hash -f user user.db
        [root@vsftp vsftpd]# ls
        ftpusers  user  user.db  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
        
        • -f 指定数据原文件
        • -T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
        • -t hash 读取文件的基本方法
    4. 建立支持虚拟用户的PAM认证文件

      [root@vsftp vsftpd]# vim /etc/pam.d/vsftpd.vu
      auth    required    /lib64/security/pam_userdb.so db=/etc/vsftpd/user
      account    required    /lib64/security/pam_userdb.so db=/etc/vsftpd/user
      
      • 对应刚才生成 user.db 的文件
    5. 修改配置文件

      write_enable=YES
      dirmessage_enable=YES
      xferlog_enable=YES
      connect_from_port_20=YES
      xferlog_std_format=YES
      listen=YES
      userlist_enable=YES
      tcp_wrappers=YES
      allow_writeable_chroot=YES
      guest_enable=YES
      guest_username=vu
      pam_service_name=vsftpd.vu
      local_enable=YES
      local_umask=077
      chroot_local_user=YES
      virtual_use_local_privs=YES
      user_config_dir=/etc/vsftpd/user_dir
      
    6. 常用的全局配置项

      listen=YES                                          # 是否以独立运行的方式监听服务
      listen_address=192.168.4.1                          # 设置监听FTP服务的IP地址
      listen_port=21                                      # 设置监听FTP服务的端口号
      write_enable=YES                                    # 是否启用写入权限(上传,删除文 件)
      download_enable=YES                                # 是否允许下载文件
      dirmessage_enable=YES                               # 用户切换进入目录时显 示.message文件 xferlog_enable=YES                                  # 启用日志文件,记录 到/var/log/xferlog xferlog_std_format=YES                              # 启用标准的xferlog日志格式,禁 用此项将使用vsftpd自己的格式
      connect_from_port_20=YES                            # 允许服务器主动模式(从20端口建 立数据连接) pasv_enable=YES                                     # 允许服务器被动模式
      pasv_max_port=24600                                 # 设置被动模式服务器的最大端口号
      pasv_min_port=24500                                 # 设置被动模式服务器的最小端口号 pam_service_name=vsftpd                             # 用户认证的PAM文件位置 (/etc/pam.d/vsftpd.vu) userlist_enable=YES                                 # 是否启用user_list列表文件
      userlist_deny=YES                                   # 是否禁用user_list中的用户
      max_clients=0                                       # 限制并发客户端连接数
      max_per_ip=0                                        # 限制同一IP地址的并发连接数
      tcp_wrappers=YES                                    # 是否启用tcp_wrappers主机访问 控制 chown_username=root                                 # 表示匿名用户上传的文件的拥有人 是root,默认关闭 ascii_upload_enable=YES                             # 表示是否允许用户可以上传一个二 进制文件,默认是不允许的 ascii_download_enable=YES                           # 这个是代表是否允许用户可以下载 一个二进制文件,默认是不允许的
      nopriv_user=vsftpd                                  # 设置支撑Vsftpd服务的宿主用户为 手动建立的Vsftpd用户 async_abor_enable=YES                               # 设定支持异步传输功能
      ftpd_banner=Welcome to Awei FTP servers             # 设定Vsftpd的登陆标语
      guest_enable=YES                             # 设置启用虚拟用户功能
      guest_username=ftpuser                        # 指定虚拟用户的宿主用户
      virtual_use_local_privs=YES                     # 设定虚拟用户的权限符合他们的宿 主用户 user_config_dir=/etc/vsftpd/vconf                # 设定虚拟用户个人Vsftp的配置文 件存放路径
      
    7. 为用户建立独立的配置目录及文件

      [root@vsftp vsftpd]# mkdir /etc/vsftpd/user_dir
      [root@vsftp vsftpd]# ls
      ftpusers user user.db user_dir user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh [root@vsftp vsftpd]# cd /etc/vsftpd/user_dir
      [[root@vsftp user_dir]# vim wangwu
      local_root=/etc/vsftpd/data            # 虚拟用户数据的存放路径
      
    8. 创建虚拟用户数据存放目录

      [root@vsftp user_dir]# cd ..
      [root@vsftp vsftpd]# mkdir data
      [root@vsftp vsftpd]# chmod 777 data/
      
    9. 登陆成功

      image-20201030100214687
    10. 添加文件进行测试

      [root@vsftp vsftpd]# cd data/
      [root@vsftp data]# touch wangwu.txt
      
      image-20201030100300424

      重点:本地用户和虚拟用户不能同时登录、因为认证方式只有一种
      本地是 pam_service_name =vsftpd
      虚拟是 pam_service_name =vsftpd.vu

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容