• FTP服务详解


    FTP服务

    1. 本章机构

    2. 简介
      1. File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议"。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的不同操作系统有不同的FTP的应用程序,而所有这些应用程序都遵守同一个协议以传输文件,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
      2. "下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是从本地将文件从自己的计算机中拷贝至远程主机上。
      3. 支持FTP协议的服务器就是FTP服务器。
    3. 工作模式
      1. FTP连接及传输模式
        1. 控制连接:TCP 21,用于发送FTP命令信息
        2. 数据连接:TCP 20,用于上传、下载数据
      2. 数据连接的建立类型:
        1. 主动模式:服务器从20端口主动向客户端发起连接
        2. 被动模式:服务器在指定范围内某个端口被动等待客户端连接

    4. 服务器端和客户端程序
      1. FTP用户的类型:

        匿名用户:annonymous或ftp

        本地用户:

        账号名称、密码等信息保存在passwd、shadow文件中

      2. 常见的FTP服务器程序:

        IIS、Serv-U

        wu-ftpd、Proftpd

        vsftpd(Very Secure FTP Daemon)

      3. 常见的FTP客户端程序:

        CuteFTP、FlashFXP、LeapFTP、Filezilla

        gftp、Kuftp

        FTP命令

    5. 相关配置
      1. vsftpd软件包

        官方站点:http://vsftp.beasts.org/

        主程序:/usr/sbin/vsftpd

        服务名:vsftpd

        用户控制列表文件:

        /etc/vsftpd/ftpusers

        /etc/vsftpd/user_list

    主配置文件:/etc/vsftpd/vsftpd.conf

    1. 配置选项
      1. 匿名权限控制:

        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:限制最大传输速率(字节/秒)

      2. 本地用户权限控制:

        local_enable=YES:是否启用本地系统用户

        local_umask=022:本地用户所上传文件的权限掩码

        local_root=/var/ftp:设置本地用户的FTP根目录

        chroot_local_user=YES:是否将用户禁锢在主目录

        local_max_rate=0:限制最大传输速率(字节/秒)

      3. 常用的全局配置项:

      listen_address=192.168.131.129:设置监听的IP地址

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

      write_enable=YES:是否启用写入权限

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

      max_clients=0:限制并发客户端连接数

      max_per_ip=0:限制同一个IP地址的并发连接数

      pasv_enable=YES #启用被动模式

      pasv_min_port=5000:将客户端的数据连接端口改在50000-60000之间

      pasv_max_port:60000

      1. 限制访问

        userlist_enable=YES:是否启用user_list列表文件

        userlist_deny=YES:禁止列表文件里面的用户访问

        userlist_deny=NO:允许列表里面的用户访问

      2. 其它安全选项

        connect_timeout=60 :连接超时时间

        accept_timeout=60:请求超时时间

        data_connection_timeout=300 :数据连接超时时间

        idle_session_timeout=300 :会话超时时间

        ftpd_banner=xxx和banner_file=/path/file :显示登陆信息

        tcp_wrappers=YES

        #启用tcp_wrappers,即/etc/hosts.allow和/etc/hosts.deny

    2. 案例1:匿名验证

      流程:准备匿名FTP访问的目录/var/ftp/pub,使匿名用户FTP对目录有写入权限,开放匿名用户配置,并启动vsftpd服务。

      使用匿名验证时,可以将光盘挂载到ftp下的某个目录下,并且此目录是777的权限,那么客户端可以将其挂载到本地作为yum源

      1. FTP服务器端配置安装

        #yum –y install vsftpd

        #vim /etc/vsftpd/vsftpd.conf

    anonymous_enable=YES #支持匿名用户

    write_enable=YES #支持写权限

    anon_umask=022 #匿名用户上传或创建的文件或目录的默认权限

    anon_upload_enable=YES #允许匿名用户上传文件,默认为允许

    anon_mkdir_write_enable=YES #允许匿名用户有创建目录的权限

    anon_other_write_enable=YES #允许匿名用户对文件具有删除等权限

    #service vsftpd start

    #chown ftp /var/vsftpd/pub #生产环境不要直接用chmod改

    #设置所有用户对pub目录具有读写权限,否则即使ftp服务设置了相关权限,匿名用户还是无法具有相关权限,这点要特别注意,还有就是要关闭防火墙和SELINUX

    1. FTP客户端配置安装

      #yum –y install ftp

      #ftp 192.168.131.129

      ftp> cd pub #进入此目录,进行相关实验操作

      ftp>?

      #可以获取命令列表,也就是ftp可以使用的命令,常用的命令有:

    使用!也可以退出ftp

    ftp> put 1.txt

    #上传文件时,要注意自己对那个文件有权限,否则无法上传成功,可以用root创建一个文件,然后#chmod 777 filename,最好在tmp下做实验

    1. 案例2:本地用户验证
      1. 服务器端安装配置

        #useradd user1 #添加本地用户

        #passwd user1

        #useradd user2

        #passwd user2

        #useradd user3

        #passwd user3

        #yum –y install vsftpd

        #vim /etc/vsftpd/vsftpd.conf

        local_enable=YES #启用本地系统用户

    write_enable=YES #允许有写权限

    local_umask=022 #设置本地用户的默认权限,文件为644,目录755

    local_root=/var/rootftp #设置ftp的根目录

    chroot_local_user=YES

    #是否将用户禁锢在根目录,务必要加上这条,否则用户可以随意切换到其他目录,威胁系统安全

    local_max_rate=0 #允许的最大传输速率

    userlist_enable=YES #启用user_list用户列表

    userlist_deny=YES #禁止user_list的用户登录FTP

    或者[userlist_deny=NO ] #只允许user_list的用户登录ftp服务器

    #vim /etc/vsftpd/user_list

    注意:禁止用户登录如果在/etc/vsftpd/ftpuses和/etc/vsftpd/user_list都有写上某个用户,那么即使/etc/vsftpd/user_list允许用户登录,但这个用户同时也被写入/etc/vsftpd/ftpuses,那么这用户无法登录,也就是说/etc/vsftpd/ftpuses优先级更高

    1. 客户端安装客户端软件并测试
    1. 案例3:虚拟用户

      创建账号数据:

      #yum –y install vsftpd

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

        [root@myrhel1 vsftpd]# vim vuser.list

        [root@myrhel1 vsftpd]# db_load -T -t hash -f vuser.list vuser.db

        #-T:生成数据文件 -t:指定算法为hash -f:指定账号文件

        [root@myrhel1 vsftpd]# chmod 600 vuser.*

        #修改文件权限,不让任何人查看

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

        [root@myrhel1 pam.d]# useradd -d /var/ftp/ -s /sbin/nologin vuser

        [root@myrhel1 pam.d]# chmod 755 /var/ftp/

      3. 建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

        [root@myrhel1 pam.d]# cd /etc/pam.d/

        [root@myrhel1 pam.d]# cp vsftpd vsftpd.vuser

        [root@myrhel1 pam.d]# vim vsftpd.vuser

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

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

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

    local_enable=YES

    write_enable=YES

    anon_umask=022

    guest_enable=YES

    guest_username=vuser

    pam_service_name=vsftpd.vuser

    user_config_dir=/etc/vsftpd/vusers_dir

    1. 为个别虚拟用户建立独立的配置文件,启动服务并测试

      [root@myrhel1 pam.d]# mkdir /etc/vsftpd/vusers_dir

      [root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user1

      anon_upload_enable=YES

      [root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user2

      anon_mkdir_write_enable=YES

    2. 重新加载vsftpd配置

      #service vsftpd reload

    3. 使用虚拟FTP账户访问测试

      user1用户可以登录,并可以浏览、下载、上传

      user2用户可以登录,并可以浏览、下载、创建目录

    1. 案例4:ftps加密传输

      ftp是明文传输,极不安全,可以使用tcpdump等抓包工具进行抓取

      [root@myrhel1 vsftpd]# yum -y install tcpdump

      [root@myrhel1 vsftpd]# tcpdump port 21 –nA

      ftps是用openssl进行加密传输,相比较明文传输更加安全。

      [root@myrhel1 vsftpd]# ldd `which vsftpd` | grep ssl

      #查询ftp是否支持ssl

      1. FTPS安装配置
      1. #yum –y install vsftpd
      2. #openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem

    #req 表示生成证书

    -new表示生成一个新的证书

    -x509证书格式

    -nodes表示生成证书时,不生成密码保护,而默认会生成密码保护

    -out指定输出证书的文件名

    -keyout生成私钥的文件名

    根据提示填写好相关信息即可生成一个证书

    1. [root@myrhel1 ~]# chmod 400 vsftpd.pem #证书只允许管理员只读

    ④[root@myrhel1 ~]# cp vsftpd.pem /etc/ssl/certs/

    #拷贝证书到ssl的默认证书目录

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

    加上下列几行

    ssl_enable=YES #表示启用ssl功能

    allow_anon_ssl=YES #表示允许匿名用户使用ssl加密

    force_local_data_ssl=YES #强制本地用户数据传输使用ssl加密

    force_local_logins_ssl=YES #强制本地用户登录时使用ssl加密

    force_anon_data_ssl=YES #强制匿名用户数据传输使用ssl加密

    force_anon_logins_ssl=YES #强制匿名用户登录时使用ssl加密

    ssl_tlsv1=YES #加密使用第一版协议

    ssl_sslv2=NO #必须声明不使用ssl版本2,这个不能不加

    ssl_sslv3=NO #必须声明不使用ssl版本3,这个不能不加

    rsa_cert_file=/etc/ssl/certs/vsftpd.pem #指定生成证书的位置

    1. service vsftpd start
    2. 最后使用专门的客户端工具(支持加密访问的客户端,命令行没有),如flashFXP

  • 相关阅读:
    JavaCV音视频开发宝典:录制vp8和vp9编码的webm格式视频,以mp4转webm为例
    JavaCV音视频开发宝典:使用JavaCV采集windows系统声音并录制成mp3音频文件(FFmpeg采集windows系统声音)
    JavaCV音视频开发宝典:使用JavaCV和springBoot实现httpflv直播服务,无需流媒体服务,浏览器网页flv.js转封装方式播放rtsp,rtmp和桌面投屏实时画面
    linux用户用户组与ACL
    QUIC协议详解
    技术分享 | 黑盒测试方法论—等价类
    技术分享 | 这些常用测试平台,你们公司在用的是哪些呢?
    干货 | 测试专家(前阿里P8)聊测试职业发展常见瓶颈
    如何做好测试开发?| 破解测试人技术成长常见的 3 种错误思维!
    技术分享 | 黑盒测试方法论—因果图
  • 原文地址:https://www.cnblogs.com/fengyutech/p/4918315.html
Copyright © 2020-2023  润新知