linux网络中的网络文件共享服务(FTP+NFS)

2023年 8月 14日 88.6k 0

存储类型及应用场景

存储类型分为三种

  • 直连式存储:Direct-Attached Storage,简称DAS

存储设备直接连接到服务器总线上,存储设备只与一台独立的主机连接,其他主机不能使用这个存储设备

  • 网络附加存储:Network-Attached Storage,简称NAS(存储和管理空间都在远程)

NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上,NAS是文件级的存储方法,通常也被叫做附加存储

  • 存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理)

存储区域网络,这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。

应用场景:

  • DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
  • NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
  • SAN则适用于大型应用或数据库系统,缺点是成本高、较为复杂

一.FTP文件传输协议

1.1FTP的工作原理

文件传输协议:File Transfer Protocol 早期的三个应用级协议之一,基于C/S结构

  • 数据传输格式:二进制(默认)和文本
  • 双通道协议:命令和数据连接 21 命令端口(账号的权限,认证等) 20 数据端口(数据传输)

1.2三种用户类型和两种工作模式

三种用户类型:

  • 匿名用户 :ftp,anonymous,对应Linux用户ftp
  • 系统用户:Linux用户,用户存放在/etc/passwd内,密码存放于影子文件/etc/shadow中
  • 虚拟用户:用于特定服务的用户。
  • 两种工作模式(从服务器角度出发):

  • 主动(PORT style):
  • 服务器主动连接客户端 命令(控制):客户端:随机port —> 服务器:21/tcp 数据:客户端:随机port 服务器:21/tcp 数据:客户端:随机port —> 服务器:随机port /tcp

    简单说就是服务端开启随机端口等待客户端连接,通过命令端口21,告知客户端开启了哪一个随机端口

    ftp2.png

    1.3 常见的FTP相关软件

    FTP服务器端软件

    Wu-ftpd,Proftpd,Pureftpd,Filezilla Server,Serv-U,Wing FTP Server,IIS等

    vsftpd:Very Secure FTP Daemon

    CentOS 默认的FTP服务器

    高速,稳定,下载速度是WU-FTP的两倍

    ftp.redhat.com数据:单机最多可支持15000个并发

    vsftpd官网: security.appspot.com/vsftpd.html

    2.vsftpd

    由 vsftpd 包提供,不再由xinetd管理

    用户认证配置文件:/etc/pam.d/vsftpd

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

    用户和其共享目录:

    匿名用户(映射为系统用户ftp)共享文件位置:/var/ftp

    系统用户:用户家目录

    虚拟用户:为其映射的系统用户的家目录

    2.1 vsftpd的基础操作

    2.11 安装服务

    安装完毕以后使用服务之前切记服务端和客户端的防火墙都需要关闭

    vsftpd1.png

    vsftpd2.png

    2.12 修改默认命令端口

    vsftpd3.png

    目前登录没有任何问题

    然后我们去服务器端修改默认端口(配置文件:/etc/vsftpd/vsftpd.conf)

    vsftpd4.png

    vsftpd5.png

    vsftpd6.png

    vsftpd7.png

    2.13 vsftp配置文件中的一些选项及说明

    主动模式端口
    connect_from_port_20=YES 主动模式端口为20
    ftp_data_port=20 (默认) 指定主动模式的端口
    ​
    被动模式端口
    pasv_min_port=6000   0为随机分配,端口范围会影响客户端的并发数
    pasv_max_port=6010
    ​
    -使用当地时间
    use_localtime=YES 使用当地时间(默认为NO,使用GMT)
    ​
    -匿名用户登录限制
    anonymous_enable=YES 支持匿名用户,CentOS8 默认不允许
    匿名
    no_anon_password=YES 匿名用户略过口令检查 , 默认NO
    ​
    -匿名用户上传
    anon_upload_enable=YES 匿名上传,注意:文件系统权限
    anon_mkdir_write_enable=YES 匿名建目录
    chmod   777   /var/ftp/pub
    # 注意需要开启文件系统访问的权限,
    #虽然能给FTP根目录写权限,但是一般是不对跟做操作多的,只能给下级子目录写权限
    #否则会以下报错
    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    Login failed.
    421 Service not available, remote server has closed connection
    ​
    匿名用户下删除文件
    anon_world_readable_only=NO  只能下载全部读的文件, 默认YES
    anon_umask=0333              指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
    anon_other_write_enable=YES  可删除和修改上传的文件,默认NO
    ​
    指定匿名用户上传文件的默认所有者和权限
    chown_uploads=YES        #默认NO
    chown_username=zhangsan
    chown_upload_mode=0644
    ​
    Linux系统用户
    local_enable=YES 是否允许linux用户登录
    write_enable=YES 允许linux用户上传文件
    local_umask=022 指定系统用户上传文件的默认权限对应umask
    ​
    使用系统用户登录是在系统用户的家目录下
    [root@localhost /]#ftp 192.168.1.100
    Connected to 192.168.91.100 (192.168.1.100).
    220 (vsFTPd 3.0.2)
    Name (192.168.1.100:root): zhangsan
    331 Please specify the password.
    Password:
    ftp> pwd
    257 "/home/zhangsan"
    #默认是可以上传下载的,也可以去别的目录下载
    ​
    让每个用户拥有独有配置
    user_config_dir=/etc/vsftpd/conf.d/ 
    //可以新建用户文件夹,存放用户的个性化配置
    [root@localhost /]#mkdir -p /etc/vsftpd/conf.d
    [root@localhost /]#vim  /etc/vsftpd/conf.d/zhangsan
    ​
    local_root=/home/zhangsan    //限制zhangsan只能在自己的家目录下操作
    ​
    禁锢系统用户
    #禁锢所有系统用户在家目录中
    chroot_local_user=YES //禁锢系统用户,默认NO,即不禁锢
    ​
    开启白名单黑名单
    chroot_list_enable=YES     //默认是NO
    chroot_list_file=/etc/vsftpd/chroot_list   //默认值
      
    当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
    当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单
    ​
    日志
    #ftp 默认启动日志
    //wu-ftp 日志:默认启用
    xferlog_enable=YES #启用记录上传下载日志,此为默认值
    xferlog_std_format=YES #使用wu-ftp日志格式,此为默认值
    xferlog_file=/var/log/xferlog #可自动生成, 此为默认值
    ​
    ​
    #vsftpd日志:默认不启用
    dual_log_enable=YES 使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log 可自动生成, 此为默认值
    ​
    限速
    [root@localhost /]#vim /etc/vsftpd/vsftpd.conf
    anon_max_rate=1024000    //匿名用户
    local_max_rate=10240000  //本地用户
    //限制用户下载速度1024000表示1m/s
    ​
    

    二、NFS

    1.NFS的概念

    NFS(Network File System 网络文件服务),是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。

    NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议,以完成远程到本地的映射过程。

    在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。

    2.NFS的原理及优缺点

    nfs1.png

  • 客户端请求:NFS 的客户端向 NFS 服务器发送文件访问请求。这可以是读取文件、写入文件或执行其他文件操作。
  • 访问协议:客户端使用 RPC(Remote Procedure Call)协议与服务器通信。客户端会发送特定的 RPC 调用来请求文件操作,如打开文件、读取文件或关闭文件。
  • NFS 服务端:NFS 服务器收到来自客户端的请求,并解析这些请求。服务器根据客户端请求的内容,在本地文件系统上执行相应的操作。
  • 文件传输:当服务器执行文件操作时,它会读取或写入相应的文件或目录。数据通过网络传输,从服务器发送到客户端或从客户端发送到服务器。
  • 返回结果:服务器完成请求后,会将执行结果返回给客户端。这可能包括成功的确认、文件内容、错误信息等。
  • nfs的优缺点:

    优点:

    节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用

    缺点:

    安全性较低

    PS:与FTP不同,FTP是普通的文件共享软件,而NFS 是文件系统,是操作系统内核来管理的

    3.NFS的软件介绍

    软件包:nfs-utils(包括服务器和客户端相关工具,CentOS8 最小化安装时默认没有安装)

    相关软件包:rpcbind(必须) ,tcp_wrappers

    Kernel支持:nfs.ko

    端口:2049(nfsd), 其它端口由portmap(111)分配

    PS:CentOS 6 开始portmap进程由rpcbind代替

    NFS服务主要进程:

    • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
    • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
    • rpc.lockd 非必要,管理文件锁,避免同时写出错
    • rpc.statd 非必要,检查文件一致性,可修复文件

    NFS相关文件:

    • 日志:

    /var/lib/nfs/

    • 配置文件:

    /etc/exports

    /etc/exports.d/*.exports

    3.1 NFS共享配置文件格式

    #文件路径
    /etc/eports 
    #文件内容
    /dir         主机1(opt,opt2)      主机2(opt,opt2,)
    ​
    #示例:
    vim /etc/exports
    /data            *              //允许所有,访问共享目录data
    共享文件夹   允许访问的主机(权限)
    

    可用通配符*表示所有客户端

    IP networks:两种掩码格式均支持

    例如:

    • 172.18.0.0/255.255.0.0
    • 172.18.0.0/16

    opt选项:

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

    exportfs

    exportfs:可用于管理NFS导出的文件系统
    常见选项
    -v #查看本机所有NFS共享
    -r #重读配置文件,并共享目录
    -a #输出本机所有共享
    -au #停止本机所有共享
    #exports配置常用参数
    #ro 只读
    #rw 读写
    #root_squash
    当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
    #no_root_squash
    当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
    #all_squash
    无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
    #sync
    同时将数据写入到内存与硬盘中,保证不丢失数据
    #async
    优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
    ​
    

    showmount

    常见用法:
    showmount -a #显示所有共享的目录
    showmount -e  #显示特定 NFS 服务器上的共享目录
    showmount -l #仅显示挂载点的主机名或IP地址
     
    [root@centos7 ~]#showmount -e 10.0.0.8
    Export list for 10.0.0.8:
    /data/wordpress *
    ​
    

    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
    ​
    

    开机挂载

    即在文件 /etc/fstab 添加配置

    ip:/public   /mnt/nfs   nfs   defaults,_netdev  0  0
    挂载的文件     挂载点    文件系统     
    ​
    

    实操:

    //服务端
    ​
    [root@localhost ftp]#cd /
    [root@localhost /]#mkdir test
    [root@localhost /]#cd /test
    [root@localhost test]#touch aaa
    [root@localhost test]#vim /etc/exports
    /test  *
    将test共享给所有主机
    ​
    [root@localhost test]#systemctl start nfs
    [root@localhost test]#systemctl start rpcbind
    [root@localhost test]#exportfs -v   //查看本机所有NFS共享
    /test           (sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
    [root@localhost test]#
    ​
    ​
    //客户端
    [root@localhost /]#systemctl start nfs
    [root@localhost /]#systemctl start rpcbind
    [root@localhost /]#mount 192.168.1.10:/test /mnt
    //将服务端的文件挂载过来
    [root@localhost /]#cd /mnt
    [root@localhost mnt]#ls
    aaa
    ​
    ​
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论