FTP文件传输协议 | NFS网络文件系统

214 阅读12分钟

1、 存储类型

存储类型分为三种:

  1. DAS:直连式存储(比较古老)
  2. SAN:存储区域网络(SAN比较复杂,且成本很高,大型公司会用到)
  3. NAS:网络附加存储(NAS是最常用的,类似百度网盘)
分类DASNASSAN
传输类型SCSI、FCIPIP、FC、SAS
数据类型数据块文件数据块
典型应用任何文件服务器数据库应用
优点磁盘与服务器分离;便于统一管理不占用应用服务器资源;广泛支持操作系统;扩展较容易;即插即用,安装简单方便高扩展性;高可用性;数据集中,易管理
缺点连接距离短;数据分散,共享困难;存储空间利用率不高;扩展性有限不适合存储量大的块级应用;数据备份及恢复占用网络带宽相比NAS成本较高;安装和升级比NAS复杂

image.png

小拓展:协议和端口号

协议端口号
ftp20、21
ssh22
http80
https443
telnet23
mysql3306
redis6379

2、FTP 文件传输协议

FTP是明文传输,基于c/s(客户端、服务端)结构 。

FTP有两个端口:

  • 20是数据端口, 传输真实数据;
  • 21是命令端口, 主要用来验证权限、认证,和一些基本信息的传递。

小拓展:FTP是协议,协议的最终体现形式是软件。FTP对应的软件有很多,比如:vsftpd、filezilla…

2.1 主动模式和被动模式

两种模式:(针对服务器)

  • 主动模式:

    • 首先 客户机 会随机产生一个端口号,主动去连接 服务器的 tp21端口
    • 如果 服务器是主动模式 那么服务器会开启 20端口 和客户端相连
    • 最后再传输真实数据

image.png

  • 被动模式:

    • 客户机 会随机产生一个端口号,主动去连接 服务器的 tcp21端口
    • 如果服务器是 被动模式,那么服务器会产生一个随机的端口号,被动等待客户机来连接
    • 最后再传输真实数据(这个随机端口号是通过tcp 21端口,知会给客户机的)

image.png

2.2 用户认证:

  • 匿名用户:ftp、anonymous,匿名用户共享文件位置:/var/ftp
  • 系统用户:Linux用户、用户/etc/passwd、密码/etc/shadow(不允许超级管理员登录)
  • 虚拟用户:特定服务的专用用户,独立的用户/密码文件

2.3 vsftpd软件

vsftpd是 very secure FTP daemon的缩写,意思是非常安全、高速稳定

vsftpd是centos默认的ftp软件

类型位置
配置文件/etc/vsftpd/vsftpd.conf
用户认证配置文件/etc/pam.d/vsftpd

2.3.1 vsftpd的客户端和服务端软件

  • 服务端:vsftpd //安装了服务端,客户端也会自动安装
  • 客户端:ftp
 `服务端`
 [root@localhost ~]#  systemctl stop firewalld
 [root@localhost ~]#  setenforce 0
 [root@localhost ~]#  yum install vsftpd -y
 [root@localhost ~]#  systemctl start vsftpd   //开启
 [root@localhost ~]#  ss -natp |grep vsftpd    //查看端口号
 LISTEN     0      32          :::21                      :::*                   users:(("vsftpd",pid=11179,fd=4))   //首先打开的是21端口
 ​
 `客户端`
 [root@localhost ~]#  ftp 192.168.125.130   //客户端连接服务端
 Connected to 192.168.125.130 (192.168.125.130).
 220 (vsFTPd 3.0.2)
 Name (192.168.125.130: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,125,100,183,24).
 150 Here comes the directory listing.
 drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
 ftp> cd pub
 250 Directory successfully changed.
 ftp> pwd
 257 "/pub"   //注意: /pub的/不是服务端或者客户端的根,而是服务端ftp软件的根,即 /var/ftp

2.3.2 常见的FTP命令

命令含义
get下载
put上传
在本机使用命令

image.png

 ftp> help   //可以使用help  查看帮助
 ​
 ​
 ftp> ls    //可以使用 ls  查看文件列表
 227 Entering Passive Mode (192,168,125,100,225,36).
 150 Here comes the directory listing.
 -rw-r--r--    1 0        0               0 May 05 14:28 1234
 drwxr-xr-x    8 0        0            2048 Sep 05  2017 centos7
 drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
 226 Directory send OK.
 ​
 ​
 ftp> passive     //被动的、消极的,  人为指定被动模式,默认使用消极模式
 ​
 ​
 ftp> get 1234     //从服务端 下载1234文件
 local: 1234 remote: 1234
 227 Entering Passive Mode (192,168,125,100,97,138).
 150 Opening BINARY mode data connection for 1234 (0 bytes).
 226 Transfer complete.

2.4 vsftpd常见配置

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

注意:systemctl restart vsftpd 改完配置文件一定记得重启!!!

 anonymous_enable=YES    //允许匿名用户登录
 local_enable=YES       //允许本地用户登录
 local_umask=022        //权限,umask是022
 xferlog_file=/var/log/xferlog     //日志存放位置

2.4.1 修改默认端口号

listen_port=端口号 端口号 默认为21

示例:

 服务端:
 [root@localhost ~]#  vim /etc/vsftpd/vsftpd.conf
     listen_port=9527  //修改配置文件
 [root@localhost ~]#  systemctl restart vsftpd   //重启
 [root@localhost ~]#  ss -natp |grep vsftpd    //过滤端口号
 LISTEN     0      32          :::9527                    :::*                   users:(("vsftpd",pid=11787,fd=4))
 ESTAB      0      0       ::ffff:192.168.125.130:9527                ::ffff:192.168.125.140:33154               users:(("vsftpd",pid=11790,fd=2),("vsftpd",pid=11790,fd=1),("vsftpd",pid=11790,fd=0),("vsftpd",pid=11788,fd=2),("vsftpd",pid=11788,fd=1),("vsftpd",pid=11788,fd=0))
 ​
 ​
 客户端:
 [root@localhost ~]#  ftp 192.168.125.130 9527   //指明端口号,注意端口号前不加选项port !
 Connected to 192.168.125.130 (192.168.125.130).
 220 (vsFTPd 3.0.2)
 Name (192.168.125.130:root): ftp
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.

2.4.2 时间

时间很重要~

 use_localtime=YES 使用当地时间
 格林威治时间比北京时间晚8个小时

2.4.3 匿名用户登录

 anonymous_enable=YES 支持匿名用户,CentOS8 默认不允许匿名
 no_anon_password=YES 匿名用户略过口令检查 , 默认NO

2.4.4 匿名用户上传

客户机上传文件到 服务器的位置:/var/ftp

 上传需要设置两部分:
 #第一部分:
 anon_upload_enable=YES 匿名上传,注意:文件系统权限
 anon_mkdir_write_enable=YES 匿名建目录
 ​
 #第二部分:权限
 允许匿名用户有读写权限
 注意:/var/ftp 根目录不允许有最大权限,否则会登录不上。
 ###服务机###
 [root@localhost ftp]#  vim /etc/vsftpd/vsftpd.conf
 anon_upload_enable=YES
 anon_mkdir_write_enable=YES
 [root@localhost ftp]#  systemctl restart vsftpd
 [root@localhost ftp]#  cd /var/ftp/pub
 [root@localhost pub]#  chmod 777 /var/ftp/pub
 ​
 ​
 ###客户机###
 [root@localhost mnt]#  ftp 192.168.125.130
 Connected to 192.168.125.130 (192.168.125.130).
 220 (vsFTPd 3.0.2)
 Name (192.168.125.130:root): ftp
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> cd /var/ftp/pub         //注意:此为错误❌示范,put上传文件时,不能出现绝对路径!!!
 550 Failed to change directory.
 ftp> cd pub                 //正确示范,要使用相对路径!
 250 Directory successfully changed.
 ftp> put abc
 local: abc remote: abc
 227 Entering Passive Mode (192,168,125,130,22,61).
 150 Ok to send data.
 226 Transfer complete.
 ftp> ls
 227 Entering Passive Mode (192,168,125,130,251,191).
 150 Here comes the directory listing.
 -rw-------    1 14       50              0 May 07 19:28 abc      //上传成功
 226 Directory send OK.

思考:远程用户是否可写,和什么有关?

  • 软件配置
  • 登录用户的权限

2.4.5 匿名用户下载、删除文件

  • 下载get 要有可读r 权限
  • 上传put 要有可写w 权限
 anon_world_readable_only=NO  //只能下载全部读的文件, 默认YES
 anon_umask=0333              //指定匿名上传文件的umask,默认077,注意:0333中的0不能省略!!!
 anon_other_write_enable=YES  //可删除和修改上传的文件,默认NO

// 权限:666-333=333,出现奇数自动加1,也就是444

示例:

 客户机:
 [root@localhost mnt]#  ftp 192.168.125.130
 Connected to 192.168.125.130 (192.168.125.130).
 220 (vsFTPd 3.0.2)
 Name (192.168.125.130:root): ftp
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> cd pub     //切换到pub,使用相对路径
 250 Directory successfully changed.
 ftp> get cba   //下载
 local: cba remote: cba
 227 Entering Passive Mode (192,168,125,130,88,6).
 150 Opening BINARY mode data connection for cba (0 bytes).
 226 Transfer complete.
 ftp> ls
 227 Entering Passive Mode (192,168,125,130,38,120).
 150 Here comes the directory listing.
 -rw-------    1 14       50              0 May 07 19:28 abc
 -rw-r--r--    1 0        0               0 May 07 19:50 cba   //下载成功
 ​
 ftp> delete abc    //删除
 250 Delete operation successful.
 ftp> ls
 227 Entering Passive Mode (192,168,125,130,212,236).
 150 Here comes the directory listing.
 -rw-r--r--    1 0        0               0 May 07 19:50 cba   
 //删除成功
 ​
 注意:get和put 不支持对目录文件进行下载和上传,必须先使用tar命令将目录进行归档压缩,之后才能下载或上传。

2.4.6 指定匿名用户的上传文件的默认的所有者和权限

匿名用户上传文件默认的所有者是ftp 用户 是可以修改的

 chown_uploads=YES        #默认NO
 chown_username=zhangsan
 chown_upload_mode=0644

2.5 禁锢

禁锢所有系统用户在家目录中

 chroot_local_user=YES #禁锢系统用户,默认NO,即不禁锢
 ​
 注意:所有用户的 家目录权限需要修改
 例如:chmod 500 /home/lisi/

小拓展:

1、vim编辑器中查看是否有空格:set list

2、udp53是用来解析、tcp53是用来主从复制

排错总结:\color{red}{排错总结:}

  • ftp中不支持绝对路径
  • umask中0333的0不能省略
  • 根目录不允许有最大权限

3、NFS

3.1 NFS简介

NFS是网络文件系统,是基于RPC(远程控制调用)实现的,两个软件相结合。

NFS和RPC是有强依赖关系。 RPC采用c/s架构 客户端和服务端

NFS的端口号都是随机产生。

image.png

NFS优势:节省本地存储空间。

3.2 NFS软件

软件包:nfs-utils (包含服务端和客户端相关工具)

依赖关系:rpcbind、tcp-wrappers

内核支持:nfs.ko

端口号:

  • nfs-utils:2049/tcp
  • rpcbind:111

共享文件格式:

  • 共享目录
  • 主机
  • 权限

3.3 NFS工具

3.3.1 exportfs

exportfs:可用于管理NFS导出的文件系统

常见选项:

 -v  #查看本机所有NFS共享
 -r  #重读配置文件,并共享目录
 -a  #输出本机所有共享
 -au #停止本机所有共享

3.3.2 showmount

常见用法:

 showmount -e hostname  
 ​
 [root@centos7 ~]#showmount -e 10.0.0.8
 Export list for 10.0.0.8:
 /data/wordpress *

3.3.3 mount.nfs

客户端NFS挂载

NFS相关的挂载选项:man 5 nfs

 fg     #(默认)前台挂载
 bg     #后台挂载
 hard   #(默认)持续请求
 soft   #非持续请求
 intr   #和hard配合,请求可中断
 rsize  #和wsize 一次读和写数据最大字节数,rsize=32768
 _netdev #无网络连接不挂载
 vers    #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0

3.4 配置文件格式

 默认选项:(ro,sync,root_squash,no_all_squash)
 ro,rw 只读(readonly)和读写
 async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性
 低
 sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
 ​
 ## 压榨squash
 root_squash (默认)远程root映射为nfsnobody,UID65534CentOS8 为nobody,CentOS 7以前的版本为nfsnobody
 no_root_squash 远程root映射成NFS服务器的root用户
 all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
 no_all_squash (默认)保留共享文件的UIDGID
 anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

3.5 实验一:

nfs服务端配置文件:/etc/exports

服务端192.168.125.130:

 [root@localhost ~]#  systemctl stop firewalld
 [root@localhost ~]#  setenforce 0
 [root@localhost ~]#  yum install nfs-utils.x86_64 -y
 [root@localhost ~]#  systemctl start nfs
 [root@localhost ~]#  mkdir /share
 [root@localhost ~]#  vim /etc/exports    //设置配置文件
 /share   * 或者 192.168.1.1  // *代表任意
 [root@localhost ~]#  systemctl restart nfs     //也可以使用exportfs  -r,重新读取配置
 [root@localhost ~]#  exportfs -v   //显示本机共享情况

客户端:

 [root@localhost ~]#  showmount -e 192.168.125.130   //可以看到对面服务器的共享目录
 [root@localhost ~]#  mount 192.168.125.130:/share       /mnt
 //挂载命令    对面的ip 冒号 文件夹   自己挂载的目录
 ​
 ####永久挂载####
 [root@localhost ~]#  vim /etc/fstab
 192.168.125.130:/share /mnt nfs    default,_netdev 0 0
                             nfs文件系统   权限:netdev意思是如果前面不通,就不挂
 [root@localhost ~]#  mount -a  //测试
 [root@localhost ~]#  df -h   //查看挂载信息,并显示单位

3.6 实验二:

实验目的:7-2与7-4 共享到7-3

实验环境:

  • 客户端:7-2:192.168.125.10 ;7-4:192.168.125.140

  • 服务端:7-3:192.168.125.130

实验流程:

 7-2:
 [root@localhost ~]#  systemctl stop firewalld
 [root@localhost ~]#  setenforce 0
 [root@localhost ~]#  yum install httpd -y
 [root@localhost ~]#  cd /var/www/html
 [root@localhost html]#  vim index.html
     test test
 [root@localhost html]#  systemctl start httpd
 ​
 7-4:
 [root@localhost ~]#  systemctl stop firewalld
 [root@localhost ~]#  setenforce 0
 [root@localhost ~]#  yum install httpd -y
 [root@localhost ~]#  cd /var/www/html
 [root@localhost html]#  vim index.html
     test test
 [root@localhost html]#  systemctl start httpd
 ​
 7-3:
 [root@localhost ~]#  yum install nfs-utils.x86_64 -y
 [root@localhost ~]#  curl 192.168.125.10    //查看7-2
 test test
 [root@localhost ~]#  curl 192.168.125.140   //查看7-4
 test test
 [root@localhost ~]#  mkdir /share
 [root@localhost ~]#  vim /etc/exports   //服务端配置
 [root@localhost ~]#  cd /share
 [root@localhost share]#  vim index.html
     this is test
 [root@localhost share]#  systemctl start nfs
 ​
 7-2:
 [root@localhost html]#  showmount -e 192.168.125.130
 Export list for 192.168.125.130:
 /share *
 [root@localhost html]#  mount 192.168.125.130:/share /var/www/html
 ​
 7-4:
 [root@localhost html]#  showmount -e 192.168.125.130
 Export list for 192.168.125.130:
 /share *
 [root@localhost html]#  mount 192.168.125.130:/share /var/www/html
 ​
 7-3:
 [root@localhost share]#  curl 192.168.125.10
 this is test
 [root@localhost share]#  curl 192.168.125.140
 this is test

排错总结:

  • 实验过程中,防火墙容易自启,可以经常查看一下,以防实验报错:

查看防火墙状态:systemctl status firewalld.service