FTP文件传输服务

Posted 醉人与轩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP文件传输服务相关的知识,希望对你有一定的参考价值。

一、FTP文件传输服务 
1、FTP的作用和特点 
    1)FTP的作用 
        支持使用局域网或者广域网上传下载数据
    2)FTP特点 
        传输速度快
        传输不受限制
        使用广泛
        安全性强
2、FTP服务端口和连接模式
    1)FTP服务的端口号
        21:控制连接端口,身份验证授权资源访问
        20:数据连接端口,用于上传或者下载数据
    2)FTP连接模式 
        主动模式:服务器使用20号端口向客户端发起连接,传输数据使用
        被动模式:服务器打开指定的端口等待客户端连接
3、FTP传输模式 
    1)文本模式
        传输文本文件
    2)二进制模式
        使用广泛 
        传输音频视频文本文件
4、FTP验证类型
    1)匿名验证
        访问FTP服务器不需要输入账户密码
        客户端使用anonymous进行身份验证
    2)本地账户验证
        使用系统账户验证
        访问FTP需要输入账户密码访问资源
    3)虚拟账户
        多个虚拟账户使用一个系统账户进行身份验证
        灵活性强
        方便扩展验证账户
5、FTP服务器端和客户端
    1)FTP服务器端 
        IIS:Windows平台使用支持网站和FTP功能
        Serv -v:Windows平台使用,可以在服务器端或者客户端系统运行
        vsftpd:Linux服务器使用的ftp服务器端,开源程序
    2)FTP客户端 
        ftp命令:Windows、Linux系统都可以使用
        flashFXP:客户端程序,Windows平台使用
二、配置FTP服务器
1、安装vsftpd服务
    1)安装服务器端
        [root@centos01 ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
    2)安装客户端 
        [root@centos01 ~]# rpm -ivh /mnt/Packages/ftp-0.17-67.el7.x86_64.rpm 
    3)设置开机自动启动
        [root@centos01 ~]# systemctl enable vsftpd
2、ftp主配置文件常见的配置选项
    1)匿名用户配置选项
        anonymous_enable=YES                //开启命令身份验证
        anon_upload_enable=YES                //允许匿名上传数据
        anon_mkdir_write_enable=YES            //用于匿名创建目录和写入权限
        anon_other_write_enable=YES         //允许写入、删除、重命名权限
        anon_root=/benet                    //修改匿名访问FTP根目录            
        anon_umask=022                        //文件权限644,目录权限755
    2)本地账户ftp选项
        local_enable=YES                    //允许本地系统用户访问
        local_umask=022                        //本地账户上传文件或者目录反码
        local_root=/benet                    //本地账户ftp根目录
        chroot_local_user=YES                //禁锢ftp根目录
        local_max_rate=0                    //不限传输速率
    3)ftp全局配置文件
        write_enable=YES                    //允许写入权限 
        listen=NO                            //是否独立运行监听服务
        pam_service_name=vsftpd                //pam验证 
        userlist_enable=YES                    //启用user list列表
        userlist_deny=YES                    //user list列表中的用户进制登录
        listen_address=192.168.100.10        //ftp服务器监听IP地址
        listen_port=21                        //FTP服务器监听端口
        tcp_wrappers=YES                    //开启FTP限制功能
        xferlog_enable=YES                    //开启FTP日志功能
        connect_from_port_20=YES            //开启FTP主动模式
        pasv_enable=YES                        //开启被动模式
        pasv_min_port=2500                    //开始端口
        pasv_max_port=2600                    //结束端口
        max_clients=0                        //客户端连接最大并发
        max_per_ip=0                        //允许同一个客户端地址链接次数
3、配置匿名访问FTP
    1)修改主配置文件
        anonymous_enable=YES
        anon_root=/benet
        anon_upload_enable=YES
        anon_umask=022
    2)创建ftp访问根目录设置数据
        [root@centos01 ~]# mkdir /benet
        [root@centos01 ~]# echo "bbb" > /benet/b.txt
    3)设置目录写入权限
        [root@centos01 ~]# chmod o+w /benet/
    4)重新启动ftp服务 
        [root@centos01 ~]# systemctl restart vsftpd
4、配置本地账户FTP
    1)创建FTP身份验证账户 
        [root@centos01 ~]# useradd bob
        [root@centos01 ~]# useradd tom
        [root@centos01 ~]# groupadd benet
        [root@centos01 ~]# gpasswd -M bob,tom benet
    2)修改主配置文件 
        [root@centos01 ~]# vim /etc/vsftpd/vsftpd.conf
        local_enable=YES
        local_root=/benet
        chroot_local_user=YES
        local_umask=022
    3)创建ftp根目录设置所有者
        [root@centos01 ~]# mkdir /benet
        [root@centos01 ~]# chown root:benet /benet/
4、配置虚拟账户FTP
    1)创建虚拟账户密码配置文件
        [root@centos01 ~]# vim /etc/vsftpd/vusers
        bob
        pwd@123
        tom
        pwd@1234
        alice
        pwd@12345
    2)生成验证数据库名字是vusers.db 
        [root@centos01 ~]# db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db
    3)配置pam验证
        [root@centos01 ~]# vim /etc/pam.d/vsftpd.vu
        #%PAN-1.0
        auth            required        pam_userdb.so           db=/etc/vsftpd/vusers
        account         required        pam_userdb.so           db=/etc/vsftpd/vusers
    5)创建系统账户映射到虚拟账户指定ftp根目录设置权限
        [root@centos01 ~]# useradd -d /ftproot -s /sbin/nologin virtual
        [root@centos01 ~]# chmod 755 /ftproot/
    6)修改vsftpd主配置文件支持虚拟账户ftp 
        [root@centos01 ~]# vim /etc/vsftpd/vsftpd.conf
        local_enable=YES                                    //开启本地身份验证        
        write_enable=YES                                    //全局写入权限
        anon_umask=022                                        //虚拟账户上传反码
        chroot_local_user=YES                                //锁定ftp根目录
        allow_writeable_chroot=YES                            //允许虚拟账户宿主目录写入权限
        user_config_dir=/etc/vsftpd/vsftpd_dir                //存储虚拟账户权限文件目录
        pam_service_name=vsftpd.vu                            //加载pam验证文件
        guest_enable=YES                                    //开启虚拟账户验证功能
        guest_username=virtual                                //虚拟账户映射到系统账户
    7)创建用户权限配置文件 
        [root@centos01 ~]# mkdir /etc/vsftpd/vsftpd_dir
    8)设置bob完全控制权限
        [root@centos01 ~]# vim /etc/vsftpd/vsftpd_dir/bob
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES
    9)设置tom用户拥有上传权限
        [root@centos01 ~]# vim /etc/vsftpd/vsftpd_dir/tom
        anon_upload_enable=YES
    10)alice拥有下载权限
        [root@centos01 ~]# touch /etc/vsftpd/vsftpd_dir/alice

ftp概述
ftp是一种应用层协议
结构为C/S结构设计
为用户提供上传和下载文件的服务
适用于局域网和互联网

ftp端口
控制连接 TCP.21,用于发送ftp命令信息
数据连接 TCP.20,用于上传,下载数据

数据连接建立类型
主动模式,服务从端口20主动向客户端发起连接
被动模式,服务端在指定范围内某个端口被动等待客户端连接

传输模式
文本模式,ASCII模式,以文本序列传输数据
二进制模式,Binary模式,以二进制序列传输数据

ftp用户类型
匿名用户    本地用户      虚拟用户

ftp相关文件
/etc/vsftpd/ftpusers       黑名单
/etc/vsftpd/user_list      花名册 
userlist_enable=YES时,则启用/etc/vsftpd/user_list 文件的用户列表
userlist_deny=YES  禁止/etc/vsftpd/user_list 文件的用户列表登录ftp
userlist_deny=NO   仅允许/etc/vsftpd/user_list 文件的用户列表登录ftp

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

匿名用户
    anonymous_enable=YES     是否允许匿名用户访问
    anon_umask=022            设置匿名用户上传文件的权限掩码值
    anon_root=/var/ftp      设置匿名用户的FTP根目录,默认为/var/ftp/
    anon_upload_enable=YES   是否允许匿名用户上传文件
    anon_mkdir_write_enable=YES    是否允许匿名用户有创建目录的写入权限
    anon_other_write_enable=YES    是否允许匿名用户有其他写入权限,如文件改名,覆盖及删除
    
本地用户
    local_enable=YES    是否允许本地系统用户访问
    local_umask=022        设置本地用户上传文件的默认权限掩码值
    local_root=var/ftp    设置本地用户的FTP根目录,默认为用户的宿主目录
    chroot_local_user=YES   是否将FTP本地用户禁锢在宿主目录中
    local_max_rate=0     限制本地用户的最大传输速率(0为无限制),单位,字节
    
全局配置
    listen=YES         是否以独立运行的方式监听服务
    listen_address=0.0.0.0    设置监听FTP服务的IP地址
    listen_port=21        设置监听FTP服务的端口号
    wirte_enable=YES    启用任何形式的写入权限都需要开启此项
    download_enable=YES  是否允许下载文件(建立仅限于浏览,上传的FTP服务器可设为NO
    dirmessage_enable=YES   用户切换进入目录时显示.message文件的内容
    xferlog_enable=YES      启用xferlog日志,默认记录到/var/log/xferlog
    xferlog_std_fount=YES   启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自己的日志格式
    connect_from_port_20=YES   允许服务器主动模式
    pasv_enable=NO       禁止被动模式连接;默认允许
    pasv_max_port=24600     设置用于被动模式的服务器最大端口号
    pasv_min_port=24500      设置用于被动模式的服务器最小端口号
    pam_service_name=vsftpd    设置用于用户认证的PAM文件位置(/etc/pam.d目录中对应的文件名)
    userlist_enable=YES      是否启用user_list用户列表文件
    userlist_deny=YES       是否禁止user_list列表文件的用户账号
    max_clients=0           最大允许多少给各户端同时连接,0为无线制
    max_per_ip=0          对来自同一个IP的客户端,最多允许多少给并发连接,o为无限制
    tcp_wrappers=YES     是否启用TCP_Wrappers主机访问控制
    
匿名访问ftp
1.挂载光盘
    [root@centos01 ~]# mount /dev/cdrom /mnt/
2.安装ftp
    [root@centos01 ~]# yum -y install vsftpd
3.创建测试文件
    [root@centos01 ~]# tar zcf /var/ftp/vsftpdconf.tar.gz /etc/vsftpd
4.更改/var/ftp/pub/的属主和权限
    [root@centos01 ~]# chown ftp /var/ftp/pub/
    供匿名用户访问ftp时上传文件使用
    [root@centos01 ~]# chmod 755 /var/ftp/pub/
    [root@centos01 ~]# ll -d /var/ftp/pub/
5.修改主配置文件
    local_enable=NO                                               是否允许本地系统用户访问
    anon_umask=022                                                    设置匿名用户上传文件的权限掩码值
    anon_upload_enable=YES(启用去#)                                    是否允许匿名用户上传文件
    anon_mkdir_write_enable=YES(启用去#)                              是否允许匿名用户有创建目录的写入权限
    listen=YES                                                           是否以独立运行的方式监听服务
    listen_ipv6=NO                               
完整的配置为
    anon_umask=022
    anonymous_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    userlist_enable=NO
    userlist_deny=NO
    write_enable=YES

local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
6.启动服务
    [root@centos01 ~]# systemctl start vsftpd
    查看vsftpd的端口信息
    [root@centos01 ~]# netstat -anpt | grep vsftpd
7.客户端验证
  挂载镜像
[root@centos02 ~]# mount /dev/cdrom /mnt/
    安装客户端ftp
    [root@centos02 ~]# yum -y install ftp
    
    访问
    [root@centos02 ~]# ftp 192.168.100.10
Connected to 192.168.100.10 (192.168.100.10).
220 (vsFTPd 3.0.2)
Name (192.168.100.10:root): ftp
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 (192,168,100,10,237,65).
150 Here comes the directory listing.
drwxr-xr-x    2 14       0               6 Aug 03  2017 pub
-rw-r--r--    1 0        0            2793 Jun 01 15:36 vsftpdconf.tar.gz
226 Directory send OK.
ftp> 
get 下载    put  上传
wget ftp://192.168.4.11/vsftpdconf.tar.gz  不用访问ftp服务器也可以下载
ftp user1:pwd123@192.168.100.10
本地用户访问    它的ftp根目录是用户自己的宿主目录
vi /etc/vsftpd/vsftpd.conf
    local_enable=YES                                                 是否允许本地系统用户访问
    write_enable=YES                                                 启用任何形式的写入权限都需要开启此项
    local_umask=022                                                  设置匿名用户上传文件的权限掩码值
    chroot_local_user=YES                                          是否将FTP本地用户禁锢在宿主目录中
    listen=YES                                                       是否以独立运行的方式监听服务
    listen_ipv6=NO                                                 
    allow_writeable_chroot=YES(需手动添加)                                  允许被限制用户的主目录具有写权限
ok

更改监听端口号
    listen=YES              允许独立监听服务
    listen_address=192.168.100.20      指定地址本·服务器地址
    listen_port=2121             监听端口更改为2121
    ok
访问时要带端口号    ftp 192.168.100.20 2121

允许使用ftp的被动模式
    vi /etc/vsftpd/vsftpd.conf
    pasv_min_port=24500           指定被动模式的下限端口         1024(默认范围)
    pasv_max_port=24600           指定被动模式的上限端口         65535(默认范围)
  
限制并发数,传输速度
    vi /etc/vsftpd/vsftpd.conf    
    max_client=20                                       限制并发客户连接最多20个     最多20个人连接ftp
    max_per_ip=2                                        限制每个IP地址的连接数最多2个    每个人最多连接2个
    local_max_rate=200000                                限制本地用户传输速率为200kB/s    
ok

构建基于虚拟用户的ftp服务
1.创建文本格式的用户名,密码列表
    [root@centos02 user1]# vim /etc/vsftpd/vusers.list
    mike
    123
    john
    456
2.创建Berkeley DB格式的数据库文件
    [root@centos02 vsftpd]# db_load -T -t hash -f vusers.list vusers.db      
    -T 允许文本格式转换成DB格式的数据库文件  -t 指定读取数据文件的基本方法  -f 指定数据文件
    file vusers.db    查看转换后的文件类型
3.设置文件权限,避免数据外泄
    [root@centos02 vsftpd]# chmod 600 /etc/vsftpd/vusers.*
    [root@centos02 vsftpd]# ll  /etc/vsftpd/vusers.*
4.添加用户映射账号,创建ftp根目录
    [root@centos02 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
    [root@centos02 vsftpd]# chmod 755 /var/ftproot/      调整权限以允许浏览目录
5.为虚拟用户建立PAM认证文件
    [root@centos02 vsftpd]# vim /etc/pam.d/vsftpd.vu
    #%PAM-1.0
    auth    required        pam_userdb.so   db=/etc/vsftpd/vusers
    account required        pam_userdb.so   db=/etc/vsftpd/vusers
6.修改主配置文件

    local_enable=YES                   是否允许本地系统用户访问
    write_enable=YES                   启用任何形式的写入权限都需要开启此项
    anon_umask=022  (需手动添加)                    指定上传权限掩码
    guest_enable=YES (需手动添加)                   启用来宾用户访问
    guest_username=virtual (需手动添加)              指定映射的系统用户
    pam_service_name=vsftpd.vu (需手动添加)           指定pam认证文件
    allow_writeable_chroot=YES (需手动添加)          允许被限制用户的主目录具有写权限
完整的配置为
    guest_enable=YES
    guest_username=zhuxiang
    pam_service_name=vsftpd.vu
    local_enable=YES
    allow_writeable_chroot=YES
    local_umask=077
    chroot_local_user=YES
    write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    tcp_wrappers=YES
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd/vuser_dir

7.创建测试文件
    [root@centos02 vsftpd]# cd /var/ftproot/
    [root@centos02 ftproot]# touch 11
    [root@centos02 ftproot]# touch 111
    [root@centos02 ftproot]# touch 1111
    [root@centos02 ftproot]# touch 11111
    [root@centos02 ftproot]# touch 111111

8,为虚拟用户建立配置文件
    [root@centos02]# mkdir /etc/vsftpd/vusers_dir
    [root@centos02]# cd /etc/vsftpd/vusers_dir
    [root@centos02 vusers_dir]# vi john
    anon_upload_enable=YES                      允许上传文件
    anon_mkdir_write_enable=YES                   允许创建目录
    touch mike
1,FTP服务器默认采用TCP什么端口与客户端进行通信?
20,21
2,简述FTP服务器中主动传输与被动传输的区别?
主动模式,服务从端口20主动向客户端发起连接
被动模式,服务端在指定范围内某个端口被动等待客户端连接
3,简述vsftpd服务器中用户列表文件ftpusers与user_list的作用和区别?
user_list      花名册 
ftpusers       黑名单
4,vsftpd.conf文件中的anon_other_write_enable配置项的作用是什么?
是否允许匿名用户有其他写入权限
5,简述配置vsftpd使用虚拟用户的基本过程?
创建文本格式的用户名,密码列表
创建Berkeley DB格式的数据库文件
设置文件权限,避免数据外泄
添加用户映射账号,创建ftp根目录
为虚拟用户建立PAM认证文件
修改主配置文件
为虚拟用户建立配置文件
6,vsftpd.conf文件中chroot_local_user配置项的作用是什么?
是否将FTP本地用户禁锢在宿主目录中
7,依次执行什么操作后vsftpd服务器只允许lava.avnko,hunter这三个用户登录?
1,vi /etc/vsftpd/user_list
laya
vankl
hunter
2,vi /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO
3,systemctl restart vsftpd
8,vsftpd.conf文件中listen_address与listen_port配置项的作用是什么?
设置监听FTP服务的IP地址
设置监听FTP服务的端口号
9,在vsftpd.conf文件中添加什么配置项可以设置并发客户连接最多20个?
max_clients=20
10,在linux操作系统中执行db_load -T hash -f vusers,list vusers.db命令的作用是什么?
创建Berkeley DB格式的数据库文件

以上是关于FTP文件传输服务的主要内容,如果未能解决你的问题,请参考以下文章

Vsftpd文件传输服务(本地用户访问)

宿主机Windows访问虚拟机Linux文件

FTP文件传输原理

FTP?文件传输服务

FTP文件传输服务

linux批量下载FTP服务器文件