• FTP服务初探


    FTP服务

    课程目标

    • 了解FTP服务器的应用场景

    • 了解FTP服务器的两种工作模式

    • 掌握FTP服务的基本配置

    • 能够根据需求对FTP进行访问控制

    一、FTP服务介绍

    FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。

    • 主要用于互联网中文件的双向传输(上传/下载)、文件共享

    • 跨平台 Linux、Windows

    • FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输

    • FTP的默认端口 21号(命令端口) 20号(数据端口) 默认被动模式下

    • FTP程序(软件)vsftpd

    二、开胃菜-搭建简易FTP服务器

    思路:

    • 关闭防火墙和selinux

    • 配置yum源

    • 软件三步曲(安装|确认|软件列表)

    • 了解配置文件——>(man 5 xxx.conf)

    • 根据需求通过修改配置文件来完成服务的搭建

    • 启动服务,开机自启动

    • 测试验证

    ​部署环境:我用的是3A网络,可以随时更换ip地址,适合小白。

    三、FTP服务的客户端工具

    Linux:ftp、lftp(客户端程序)

    Windows:FileZilla、IE、Chrome、Firefox

    lftp和ftp工具区别:

    • lftp可以批量并且下载目录

    lftp localhost:~> mirror remote local  下载整个目录到本地
    
    

    四、FTP服务的两种工作模式

    • 主动模式

    1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求

    2. 服务端的21号命令端口响应客户端的随机命令端口

    • 被动模式

    1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求

    2. 客户端主动连接服务端打开的大于1023的随机端口

    3. 服务端进行确认

    思考1:

    FTP的主动模式好还是被动模式好?

    五、FTP服务的基本配置

    1. FTP服务的基本应用

    默认安装:没有任何需求

    环境:

    node1:FTP-server 10.1.1.2

    node2:client 10.1.1.3

    步骤:

    1.1 关闭防火墙和selinux

    1.2 配置yum源

    1.3 软件三步曲

    • 安装软件 vsftpd

    • 确认安装成功

    [root@ftp-server ftp]# rpm -q vsftpd
    vsftpd-2.2.2-11.el6_4.1.x86_64
    • 查看软件带来的文件列表

    /etc/logrotate.d/vsftpd         //日志轮转的文件
    /etc/pam.d/vsftpd               //安全认证
    件
    /usr/sbin/vsftpd            //二进制命令
    ​
    ​
    /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS
    /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS/README    //虚拟主机
    /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS   
    /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README    //虚拟用户
    ​
    /usr/share/man/man5/vsftpd.conf.5.gz            //man文档
    录的扩展目录

    1.4 了解配置文件

    主配置文件:man 5 vsftpd.conf

    [root@ftp-server ~]# grep -v ^# /etc/vsftpd/vsftpd.conf 
    anonymous_enable=YES    //支持匿名用户访问  
    local_enable=YES        //非匿名用户
    write_enable=YES        //写总开关
    local_umask=022         //反掩码  file:644  dir:755
    
    ​
    pam_service_name=vsftpd //指定认证文件
    userlist_enable=YES     //启用用户列表
    tcp_wrappers=YES        //支持tcp_wrappers功能
    ​
    ​

    1.5 根据需求通过修改配置文件来完成服务的搭建

    没需求

    1.6 启动服务,开机自启动

    [root@ftp-server ~]# netstat -nltp|grep vsftpd
    tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      3534/vsftpd  

    1.7 测试验证

    clinet:

    Linux:
    [root@client ~]# lftp stu1@10.1.1.2
    Password: 
    lftp stu1@10.1.1.2:~> put install.log
    52124 bytes transferred                        
    lftp stu1@10.1.1.2:~> exit
    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): stu1
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (10,1,1,2,168,207).
    150 Here comes the directory listing.
    -rw-r--r--    1 500      500         52124 Apr 19 03:52 install.log
    -rw-rw-r--    1 500      500            12 Apr 19 03:51 test1
    226 Directory send OK.
    sec)
    ftp> ls
    227 Entering Passive Mode (10,1,1,2,92,62).
    150 Here comes the directory listing.
    -rw-r--r--    1 500      500         52124 Apr 19 03:52 install.log
    -rw-r--r--    1 500      500         10033 Apr 19 03:54 install.log.syslog
    -rw-rw-r--    1 500      500            12 Apr 19 03:51 test1
    226 Directory send OK.
    ftp> exit
    221 Goodbye.
    ​
    ​
    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): ftp
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    ​
    ​
    总结:
    1. ftp  默认使用用户名和密码登录    ——>ftp 或者匿名用户
    2. lftp 默认使用的匿名用户登录     ——> lftp 10.1.1.2:/> user username
                                  ——>lftp user@ip
                                  
    3. 工具不知道咋用  里面输入?或者 man ftp 和lftp

    总结:

    • 匿名用户可以下载文件但是不能上传文件

    • 本地用户可以上传和下载文件

    需求1:允许匿名用户上传文件

    [root@ftp-server vsftpd]# cat vsftpd.conf 
    anonymous_enable=YES
    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=YES
    
    ​
    测试验证:
    [root@client ~]# lftp 10.1.1.2
    lftp 10.1.1.2:~> ls
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file1
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file2
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file3
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file4
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file5
    drwxr-xr-x    2 0        0            4096 Mar 01  2013 pub
    lftp 10.1.1.2:/> put install.log
    put: Access failed: 553 Could not create file. (install.log)
    lftp 10.1.1.2:/> 
    原因:匿名用户的默认数据根目录/var/ftp没有写权限
    解决:
    chmod o+w /var/ftp
    ​
    解决后遇到另外一个问题:如下
    ​
    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): ftp
    331 Please specify the password.
    Password:
    500 OOPS: vsftpd: refusing to run with writable anonymous root
    Login failed.
    
    ​
    原因:/var/ftp数据目录权限太大  o+w  777
    解决:chmod o-w 
    ​
    最终想让匿名用户上传文件的解决办法是:
    1.在/var/ftp目录里自己创建一个数据目录或者直接将匿名用户的数据上传到pub目录
    2.将/var/ftp/pub目录权限给o+w 或者777
    ​
    ​
    ​

    需求2:下载其他匿名用户上传的文件

    anon_umask=022
    ​
    测试验证:
    [root@client ~]# lftp 10.1.1.2
    lftp 10.1.1.2:~> ls
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file2
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file3
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file4
    -rw-r--r--    1 0        0               0 Apr 19 02:45 file5
    -rw-------    1 14       50          52124 Apr 19 06:42 install.log
    drwxr-xrwx    2 0        0            4096 Apr 19 06:48 pub
      52124 Apr 19 06:48 install.log
    -rw-r--r--    1 14       50          10033 Apr 19 07:01 install.log.syslog
    //更改完anon_umask后,匿名用户上传的文件权限就变成了644,其他人就可以下载文件了
    lftp 10.1.1.2:/pub> 
    ​
    ​

    需求3:开启本地用户消息功能

    1)本地用户访问——>/home/username

    [root@ftp-server ~]# echo "welcome to my home" > /home/stu1/.message

    2)匿名用户访问——>/var/ftp

    [root@ftp-server ~]# echo "welcome to anon home" > /var/ftp/.message

    测试验证:

    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): stu1
    331 Please specify the password.
    Password:
    230-welcome to myhome
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> exit
    221 Goodbye.
    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): ftp
    
    ​

    另外一种情况:

    1. 修改配置文件指定消息文件
    banner_file=/etc/vsftpd/banner_file
    ​
    2. 创建消息文件
    vim /etc/vsftpd/banner_file
    ......
    ​
    3. 测试验证
    ​
    [root@client ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220-@@@@@@@@@@@
    220--------         -------
    220-
    220-哈哈哈哈h
    220-嘿嘿嘿
    220-
    220 
    Name (10.1.1.2:root): ftp
    331 Please specify the password.
    Password:
    230-welcome to anon home
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> 

    需求4:禁锢本地用户的家,只能在自己的家中活动

    1)禁锢所有的本地用户

    chroot_local_user=YES //禁锢所有的本地用户(不能随便跳转)

    2)禁锢大部分用户,允许小部分

    chroot_local_user=YES

    3)允许大部分,禁锢小部分

    chroot_local_user=NO 或者 # chroot_local_user=YES

    chroot_list_enable=YES //启用用户文件列表

    chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表

    需求5:指定匿名用户和本地用户上传文件的目录

    课堂练习:

    按照如下要求搭建一个ftp服务器:

    1)允许匿名用户上传文件,并且可以下载其他用户上传的文件

    mkdir /anon/data -p

    vim /etc/vsftpd/vsftpd.conf

    ...

    anon_root=/anon

    chmod o+w /anon/data

    3)本地用户上传的文件都保存到/local/data里

    默认:/home/username

    mkdir /local/data -p

    ...

    local_root=/local/data

    4)禁锢所有用户的家,不能来回跳转

    chroot_local_user=YES

  • 相关阅读:
    小白立创机械狗从零到成品总结
    OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)
    内切相减原理绘制CAD图形
    【Git】git快速入门,一文学会使用git常用命令与使用步骤
    Linux信号解析
    qt5.15 升级 qt 6.5 部分问题 解决修复
    基于C++实现简易语法分析程序
    未来已来:探索5G技术如何改变我们的生活和工作
    Linux安装和卸载JDK8详解
    网络黑客入门级工具:netwox
  • 原文地址:https://blog.csdn.net/m0_56221131/article/details/126229308