zoukankan      html  css  js  c++  java
  • Linux环境下安装配置vsftpd服务(三种认证模式)

        

    一、FTP简介

    文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它工作于网络传输协议的应用层,使用客户/服务器模式,主要是用来在服务器与客户端之间进行数据传输。FTP 其实是以 TCP 封包的模式进行服务器与客户端计算机之间的联机,当联机建立后,使用者可以在客户端端连上 FTP 服务器来进行文件的下载与上传,此外,也可以对 FTP 服务器上面的文档进行管理等。

    FTP传输模式
    文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。
    FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式(默认的工作模式)。主被动模式均是以FTP服务器端为参照。

    FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。

        

    FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

        

    在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。

    环境准备

    属性 FTP服务端 FTP客户端
    节点 wencheng-1 windows10
    系统 CentOS Linux release 7.5.1804 (Minimal) windows10 企业版
    内核 3.10.0-862.el7.x86_64 windows10 企业版2019 x64
    IP地址 172.16.70.185 172.16.70.50
    SELinux setenforce 0 | disabled  

    FTP服务端操作步骤

    • 1.服务端安装vsftpd服务。
    [root@wencheng-1 ~]# yum install -y vsftpd
    [root@wencheng-1 ~]# rpm -qa | grep vsftpd
    vsftpd-3.0.2-28.el7.x86_64
    
    [root@wencheng-1 ~]# rpm -ql vsftpd 
    /etc/pam.d/vsftpd    # vsftpd 使用PAM模块时的配置文件,主要做认证功能
    /etc/vsftpd/ftpusers    # 用户登录黑名单,拒绝ftpusers列表内的用户登录vsftpd,一行一个账号
    /etc/vsftpd/user_list    # 默认为用户登录黑名单,拒绝user_list列表内的用户登录vsftpd,一行一个账号,这个
    配置是否能够生效与 vsftpd.conf 内的参数 userlist_enable, userlist_deny 有关
    /etc/vsftpd/vsftpd.conf    # vsftpd 服务器的主配置文件,配置格式使用 [参数=设定值] 来设定,注意,等号两边不能有空白
    /etc/vsftpd/vsftpd_conf_migrate.sh    # 迁移脚本
    /usr/sbin/vsftpd    # vsftpd命令执行脚本文件
    /var/ftp    # 匿名用户访问根目录
    
    [root@wencheng-1 ~]# systemctl start vsftpd
    [root@wencheng-1 ~]# ps -ef | grep vsftpd
    root      10988      1  0 16:20 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    root      10990   1583  0 16:21 pts/1    00:00:00 grep --color=auto vsftpd
    
    [root@wencheng-1 ~]# ps -ef | grep vsftpd
    root      10988      1  0 16:20 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    root      10992   1583  0 16:21 pts/1    00:00:00 grep --color=auto vsftpd
    
    [root@wencheng-1 ~]# systemctl enable vsftpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
    

     注意:从现在开始,凡是涉及到服务的配置,就要考虑防火墙和SELinux的因素,很多教程和书籍上都是直接关闭防火墙和selinux,虽然这样在学习阶段可以避免干扰,但是这样非常不安全。另外凡是配置了服务,都要加入开机启动中,让其每次重启自动生效。

    •  2.服务端修改配置文件/etc/vsftpd/vsftpd.conf
    [root@wencheng-1 ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
    [root@wencheng-1 ~]# grep -Ev "^$|#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
    
    [root@wencheng-1 ~]# cat /etc/vsftpd/vsftpd.conf    # 默认配置文件详解
    # 默认匿名用户配置
    anonymous_enable=YES           # 开启匿名用户访问;
    
    # 默认本地用户配置
    local_enable=YES               # 启用本地系统用户访问;
    local_umask=022                # 本地用户创建文件及目录默认权限掩码;
    
    # 默认全局配置
    write_enable=YES               # 本地系统用户写入权限;
    dirmessage_enable=YES          # 打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
    xferlog_enable=YES             # 启用上传/下载日志记录; 
    connect_from_port_20=YES       # FTP使用20端口进行数据传输;
    xferlog_std_format=YES         # 日志文件将根据xferlog的标准格式写入;
    listen=NO                      # Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
    listen_ipv6=YES                # 启用IPV6监听;
    pam_service_name=vsftpd        # 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
    userlist_enable=YES            # Vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
    tcp_wrappers=YES               # 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,
                       来决定请求连接的主机,是否允许访问该FTP服务器。
    
    • 3.vsftpd三种认证模式

      vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上:匿名开放模式、本地用户模式、虚拟用户模式。实际生产环境中虚拟用户模式用的较多。

      首先要在防火墙添加ftp,20,21端口。

    # firewalld 添加ftp,20,21端口
    [root@wencheng-1 ~]# firewall-cmd --zone=public --add-service=ftp --permanent
    success
    [root@wencheng-1 ~]# firewall-cmd --zone=public --add-port=20/tcp --permanent
    success
    [root@wencheng-1 ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent
    success
    
    [root@wencheng-1 ~]# firewall-cmd --zone=public --list-ports    # 查看firewalld开放的端口
    20/tcp 21/tcp
    [root@wencheng-1 ~]# firewall-cmd --get-services | grep -o 'ftp'  # 查看firewalld开放的协议
    ftp
    
    [root@wencheng-1 ~]# systemctl restart firewalld
    
    • 3.1 匿名开放模式:任何人都可以无需密码验证而直接登录到FTP服务器,是一种最不安全的认证模式。
    [root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
    # 全局配置
    write_enable=YES               # 本地系统用户写入权限;
    local_umask=022                # 本地用户创建文件及目录默认权限掩码;
    dirmessage_enable=YES          # 打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
    xferlog_enable=YES             # 启用上传/下载日志记录; 
    connect_from_port_20=YES       # FTP使用20端口进行数据传输;
    xferlog_std_format=YES         # 日志文件将根据xferlog的标准格式写入;
    listen=NO                      # Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
    listen_ipv6=YES                # 启用IPV6监听;
    pam_service_name=vsftpd        # 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
    userlist_enable=YES            # Vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
    tcp_wrappers=YES               # 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,
                       来决定请求连接的主机,是否允许访问该FTP服务器。
    
    # 本地用户配置
    local_enable=YES               # 启用本地系统用户访问;
    local_umask=022                # 本地用户创建文件及目录默认权限掩码;
    local_root=/data/ftpdata    # 修改本地用户登录时访问的目录路径
    
    # 匿名用户访问配置(最大权限)
    anonymous_enable=YES           # 开启匿名用户访问;
    anon_umask=022          # 匿名用户上传文件的umask值
    anon_upload_enable=YES      # 允许匿名用户上传文件
    anon_mkdir_write_enable=YES   # 允许匿名用户创建目录
    anon_other_write_enable=YES     # 允许匿名用户修改目录名称或删除目录
    anon_root=/data/ftpdata      # 修改匿名用户登录时访问的目录路径
    
    注:工作中,匿名用户只是只读访问,写的权限也没有的。
    
    [root@wencheng-1 ~]# ls -l /data/ftpdata
    drwxr-xr-x. 2 root root 18 Mar 25 16:26 ftppub
    [root@wencheng-1 ~]# ls -ld /data/ftpdata
    drwxr-xr-x. 3 root root 17 Mar 25 14:53 /data/ftpdata
    
    # 修改目录权限
    [root@wencheng-1 ~]# chmod o+w /data/ftpdata/ftppub
    # 修改目录属主
    [root@wencheng-1 ~]# chown ftp /data/ftpdata/ftppub/ -R
    [root@wencheng-1 ~]# ls -ld /data/ftpdata/ftppub/
    drwxr-xrwx. 2 ftp root 18 Mar 25 16:26 /data/ftpdata/ftppub
    
    [root@wencheng-1 ~]# systemctl restart vsftpd
    

     3.1.1 匿名访问测试。

    Win10测试访问ftp路径。

        

     并能执行上传/下载/删除操作。

         

    FTP服务端查看。

        

    • 3.2 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式。如果被黑客破解了账户信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

       a.将anonymous_enable=YES改为NO,即关闭了匿名模式,此时就不能在使用匿名模式登陆了。

       b.另外前面新加的与匿名配置参数可以保留,也可以直接删除,只要总开关anonymous_enable关闭了就禁用了匿名登录。

    [root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
    # 全局配置
    write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    
    # 本地用户配置
    local_enable=YES
    local_umask=022
    local_root=/data/ftpdata
    
    # 匿名用户设置
    anonymous_enable=NO    # 仅修改此项为NO
    anon_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    anon_root=/data/ftpdata
    
    [root@wencheng-1 ~]# systemctl restart vsftpd
    

    3.2.1 此时已需要账号密码登录。

        

    3.2.2 添加一个ftp用户并创建密码,用来登录ftp服务器。

    [root@wencheng-1 ~]# useradd ftpuser -s /sbin/nologin
    [root@wencheng-1 ~]# passwd ftpuser
    Changing password for user ftpuser.
    New password:
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password:
    passwd: all authentication tokens updated successfully.
    
    [root@wencheng-1 ~]# grep ftpuser /etc/passwd
    ftpuser:x:1000:1000::/home/ftpuser:/sbin/nologin
    

     3.2.3 再次尝试访问ftppub目录。

        

        

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

    Vsftpd虚拟用户企业案例配置步骤如下:

    a.安装Vsftpd虚拟用户需用到的软件及认证模块:

    [root@wencheng-1 ~]# yum install pam* libdb-utils libdb* --skip-broken -y
    

     b.创建包含用户信息的文件vuser.list(文件名字任意取),文件中奇数行表示账号名,偶数行表示密码。

    [root@wencheng-1 ~]# vim /etc/vsftpd/vuser.list
    vuser1
    123456
    vuser2
    123456
    

     c.生成Vsftpd虚拟用户数据库认证文件,设置权限700。

    [root@wencheng-1 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vsftpd_login.db
    [root@wencheng-1 ~]# chmod 700 /etc/vsftpd/vsftpd_login.db
    

     d.配置PAM认证文件,/etc/pam.d/vsftpd行首加入如下两行。

    [root@wencheng-1 ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_bak
    [root@wencheng-1 ~]# vim /etc/pam.d/vsftpd
    auth      required        pam_userdb.so  db=/etc/vsftpd/vsftpd_login
    account   required        pam_userdb.so  db=/etc/vsftpd/vsftpd_login
    

     e.所有Vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用。

    [root@wencheng-1 ~]# useradd -d /data/ftpdir -s /sbin/nologin ftpvuser  # /data/ftpdir 为虚拟用户默认访问目录
    [root@wencheng-1 ~]# chmod -Rf /data/ftpdir/
    [root@wencheng-1 ~]# ls -ld /data/ftpdir/
    drwxr-xr-x. 2 ftpvuser ftpvuser 76 Mar 29 23:51 /data/ftpdir/
    

     f.创建虚拟用户各自的配置文件

     假设我们要区别对待vuser1和vuser2,只允许vuser1查看文件,而允许vuser2上传、创建、修改、查看、删除文件。这种需求在企业真实环境中是常见的。

    [root@wencheng-1 ~]# mkdir -p /etc/vsftpd/vsftpd_users_conf
    [root@wencheng-1 ~]# cd /etc/vsftpd/vsftpd_users_conf
    [root@wencheng-1 vsftpd_users_conf]# touch vuser1
    [root@wencheng-1 vsftpd_users_conf]# vim vuser2
     anon_upload_enable=YES
     anon_mkdir_write_enable=YES
     anon_other_write_enable=YES
    

    g.修改配置文件/etc/vsftpd/vsftpd.conf。

    [root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
    # 全局配置
    write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    
    # 本地用户配置
    local_enable=YES
    local_umask=022
    #local_root=/data/ftpdata
    
    # 虚拟用户设置
    anonymous_enable=NO    # 禁止匿名开放模式
    guest_enable=YES      # 开启虚拟用户模式
    guest_username=ftpvuser  # 映射虚拟用户至系统用户ftpvuser
    allow_writeable_chroot=YES  # 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
    user_config_dir=/etc/vsftpd/vsftpd_users_conf   # 设置虚拟用户配置文件所在的目录
    
    [root@wencheng-1 ~]# systemctl restart vsftpd
    

    测试通过Windows10客户端资源管理器访问登录。

    [root@wencheng-1 ~]# echo 11 > /data/ftpdir/Vfire1
    [root@wencheng-1 ~]# echo 22 > /data/ftpdir/Vfire2
    [root@wencheng-1 ~]# echo 33 > /data/ftpdir/Vfire3
    [root@wencheng-1 ~]# ls /data/ftpdir/
    Vfire1  Vfire2  Vfire3
    

    客户端操作步骤

    测试账号:vuser1;密码:123456  

       

     无法执行删除操作。

        

     测试账号:vuser2;密码:123456

        

     删除成功。

        

     至此,已实现vsftpd服务的三种认证模式。

    ********************如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】/【赞助】按钮,因为您的支持是我继续写作,分享的最大动力!********************
  • 相关阅读:
    jQueryUI的widget的Hello World
    jquery.fileupload源码解读笔记
    起始路由改成分区(Areas)的RouteConfig.cs配置方法
    C++/CLI
    WM_COPYDATA 进程间通信
    C# 托管内存与非托管内存之间的转换
    迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
    Bitmap(Type, String) 图片路径
    C# GetManifestResourceStream获取资源为null
    C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
  • 原文地址:https://www.cnblogs.com/zhangwencheng/p/14765648.html
Copyright © 2011-2022 走看看