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

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

   FTP

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

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

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

 


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

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

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

  • vsftpd

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

 1.经过YUM方式安装VSFTPD安全

[root@localhost ~]# yum -y install vsftpd

2.VSFTPD程序文件结构:架构

/etc/vsftpd/vsftpd.conf                               #主配置文件
/etc/vsftpd/ftpuser                                     #用于pam验证用户身份,拒绝其中用户访问
/etc/vsftpd/user_list                                   #用于vsftpd验证用户身份,默认拒绝其中用户
/etc/pam.d/vsftpd                                      #FTP经过pam对用户进行认真
/var/ftp                                                      #ftp用户的家目录,默认vsftpd定义的共享目录

3.建立一个匿名FTP下载站点:ide

/myftp/pub                                                         #共享目录,全部用户均可以建立、删除、修改
 a.  首先关闭防火墙、SELinux 避免影响实验 
     [root@localhost ~]# iptables -F 
     [root@localhost ~]# setenforce  0
  b.  建立相应目录并修改其权限:
        [root@localhost ~]$ mkdir -pv /myftp/{doc,pub}
        mkdir: created directory ‘/myftp’
        mkdir: created directory ‘/myftp/pub’
        [root@localhost ~]# cp /etc/fstab  /myftp/pub/
        [root@localhost ~]# chown -R ftp /myftp/        
   c.   修改配置文件
         [root@localhost ~]#  cp /etc/vsftpd/vsftpd.conf{,.bak} 
        [root@localhost ~]#  cp /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /etc/vsftpd/vsftpd.conf
         [root@localhost ~]# systemctl restart  vsftpd
    d.  修改ftp用户的家目录,由于匿名用户其实是访问映射至ftp用户的家目录。           
         [root@localhost ~]# vim /etc/passwd
        ftp:x:14:50:FTP User:/myftp:/sbin/nologin                                                      /
    e.  验证匿名ftp是否配置成功

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

   

注意事项:rest

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用户有读权限便可下载。

4.建立本地用户登录FTP站点code

要求: 关闭匿名共享、锁定用户家目录、仅容许tom、jerry两个本地用户登陆
    a. 修改配置文件 

    [root@node2 /]# vim /etc/vsftpd/vsftpd.conf
        anonymous_enable=NO  
        local_enable=YES
        write_enable=YES
        chroot_local_user=YES
        allow_writeable_chroot=YES
        userlist_enable=YES
        userlist_deny=NO

    [root@node2 /]# vim /etc/vsftpd/user_list 
        tom
        jerry

    [root@node2 /]# adduser -s /sbin/nologin  tom
    [root@node2 /]# adduser -s /sbin/nologin  jerry
    [root@node2 /]# adduser -s /sbin/nologin  dog

    [root@node2 /]# echo '123' | passwd --stdin tom
        Changing password for user tom.
        passwd: all authentication tokens updated successfully.
    [root@node2 /]# echo '123' | passwd --stdin jerry
        Changing password for user jerry.
        passwd: all authentication tokens updated successfully.
    [root@node2 vsftpd]# echo '123' | passwd --stdin dog
        Changing password for user dog.
        passwd: all authentication tokens updated successfully.
    [root@node2 /]# !sys
    systemctl restart vsftpd

    [root@node2 vsftpd]# touch  /home/tom/tom.file 
    [root@node2 vsftpd]# touch  /home/jerry/jerry.file

b.验证结果blog

tom、jerry用户都容许登陆访问。
Linux 中实现文件传输服务(一)
Linux 中实现文件传输服务(一)
匿名用户、dog用户不在user_list文件内,因此不容许访问。
Linux 中实现文件传输服务(一)
Linux 中实现文件传输服务(一)

相关文章
相关标签/搜索