Linux 中实现文件传输服务(FTPSFTP)

Posted

tags:

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

????本文将介绍如何在Linux中实现文件传输,这里主要使用FTP、SFTP。

  • ????FTP

    ????废话少说,直接进入正题,需要注意,FTP采用Client/Server架构,并且有两个信道(控制信道、数据信道)。
    ????
    ????当Client发起连接时,目标端口为TCP/21 ,Server对其身份验证通过后,建立连接,也就是控制信道,此信道用于Client传输FTP指令,例如ls、cd、get、put, user等; 当Server收到指令后,在本端分析将结果传输至Client,注意此时传输的命令执行后的内容是需要另建连接,也就是数据信道
    ????
    根据数据信道发起者的身份不同分为,FTP将其分为主动模式、被动模式:
    ????
    1. 主动模式: Server端主动与Client建立连接。

技术分享图片

a. 控制信道建立: Client 与 Server建立三次握手后,Client将自己的地址、监听端口发送至Server , a , b ,c ,d 为IP地址,e*256+f 为端口。
b. 数据信道建立: Server主动发起连接,源端口TCP/20, 目标端口为Client发送的端口(e*256+f)。

?


?2. 被动模式:Server端随机生成一串数字作为Server端的端口等待客户端连接。

技术分享图片

a. 控制信道建立: Client与Server建立三次握手后,Client发送FTP指令PASV 表示采用被动模式,等待Server的地址(a,b,c,d)、端口信息(e*256+f)。
b. 数据信道建立: Client收到Server的地址、端口信息后,Client发起连接,源端口随机,目标端口e*256+f 。

  • vsftpd

    ????FTP仅是一种协议、规范,而vsftpd就是众多FTP协议、规范中的一种实现,其在安全方面较为优秀。

    
    1.通过YUM方式安装VSFTPD
            [[email protected] ~]# yum -y install vsftpd
    2.VSFTPD程序文件结构:
                        /etc/vsftpd/vsftpd.conf                               #主配置文件
                        /etc/vsftpd/ftpuser                                     #
                        /etc/vsftpd/user_list                                   #
                        /etc/pam.d/vsftpd                                      #FTP通过pam对用户进行认真
                        /var/ftp                                                      #默认vsftpd定义的共享目录      
    3.创建一个匿名FTP下载站点:
                /myftp/pub                                                         #共享目录,所有用户都可以创建、删除、修改
    ???????a.首先关闭防火墙、SELinux 避免影响实验 
                [[email protected] ~]# iptables -F 
                [[email protected] ~]# setenforce  0
    ????????b.创建相应目录并修改其权限:
                [[email protected] ~]$ mkdir -pv /myftp/{doc,pub}
                mkdir: created directory ‘/myftp’
                mkdir: created directory ‘/myftp/pub’
                [[email protected] ~]# cp /etc/fstab  /myftp/pub/
                [[email protected] ~]# chown -R ftp /myftp/ 
    ?????????c.修改配置文件
            [[email protected] ~]#  cp /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /etc/vsftpd/vsftpd.conf
                [[email protected] ~]# systemctl restart  vsftpd
    ???? d.  修改ftp用户的家目录,因为匿名用户实际上是访问映射至ftp用户的家目录。          
            [[email protected] ~]# vim /etc/passwd
            ftp:x:14:50:FTP User:/myftp:/sbin/nologin
    ????e.注意事项:
                    i. 匿名用户不能被chroot,否则会报错,如果不需要本地用户,建议如下配置:
                              chroot_local_user=NO
                              local_enable=NO
                   ii.自vsftpd 2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
                             Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
                             解决方法: 
                                             chmod a-w   /var/ftp  -R        去掉主目录的写权限或者添加指令允许写入
                                             allow_writable_chroot=YES
                    iii. anon_world_readable_only 指令,当值未YES时(默认),其他用户必须要对文件有读权限,才能下载;值为NO时,只要FTP用户有读权限即可下载。

以上是关于Linux 中实现文件传输服务(FTPSFTP)的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机中实现Linux与Windows之间的文件传输

文件传输协议FTPSFTP和SCP

如何使用 jabber net 在 c# Windows 应用程序中实现文件传输

LINUX随笔六 FTP端口限制和ftpsftp脚本连接

vue中实现文件上传下载的三种解决方案(推荐)

xshell中怎样实现windows和linux文件传输