zoukankan      html  css  js  c++  java
  • ftp匿名用户模式,本地用户模式,匿名用户模式

    ftp简介

    网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba。

    FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。

    FTP也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

    在FTP的使用当中,用户经常遇到两种概念:下载和上传

    下载(Download)上传(Upload)
    从远程主机拷贝文件至自己的计算机上 将文件从自己的计算机上拷贝至远程主机上

    FTP协议占用两个端口号:
    21端口:命令控制,用于接收客户端执行的FTP命令。

    20端口:数据传输,用于上传、下载文件数据。

    ftp的用户主要有三种:

    • 虚拟用户:创建独立的FTP资料

    • 系统用户:可以登录系统的真实用户

    • 匿名用户:任何人无需验证既可登录ftp服务端

     ftp架构

    FTP工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。其有多种客户端和服务端的应用程序,下面来简单介绍一下

    客户端工具服务端软件
    ftp
    lftp,lftpget
    wget,curl
    filezilla
    gftp(Linux GUI)
    商业软件(flashfxp,cuteftp)
    wu-ftpd
    proftpd(提供web接口的一种ftp服务端程序)
    pureftp
    vsftpd(Very Secure)
    ServU(windows平台的一种强大ftp服务端程序)

    ftp数据连接模式

    tp有2种数据连接模式:命令连接和数据连接

    • 命令连接:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
    • 数据连接:是指数据传输,按需创建及关闭的连接

    其中数据连接需要关注的有2点,一是数据传输格式,二是数据传输模式

    数据传输格式有以下两种:

    • 文件传输
    • 二进制传输

    数据传输模式也有2种:

    • 主动模式:由服务器端创建数据连接
    • 被动模式:由客户端创建数据连接

    两种数据传输模式的建立过程:

    传输模式建立过程
    主动模式 命令连接:
    Client(1025)--> Server(21)
    客户端以一个随机端口(大于1023)来连服务器端的21号端口
    数据连接:
    Server(20/tcp) --> Client(1025+1)
    服务器端以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号
    被动模式 命令连接:
    Client(1110) --> Server(21)
    客户端以一个随机端口来连成服务器端的21号端口
    数据连接:
    Client(1110+1) --> Server(随机端口)
    客户端以创建命令连接的端口+1的端口号去连服务器端通过命令连接告知自己的一个随机端口号来创建数据连接

    主动模式有个弊端,因为客户端的端口是随机的,客户端如果开了防火墙,则服务器端去连客户端创建数据连接时可能会被拒绝.

    vsftpd常见的配置参数:

    参数作用
    anonymous_enable=YES 启用匿名用户登录
    anon_upload_enable=YES 允许匿名用户上传
    anon_mkdir_write_enable=YES 允许匿名用户创建目录,但是不能删除
    anon_other_write_enable=YES 允许匿名用户创建和删除目录
    local_enable=YES 启用本地用户登录
    write_enable=YES 允许本地用户有写权限
    local_umask=022 通过ftp上传文件的默认遮罩码
    chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
    chroot_list_enable=YES 开启禁锢文件列表
    需要与chroot_list_file参数一起使用
    chroot_list_file=/etc/vsftpd/chroot_list 指定禁锢列表文件路径
    在此文件里面的用户将被禁锢在其家目录中
    allow_writeable_chroot=YES 允许被禁锢的用户家目录有写权限
    xferlog_enable=YES 是否启用传输日志,记录ftp传输过程
    xferlog_std_format=YES 传输日志是否使用标准格式
    xferlog_file=/var/log/xferlog 指定传输日志存储的位置
    chown_uploads=YES 是否启用改变上传文件属主的功能
    chown_username=whoever 指定要将上传的文件的属主改为哪个用户
    此用户必须在系统中存在
    pam_service_name=vsftpd 指定vsftpd使用/etc/pam.d下的
    哪个pam配置文件进行用户认证
    userlist_enable=YES 是否启用控制用户登录的列表文件:
    默认为/etc/vsftpd/user_list文件
    userlist_deny=YES 是否拒绝userlist指定的列表文件中存在的用户登录ftp
    max_clients=# 最大并发连接数
    max_per_ip=# 每个IP可同时发起的并发请求数
    anon_max_rate 匿名用户的最大传输速率,单位是“字节/秒”
    local_max_rate 本地用户的最大传输速率,单位是“字节/秒”
    dirmessage_enable=YES 启用某目录下的.message描述信息
    假定有一个目录为/upload,在其下创建一个文件名为.message,
    在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容
    message_file 设置访问一个目录时获得的目录信息文件的文件名,默认是.message
    idle_session_timeout=600 设置默认的断开不活跃session的时间
    data_connection_timeout=120 设置数据传输超时时间
    ftpd_banner="Welcome to chenlf FTP service." 定制欢迎信息,登录ftp时自动显示

    这里使用两台RHEL8系统的主机作为实验,提前关闭防火墙和selinux

    主机名称 操作系统 IP
    FTP服务端 RHEL8 192.168.248.134
    FTP客户端 RHEL8 192.168.248.156

    服务端安装vsftp

    [root@localhost ~]# yum  -y install vsftpd
    

    vsftpd配置

    vsftpd配置
    /etc/pam.d/vsftpd       #vsftpd用户认证配置文件
    /etc/vsftpd/            #配置文件目录
    /etc/vsftpd/vsftpd.conf     #主配置文件
    
    #匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
    #系统用户通过ftp访问的资源位置为用户的家目录
    #虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
    

    先备份vsftpd主配置文件

    [root@localhost ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
    

     过滤以#号开开头的行,将结果写入vsftpd.conf中

    [root@localhost ~]# grep -v "^#" /etc/vsftpd/vsftpd.conf.bak  > /etc/vsftpd/vsftpd.conf
    [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO  #是否允许匿名访问
    local_enable=YES    #是否允许本地用户登录     
    write_enable=YES   #本地用户有写权限
    local_umask=022   #本地用户上传的umask值
    dirmessage_enable=YES  #启用某目录下的.message描述信息,假定有一个目录为/upload,在其下创建一个文件名为.message,在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容。
    xferlog_enable=YES  #是否启用传输日志,记录ftp传输过程
    connect_from_port_20=YES  #连接的端口是20号端口
    xferlog_std_format=YES   #传输日志是否使用标准格式
    listen=NO  #是否以独立允许的方式监听
    listen_ipv6=YES  
    
    pam_service_name=vsftpd  #指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证
    userlist_enable=YES  #是否启用“禁止用户登录名单”
    

    匿名用户访问模式

    FTP匿名访问是比较不安全的模式,在真实环境中千万不要放入敏感数据以免泄露。

    配置vsftpd.cof允许匿名访问,写入和上传

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    .............................
    anon_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    

    启动服务

    [root@localhost ~]# systemctl  start vsftpd
    

    在客户端登录FTP服务

    若没有ftp命令,执行“ yum -y install ftp”安装即可

    [root@localhost ~]# ftp 192.168.248.134
    Connected to 192.168.248.134 (192.168.248.134).
    220 (vsFTPd 3.0.3)
    Name (192.168.248.134:root): anonymous
    331 Please specify the password.
    Password:  #回车即可
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> cd pub
    250 Directory successfully changed.
    ftp> mkdir test
    550 Create directory operation failed.
    ftp> exit
    

     可以看到上面已经允许匿名用户创建目录和写入权限,仍然被拒绝了,匿名用户访问的FTP根目录是/var/ftp,而FTP根目所有者的root,修改有者为ftp

    [root@localhost var]# ll /var/ftp/
    total 0
    drwxr-xr-x. 2 root root 6 Feb 17  2020 pub
    [root@localhost var]# chown   ftp /var/ftp/pub/
    [root@localhost var]# ll /var/ftp/
    total 0
    drwxr-xr-x. 2 ftp root 6 Feb 17  2020 pub
    

     在到客户端尝试

    [root@localhost ~]# ftp 192.168.248.134
    Connected to 192.168.248.134 (192.168.248.134).
    220 (vsFTPd 3.0.3)
    Name (192.168.248.134:root): anonymous
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> cd pub
    250 Directory successfully changed.
    ftp> mkdir tset
    257 "/pub/tset" created
    ftp> mkdir haha
    257 "/pub/haha" created
    ftp> rename haha t1
    350 Ready for RNTO.
    250 Rename successful.
    ftp> exit
    221 Goodbye
    
    #到服务端查看
    [root@localhost var]# ll /var/ftp/pub/
    total 0
    drwxr-xr-x. 2 ftp ftp 6 Apr  3 11:16 t1
    drwxr-xr-x. 2 ftp ftp 6 Apr  3 11:16 tset
    

    本地用户模式

    本地用户模式比匿名用户模式更加安全一点,关闭匿名用户访问模式,vsftpd服务默认已经允许本地用户访问,只需要添加本地用户模式权限参数,删除原先用户配置或者还原虚拟机,否则可能会因为配置文件冲突而报错。

    [root@localhost var]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    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
    userlist_deny=YES  #参数为YES既禁止名单中的用户
    

     重启服务

    [root@localhost var]# systemctl  restart vsftpd
    

    禁止用户登录的名单可以在ftpusers 或user_list中查看

    [root@localhost var]# cat /etc/vsftpd/user_list 
    # vsftpd userlist
    # If userlist_deny=NO, only allow users in this file
    # If userlist_deny=YES (default), never allow users in this file, and
    # do not even prompt for a password.
    # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
    # for users that are denied.
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    

     vsftpd服务为了让FTP更加安全,默认是禁止root用户身份登录的

    这里创建一个普通用户使用普通用户登录

    [root@localhost var]# useradd ftptest
    [root@localhost var]# passwd  ftptest
    Changing password for user ftptest.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

     在客户端尝试登入

    [root@localhost ~]# ftp 192.168.248.134
    Connected to 192.168.248.134 (192.168.248.134).
    220 (vsFTPd 3.0.3)
    Name (192.168.248.134:root): ftptest
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls -a
    227 Entering Passive Mode (192,168,248,134,117,112).
    150 Here comes the directory listing.
    drwx------    2 1001     1001           62 Apr 03 03:33 .
    drwxr-xr-x    4 0        0              36 Apr 03 03:33 ..
    -rw-r--r--    1 1001     1001           18 Aug 30  2019 .bash_logout
    -rw-r--r--    1 1001     1001          141 Aug 30  2019 .bash_profile
    -rw-r--r--    1 1001     1001          312 Aug 30  2019 .bashrc
    226 Directory send OK.
    ftp> mkdir test
    257 "/home/ftptest/test" created
    ftp> cd /
    250 Directory successfully changed.
    ftp> ls
    227 Entering Passive Mode (192,168,248,134,197,136).
    150 Here comes the directory listing.
    lrwxrwxrwx    1 0        0               7 Aug 12  2018 bin -> usr/bin
    dr-xr-xr-x    5 0        0            4096 Dec 17 07:34 boot
    drwxr-xr-x   20 0        0            3180 Apr 03 00:59 dev
    drwxr-xr-x   84 0        0            8192 Apr 03 03:34 etc
    drwxr-xr-x    4 0        0              36 Apr 03 03:33 home
    lrwxrwxrwx    1 0        0               7 Aug 12  2018 lib -> usr/lib
    lrwxrwxrwx    1 0        0               9 Aug 12  2018 lib64 -> usr/lib64
    dr-xr-xr-x    7 0        0            2048 Apr 04  2020 media
    drwxr-xr-x    3 0        0              18 Dec 17 07:31 mnt
    drwxr-xr-x    3 0        0              18 Apr 02 07:49 opt
    dr-xr-xr-x  153 0        0               0 Apr 03 00:58 proc
    dr-xr-x---    3 0        0             185 Apr 03 03:27 root
    drwxr-xr-x   28 0        0             780 Apr 03 00:59 run
    lrwxrwxrwx    1 0        0               8 Aug 12  2018 sbin -> usr/sbin
    drwxr-xr-x    2 0        0               6 Aug 12  2018 srv
    dr-xr-xr-x   13 0        0               0 Apr 03 00:59 sys
    drwxrwxrwt   10 0        0             240 Apr 03 01:43 tmp
    drwxr-xr-x   12 0        0             144 Dec 17 07:31 usr
    drwxr-xr-x   21 0        0            4096 Apr 01 10:27 var
    226 Directory send OK.
    ftp> exit
    221 Goodbye
    
    #去服务端查看
    [root@localhost var]# ll /home/ftptest/
    total 0
    drwxr-xr-x. 2 ftptest ftptest 6 Apr  3 11:37 test
    

    虚拟用户模式

    删除原先用户配置或者还原虚拟机,否则可能会因为配置文件冲突而报错。

    虚拟用户模式的账号口令都不是真实系统中存在的,所以只要配置妥当虚拟用户模式比本地用户模式更加安全。

    虚拟用户的配置:
        所有的虚拟用户会被统一映射为一个指定的系统帐号,访问的共享位置即为此系统帐号的家目录
        各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
    
        虚拟用户帐号的存储方式:
        1.文件:编辑文件,此文件需要被编码为hash格式。
            奇数行为用户名
            偶数行为密码
        2.关系型数据库的表中:
            通过即时查询数据库完成用户认证
            mysql库:pam要依赖于pam_mysql软件,可以通过epel源yum安装

    虚拟用户模式配置流程大致如下:

      1.建立虚拟FTP用户数据库文件

      2. 创建FTP根目录及虚拟用户映射的系统用户

      3.建立虚拟用户的PAM认证文件

      4.在vsftpd.conf文件中添加支持配置

      5.为虚拟用户设置不同权限

      6.重启服务

    以文件方式存储虚拟账号:

     1.建立虚拟FTP用户数据库文件

    [root@localhost ~]# cd /etc/vsftpd/
    [root@localhost vsftpd]# vim vuser.txt
    runtime
    paSS11D
    deathwing
    qwerasdf
    
    #使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db
    [root@localhost vsftpd]# db_load -T  -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vuser.db
    //上面的-T表示转换,-t表示加密方式使用hash算法加密
    
    #提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
    [root@localhost vsftpd]# chmod  600 /etc/vsftpd/vuser*
    

     2.创建FTP根目录及虚拟用户映射为系统用户

    #创建用户vuser并指定其家目录,不允许登录
    [root@localhost vsftpd]# useradd  -d /var/ftproot -s /sbin/nologin vuser
    
    #修改其家目录权限保证其他用户可以访问
    [root@localhost vsftpd]# chmod  755 /var/ftproot/
    

     3.建立虚拟用户的PAM认证文件

    [root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
    # 参数db用于指向刚刚生成的vuser.db文件,不用加后缀
    auth required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/etc/vsftpd/vuser
    

     4.在vsftpd.conf文件中添加支持配置

    [root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
    anonymouse_enable=NO
    write_enable=YES
    local_enable=YES
    guest_enable=YES
    guest_username=vuser
    pam_service_name=vsftpd.vu
    allow_writeable_chroot=YES
    

     5.为虚拟用户设置不同权限

    [root@localhost vsftpd]# mkdir /etc/vsftpd/vuser_dir
    [root@localhost vsftpd]# echo 'user_config_dir=/etc/vsftpd/vuser_dir' >> /etc/vsftpd/vsftpd.conf
    
    #为不同的虚拟用户配置权限,runtime用户可以上传和创建目录,及写人权限
    [root@localhost vsftpd]# vim /etc/vsftpd/vuser_dir/runtime
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
    #deathwing用户只有默认的下载权限,只需要创建一个名为deathwing空文件即可
    [root@localhost vsftpd]# touch /etc/vsftpd/vuser_dir/deathwing
    

     6.重启服务,验证效果

    [root@localhost vsftpd]# systemctl  restart vsftpd
    
    #在客户端验证效果
    [root@localhost ~]# ftp 192.168.248.134
    Connected to 192.168.248.134 (192.168.248.134).
    220 (vsFTPd 3.0.3)
    Name (192.168.248.134:root): runtime
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir test
    257 "/test" created
    ftp> exit
    221 Goodbye.
    
    [root@localhost ~]# ftp 192.168.248.134
    Connected to 192.168.248.134 (192.168.248.134).
    220 (vsFTPd 3.0.3)
    Name (192.168.248.134:root): deathwing
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir haha
    550 Permission denied.
    ftp> exit
    221 Goodbye
    
  • 相关阅读:
    点击标签实现元素的显示与隐藏
    二叉排序树查找 递归 非递归
    新闻实时分析系统 SQL快速离线数据分析
    新闻实时分析系统 Spark2.X集群运行模式
    新闻实时分析系统 Spark2.X分布式弹性数据集
    linux top命令查看内存及多核CPU的使用讲述
    新闻实时分析系统 基于IDEA环境下的Spark2.X程序开发
    新闻实时分析系统 Spark2.X环境准备、编译部署及运行
    新闻实时分析系统Hive与HBase集成进行数据分析 Cloudera HUE大数据可视化分析
    新闻实时分析系统Hive与HBase集成进行数据分析
  • 原文地址:https://www.cnblogs.com/diqiyao/p/14612682.html
Copyright © 2011-2022 走看看