zoukankan      html  css  js  c++  java
  • linux中ftp

    FTP介绍及原理

     

    创建文件默认权限为666

    创建目录默认权限为777

    #通过umask值设定,因为操作系统默认umask值为002 每次创建文件或目录是都应减去umask

     

     

    FTP是明文传输

     

    FTP文件传输协议 是典型的C/S结构的应用层协议,需要有服务器端的软件,客户端软件分为两个部分共同实现文件传输功能

     

    FTP服务器默认使用TCP协议的20,21 端口与客户端进行通信。20端口用于建立数据连接,并传输数据,21端口用户建立控制连接 并传输FTP控制命令

     

    FTP登入过程是使用明文进行登入的

     

    FTP连接及传输模式(两种)

    主动模式: 服务端从20端口主动向客户端发起连接

    默认采用了主动模式,服务端主动发起数据连接,服务器开启21端口等待客户端连接,如果服务器通过21端口接收到客户端的请求,服务端就会验证用户名和密码,如果用户名和密码不符合直接拒绝,如果验证成功,可以上传下载数据了,客户端就会随机开启一个1024以上的端口,然后在端口中传带一个PORT命令,通过PORT(携带随机端口号)告知服务器,我打开了某个端口,服务器接收PORT协议后,查看,就会开启 本机的20端口,向客户端的随机端口发送数据

     

    被动模式:服务端在指定范围内某个端口被动等待客户端连接

    客户端同样连接21端口,验证用户名密码,登入失败就会拒绝 ,登入成功就会客户端开机PASV命令 通过PASV命令告诉服务采用被动模式连接,服务器端会开启一个随机端口(1024)以上,不采用20端口进行传输数据,然后服务端将随机端口号告诉客户端,客户端就会使用本地的随机端口向服务端传输数据

     

    常见的FTP服务程序

    windows:  IIS   Serv-U

    linux: wu-ftpd   proftpf   vsftp

     

    服务的安装

    挂载光盘,进入光盘中的rpm软件中

    [root@web Packages]# rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm

     

    相关文件

    #主配置文件

    /etc/vsftpd/vsftpd.conf 

    #用户控制列表文件

    /etc/vsftpd/ftpusers   #禁止用户登入

    /etc/vsftpd/user_list  #可以通过修改主配置文件更改为白名单

    :如果一个用户同时存在两个文件中,黑名单的用户生效,黑名单优先级高

     

    FTP相关用户

    匿名用户:anonymous或ftp

    本地用户:使用linux系统用户和密码

    虚拟用户:管理员自定义的模拟用户

     

     

    配置文件详解

    注:配置文件字段前后不允许有空格或注释

    默认配置文件

    anon_umask=022         #匿名用户上传默认umask中

    anonymous_enable=YES            #运行匿名用户登入

    anon_upload_enable=YES            #运行匿名用户登入

    local_enable=YES                #允许本地用户登入

    write_enable=YES                #允许本地用户上传

    local_umask=022                 #本地用户上传umask值

    dirmessage_enable=YES           #用户进入目录时,显示message文件中信息,提示信息

    message_file=.message           #指定信息文件

    xferlog_enable=YES              #激活记录日志

    connect_from_port_20=YES        #主动默认数据传输接口

    xferlog_std_format=YES          #使用标准的ftp日志格式

    ftpd_banner                     #登入欢迎信息

    listen=YES                      #允许被监听

    listen_ipv6=YES

    pam_service_name=vsftpd         #设置PAM外挂模式提供认证服务所使用的配置文件名即/etc/pam.d/vsftpd文件

    userlist_enable=YES             #用户登入限制

    tcp_wrappers=YES                #是否使用tcp_wrappers作为主机访问控制方式

     

     

    常用的全局配置

    listen_addres=192.168.201.221   #设置监听的IP地址

    listen_port=21                  #设置监听FTP服务的端口号

    download_enable=YES             #是否允许下载文件

    max_clients=0                   #限制并发客户连接数(限制几百)

    max_per_ip=0                    #限制同一IP地址的并发连接数(2-3之间)

     

     

    被动模式

    pasv_enable=YES                 #开启被动模式

    pasv_min_port=24500             #被动默认最小端口

    pasv_max_port=24600             #被动默认最大端口  (端口信息大于10000)

     

    常用安全配置

    accept_timeout=60               #被动模式,连接超时时间

    connect_timeout=60              #主动默认,连接超时时间

    idle_session_timeout=600        #600秒没有任何操作就端口断开连接

    data_connection_timeout=500     #资料传输时,超过500秒没有完成,就断开传输

     

     

    客户端使用

    windiws  cmd

    ftp 192.168.201.221 登入

    get 下载文件

    mget  批量下载文件

    put   上传文件

    mput   批量上传文件

    exit退出

    :登入的时的目录将会是你上传或下载文件的默认路径

    文件夹不能下载只能下载文件夹中文件,不支持断链从传

     

    可是使用tcpdump抓包工具抓取数据包中的内容

    [root@node2 lm]# tcpdump -i ens33 -nnX port 21

    -I   指定网卡名称

    -nnX  拆解为16进制文件

    port  指定监听端口号

     

    第二种

    win + e 

    ftp://192.168.201.221

     

    第三种第三方工具

    flashFXP  winscp 

    可以随意查看文件所有文件

     

    匿名用户访问

    匿名用户的基本配置(如有其它需求自行百度)

    anon_umask=022         #匿名用户上传默认umask中

    anonymous_enable=YES            #运行匿名用户登入

    anon_upload_enable=YES            #运行匿名用户登创建文件

    anon_mkdir_write_enable=YES      #允许匿名用户建立目录

     

    注意事项

    匿名用户默认位置是

    /var/ftp  应修改该文件的权限属主属组等

    如果允许上传 需要服务权限和系统目录 权限同时允许

    vsftp服务的伪用户是ftp

    低版本的ftp服务如果将目录属主修改为ftp会报错

    处于安全应设置对应的目录下的子目录上传权限

     

    本地用户访问

    清除匿名用户的配置

    :本地登入就是使用系统用户登入FTP,不仅可以登入FTP还可以登入到系统当中

    缺点:用户密码容易暴露  可以切换到任意目录随意下载目录下的文件

    解决在所有目录随意下载文件可以将用户限制到自己的家目录

    登入到FTP默认会登入到用户所在的家目录(可更改)

    本地用户的基本配置,一下三句就可以登入到FTP

    local_enable=YES                #允许本地用户登入

    write_enable=YES                #允许本地用户上传

    local_umask=022                 #本地用户上传umask值

     

    需求1:修改FTP的访问根目录(默认访问时自己的家目录,)

    local_root=/var/ftp          #设置本地用户的FTP根目录(注意目录权限,和)

        因为访问FTP需要两次权限的限制,

       FTP的权限            #那有多个用户怎么办?

       linux系统的权限        可以添加一个组 将所登入的用户加入相应的组即可,修改文件夹的数组即可

    :次目录是针对所有的用户,也就是说所有用户都将访问这个目录,

     

    需求2:限制最大的传输速率,

    local_mac_rate=0             #限制最大传输速率(字节/s)

     

    需求3:使用本地访问的时候用户可以随意切换到其他目录,安全性降低,如何将用户限制到自己的家目录中?

    chroot_local_user=YES         #开启用户家目录限制(只有此行,吧所有用户限制到用户主目录中)

    #如果想让 李四  随意切换到其他目录并下载文件?

    chroot_list_enable=YES        #相当于开启用户随意切换目录

    chroot_list_file=/etc/vsftp/chroot_list    #指定随意切换用户文件路径

    #注:如果chroot_list是控制用户可以不可随意切换目录的并不是,用户控制列表文件

     

     

    需求4:如果需要不希望lisi用户登入到FTP怎么办?

      应为用户控制文件默认 两个文件都是黑名单

    修改/etc/vsftp/user_list 将lisi 用户添加进即可

    userlist_enable=YES       #开启用户访问控制 如果=NO  及没有白黑名单

    userlist_deny =YES        

    :控制user_list是否为黑名单,YES是黑名单  NO是白名单 (默认YES)

    userlist_file=/etc/vsftp/user_list

    #写入/etc/vsftp/user_List文件中的用户不能访问ftp服务器,没有写入的用户可

    如果userlist_dent=NO 文件就是白名单写入的用户可以访问,没有写不可以访问

     

    注意:禁止root用户登入到系统

     

     

    虚拟用户访问

    需要将之前配置取消以防冲突

     

    因为本地用户使用的系统用户登入的,相对于linux系统来说不安全,

    虚拟用户创建的是与linux系统用户完全不相关的用户,只能登入到FTP不能登入到linux系统中,模拟用户

     

    虚拟用户可以单独制定配置  指定自己的家目录,指定文件权限,更加灵活

     

    配置虚拟用户访问

    1.添加虚拟用户口令文件 (文件名自定义)

    此文件跟linux系统用户没关系

    [root@node2 ~]# vim /etc/vsftpd/vuser.txt

    内容格式为   用户名   第一行用户名

               密码     第二行密码

    2.生成虚拟用户口令认证文件

    需要安装此软件包 libdb-utils-5.3.21-24.el7.x86_64  生成db_load命令

    db_load -T -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vuser.db使用此命令生将保存的文件转变成认证数据文件文件

    3.编辑VSFTPPAM认证文件

    因为linux内核2.6以后引入了pam认证为了防止,暴力破解linux系统用户密码文件

    修改/etc/pam.d/vsftp文件将其他注释添加如下:

    [root@node2 vsftpd]# vim /etc/pam.d/vsftpd

    auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

    account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

    #注此时就算不注释,让系统用户登入FTP,系统用户也不会登入到FTP中 因为在PAM文件中将本地用户已经注释掉了

     

    如果将local_enable=YES 改为NO虚拟用户也不可以登入到系统当中,因为虚拟用户需要映射到本地用户

     

    4.建立本地映射用户并设置宿主目录

    [root@node2 /]# useradd -d /home/vuser -s /sbin/nologin vuser此用户不需要登入到系统,只是映射用户

    用户名必须和下一步配置文件中一致

     

    修改文件目录权限

    [root@node2 ~]# chmod 755 /home/vuser/

    默认是700 

    5.修改配置文件

    [root@node2 ~]# vim /etc/vsftpd/vsftpd.conf

    #虚拟用户配置如下

    guest_enable=YES:启用虚拟用户

    guest_username=liu:设置虚拟用户对应的系统用户(前几步不是创建过新用户吗,这里就写哪个新用户的名称)

     

    pam_service_name=vsftpd.vu:认证方式改为vsftpd.vu刚好对应你创建的虚拟用户的PAM认证文件

    :此文件可以vsftpd  和 vsftod.xu两个文件可以同时存在(可以使用系统用户登入不可以使用虚拟用户登入,主要看其配置文件指向那个文件)

     

     

    local_enable=YES:允许本地用户登陆,(虚拟用户有对应的本地用户,所有要允许本地用户登陆)

     

    local_umask=077(本地用户的权限掩码,注:虚拟用户都有自己所对应的本地用户,因此给本地用户设置权限,相当与给虚拟用户设置了权限)

     

    chroot_local_user=YES:把账户锁定在根目录内,不能切换到其他目录(包括虚拟用户,这是为了安全才设置的)

     

    virtual_use_local_privs=YES:同步,意思为虚拟用户的权限相等与自己所对应的本地用户的权限,必须配置

    注:这里配置完后虚拟用户就配置完成了,使用user文件中你所创建的虚拟用户登陆即可,验证方式和本地用户一样

    注:设置虚拟账户是这个“allow_writeable_chroot=YES”字段必须添加,因为这个字段影响本地用户,所有同时影响了虚拟用户(会导致虚拟用户无法登陆),且如果设置中有“userlist_deny=NO”条目必须删除,

    6.重启,并测试

    [root@node2 ~]# systemctl restart vsftpd

    此时虚拟用户可以登入  查看 不能下载  默认上传文件的位置是宿主用户的家目录

    虚拟用户的权限使用的是匿名用户权限进行管理

    :如果使用了local_root=/data 指向那个默认目录,默认指向虚拟用户映射的家目录

    7.修改虚拟用户权限

    anonymous_enable=NO       #g关闭匿名用户登入 安全(不影响虚拟用户登入)

    anon_upload_enable=YES    #

    anon_mkdir_wirite_enable=YES

    anon_other_write_enable=YES   #允许匿名用户上传其他类型文件

    给虚拟用户设定权限,允许所有虚拟用户上传(如果还是上传不成功,查看ftp家目录权限)

     

    8.单独定义虚拟用户权限

    为每个虚拟用户建立自己的配置文件,单独定义权限

    将上面的匿名用户的相关的权限,注释掉即可

     

    修改配置文件  添加下列

    vim /etc/vsftpd/vsftpd.conf

    user_config_dir=/etc/vsftpd/vusers_dir

    :指定保存虚拟用户配置文件的目录,在这个目录下建立与虚拟用户名相同的配置文件

     

    [root@node2 vusers_dir]# vim lisi

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    anon_other_write_enable=YES

    local_root=/tmp/lisi

    #给lisi指定独立的上传目录(注意tmp/lisi的权限)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    log4Net使用
    VS Code入门
    用VS Code写Python
    C#(99):LINQ查询操作符实例
    C#(99):LINQ to Objects(2)
    spring mvc 配置对静态资源的访问
    EntLib 自动数据库连接字符串加密
    块级格式化上下文( Block formatting contexts)
    Entlib DAAB映射枚举类型
    js 继承
  • 原文地址:https://www.cnblogs.com/hzlzxt/p/12217022.html
Copyright © 2011-2022 走看看