热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NFS【文件共享】服务端配置和客户端使用详细说明【包含基于kerberos的nfs配置】

文章目录NFS(文件共享)关于NFS的基本配置和权限的设置服务端配置参数说明安装nfs服务防火墙设置挂载目录配置配置共享【权限见上面参数说明】客户端配置

文章目录

  • NFS(文件共享)
    • 关于NFS的基本配置和权限的设置
    • 服务端配置
      • 参数说明
      • 安装nfs服务
      • 防火墙设置
      • 挂载目录配置
      • 配置共享【权限见上面参数说明】
    • 客户端配置
      • 查看共享
      • 创建挂载路径
      • 挂载
      • 权限不够说明【root用户无法在共享文件中创建文件】
      • 特殊使用【仅一个ip可读写,其他为制度】
      • 权限测试
      • 卸载已挂载nfs文件
    • nfs自动挂载
    • 基于kerberos的NFS
      • 服务端配置
      • 客户端配置:


NFS(文件共享)

关于NFS的基本配置和权限的设置


  • NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS主要用于LInux与Linux之间进行文件系统共享。

  • 简单的来说:它就是是可以透过网络,让不同的主机、不同的操作系统可以共享存储。

  • NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。

  • NFS在文件传送或信息传送过程中依赖于RPC协议。RPC(Remote Procedure Call)远程过程调用 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

    • 需要安装的软件包:nfs-utils (NFS服务的主程序) 、 rpcbind (RPC服务的主程序)
    • 程序目录:/usr/lib/systemd/system/nfs-server.service 、 /usr/sbin/rpcbind
    • 服务器端nfs配置文件:/etc/exports
  • NFS的优势:

    • 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
    • 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
    • 一些存储设备CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

在这里插入图片描述
nfs相当于类unix之间一种文件的共享
只要编辑/etc/exports或者在/etc/exports.d/里创建一个后缀为exports的文件即可。
在这里插入图片描述

服务端配置


参数说明


  • exportfs命令
    一般格式: exportfs + 参数

    • 具体参数详解:
      • -a # 全部挂载(或卸载)/etc/exports文件内的设定。
      • -r # 重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容。
      • -u # 卸载某一目录。
      • -v # 在export时将共享的目录显示在屏幕上。
  • 关于NFS共享的常用参数

    • ro # 只读访问
    • rw # 读写访问
    • sync # 所有数据在请求时写入共享 【数据实时同步】
    • async # NFS在写入数据前可以相应请求
    • secure # NFS通过1024以下的安全TCP/IP端口发送
    • insecure # NFS通过1024以上的端口发送
    • wdelay # 如果多个用户要写入NFS目录,则归组写入(默认)
    • no_wdelay # 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
    • hide # 在NFS共享目录中不共享其子目录
    • no_hide # 共享NFS目录的子目录
    • subtree_check # 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
    • no_subtree_check # 和上面相对,不检查父目录权限
    • all_squash # 共享文件的UID和GID映射匿名用户
    • no_all_squash # 保留共享文件的UID和GID(默认)
    • root_squash # root用户的所有请求映射成如anonymous用户一样的权限(默认)
    • no_root_squash # root用户具有根目录的完全管理访问权限
    • anonuid=xxx # 指定NFS服务器/etc/passwd文件中匿名用户的UID
    • anongid=xxx # 指定NFS服务器/etc/passwd文件中匿名用户的GID

安装nfs服务


  • 如果你是最小化安装的系统,默认是没有nfs这个服务的,所以最小化安装的系统,需要先安装nfs服务: yum install -y nfs-u*
  • 安装完毕以后,把nfs-servcer 这个服务启动起来

[root@centos76_2 ~]# yum -y install nfs-u*
[root@centos76_2 ~]# systemctl start nfs-server.service
[root@centos76_2 ~]# systemctl is-active nfs-server.service
active
[root@centos76_2 ~]#

防火墙设置


  • 如果防火墙没有特别需求,直接关闭即可

[root@centos76_2 ~]# systemctl stop firewalld.service
[root@centos76_2 ~]# systemctl is-active firewalld.service
unknown
[root@centos76_2 ~]#

  • 如果防火墙有策略,就在防火墙中把nfs,rpc,mountd3个服务开放,并且/etc/exports目录是默认是没有任何东西的,如下图:
    在这里插入图片描述
  • selinux建议直接关掉

[root@centos76_2 ~]# setenforce 0
[root@centos76_2 ~]# getenforce
Permissive
[root@centos76_2 ~]#

挂载目录配置

配置一个用来共享的目录【如果使用现有目录,忽略这一步】,给共享目录下所有文件给一个w权限,否则无法写入文件,如下,我的共享目录为:/root/ccx,并新建了几个文件用来测试。

[root@centos76_2 ~]# mkdir /root/ccx
[root@centos76_2 ~]# cd /root/ccx/
[root@centos76_2 ccx]# mkdir file{1..3}
[root@centos76_2 ccx]# touch test{4..6}
[root@centos76_2 ccx]# ls
file1 file2 file3 test4 test5 test6
[root@centos76_2 ccx]#
[root@centos76_2 ccx]# chmod o+w /root/ccx/*
[root@centos76_2 ccx]#

配置共享【权限见上面参数说明】


  • 只需要编辑/etc/exports或者在/etc/exports.d/里创建后缀为exports的文件即可(建议使用前者)
  • 语法是:

# 客户端ip可以为单个ip,格式为: ip/掩码,也可以放开一个段,格式为: 192.168.59.0/24
# 如果掩码是24位,可以不用加,默认24位掩码
/共享目录 客户端1ip(权限a,权限b,权限c,...)客户端2ip(权限x,权限y,...)
#上述是一行写的,也可以分成多行写,如下:
/共享目录 客户端1ip(权限a,权限b,权限c,...)
/共享目录 客户端2ip(权限x,权限y,...)
#还有一种是对所有ip开放
/共享目录 *(权限a,权限b)

  • 配置流程

    • 1、把需要挂载的目录写到/etc/exports中,指定目录和共享目的ip
    • 2、exportfs -arv :刷新/etc/exports列表(因为一开始就启动了nfs-server,如果修改/etc/exports文件的时候,就不需要再次重启,直接刷新即可)
    • 3、把文件写到/etc/exports,并刷新后,【1和2做完】服务端便配置完成
  • 配置过程【完整demo】
    服务端ip为:192.168.59.129
    需求:128有读写权限,130只有访问权限
    因为我没有特殊权限要求,所以只用了很简单的权限,可以参考上面参数说明中的权限,按需添加,逗号隔开即可

[root@centos76_2 ccx]# vim /etc/exports
/root/ccx 192.168.59.128(rw,sync)
/root/ccx 192.168.59.130(ro)
[root@centos76_2 ccx]# exportfs -arv
exporting 192.168.59.128:/root/ccx
exporting 192.168.59.130:/root/ccx
[root@centos76_2 ccx]#

客户端配置


查看共享

showmount -e 服务器ip:查看分享(配置)详细

[root@centos76_1 ftp]# showmount -e 192.168.59.129
Export list for 192.168.59.129:
/root/ccx 192.168.59.130,192.168.59.128
[root@centos76_1 ftp]#

创建挂载路径

mkdir创建任意目录用来当做挂载路径

[root@centos76_1 ftp]# mkdir -p /nfs/ccx

挂载

方法:mount 服务器ip:分享路径 挂载路径 【分享路径上面有查看命令】
df -h 查看是否挂载成功

[root@centos76_1 ftp]# showmount -e 192.168.59.129
Export list for 192.168.59.129:
/root/ccx 192.168.59.130,192.168.59.128
[root@centos76_1 ftp]# mount 192.168.59.129:/root/ccx /nfs/ccx/
[root@centos76_1 ftp]# df -Th | tail -n 1
192.168.59.129:/root/ccx nfs 50G 3.7G 47G 8% /nfs/ccx
[root@centos76_1 ftp]# cd /nfs/ccx
[root@centos76_1 ccx]# ls # 这文件是服务端创建的,没问题
file1 file2 file3 test4 test5 test6
[root@centos76_1 ccx]#

客户端配置完成

权限不够说明【root用户无法在共享文件中创建文件】

配置完成后,在挂载的路径/nfs中写入数据,实际上都是放在服务器端共享的存储中,现在以root用户任意创建一个文件,会发现写不进去,报错提示权限不够,实际上我们分享的时候已经指定rw权限了,并且也是root用户,按理说不应该出现权限不够的问题,其实这是nfs本身机制导致的

[root@centos76_1 ccx]# ls
file1 file2 file3 test4 test5 test6
[root@centos76_1 ccx]# touch ccx
touch: 无法创建"ccx": 权限不够

处理方法有2种:
1、我们先看一下nfs的默认选项cat /var/lib/nfs/etab【服务端】
在这里插入图片描述
可以看到其中有一项是root_squash,该项是压缩root权限的意思,还有一项是:anonuid=65534,该项意思是把root权限压缩为uid为65534用户的权限,我们来看一下uid为65534的用户名为nfsnobady

[root@centos76_2 ccx]# awk -F: '/65534/{print $3,$1}' /etc/passwd
65534 nfsnobody

而nfsnobody属于other用户, 本身是无法使用x权限的,所以需要给nfsnobody加一个w权限:chmod o+w 共享目录名,如共享目录名称是/nfs/ccx:chmod o+w /nfs/ccx

[root@centos76_2 ccx]# ll /root | grep ccx
drwxr-xr-x. 5 root root 84 May 10 00:20 ccx
[root@centos76_2 ccx]# chmod o+w /root/ccx
[root@centos76_2 ccx]# ll /root | grep ccx
drwxr-xrwx. 5 root root 84 May 10 00:20 ccx
[root@centos76_2 ccx]#

2、在/etc/exports中共享目录的时候加上权限:no_root_squash,意思是不压缩root权限:

[root@centos76_2 ccx]# vim /etc/exports
/root/ccx 192.168.59.128(rw,sync,no_root_squash)
/root/ccx 192.168.59.130(ro)
[root@centos76_2 ccx]# exportfs -arv
exporting 192.168.59.128:/root/ccx
exporting 192.168.59.130:/root/ccx

注:修改后不要重启服务,使用exportfs -arv 刷新即可
上诉2个解决方法使用其中任意一个均可,操作完任意一个后,再次创建一个文件到挂载共享目录,发现正常:

[root@centos76_1 ccx]# touch ccx
[root@centos76_1 ccx]# ls
ccx file1 file2 file3 test4 test5 test6
[root@centos76_1 ccx]# mkdir hero_ccx_file
[root@centos76_1 ccx]# ls
ccx file1 file2 file3 hero_ccx_file test4 test5 test6
[root@centos76_1 ccx]#

特殊使用【仅一个ip可读写,其他为制度】

如:我现在想让192.168.26.200可以写,其他客户端不能写(只读)
vi /etc/exports , 注意:其实掩码默认是24位的,因为这里需要单独把200放开,所以需要把200的掩码改为32位,注:第二个ip前面有一个空格
在这里插入图片描述
exportfs -avr 刷新 即可

权限测试


  • 上面服务端配置的时候说过,128具有读写权限,130只有访问权限
    在这里插入图片描述
  • 测试128
    这个我已经挂载好了,所以直接测试

[root@centos76_1 ccx]# ip a | grep 59.128inet 192.168.59.128/24 brd 192.168.59.255 scope global noprefixroute ens33
[root@centos76_1 ccx]# ls
123 ccx file1 file2 file3 hero_ccx_file test4 test5 test6
[root@centos76_1 ccx]# echo test4>test4
[root@centos76_1 ccx]# touch ccx_hero
[root@centos76_1 ccx]# cat test4
test4
[root@centos76_1 ccx]#

写内容报错提升权限不够,用ll查看other用户是否有w权限,没有的话去服务端添加即可:chmod o+w 分享目录/* 【上面“挂载目录设置”有说明】
在这里插入图片描述

  • 测试130
    这是没有挂载的,从挂载测试开始,代码后面有注释说明

[root@centos76_3 ~]# ip a | grep 59.130inet 192.168.59.130/24 brd 192.168.59.255 scope global noprefixroute dynamic ens33
[root@centos76_3 ~]# mkdir /nfs/ccx -p # 创建挂载目录
[root@centos76_3 ~]# showmount -e 192.168.59.129 # 查看共享信息
Export list for 192.168.59.129:
/root/ccx 192.168.59.130,192.168.59.128
[root@centos76_3 ~]# mount 192.168.59.129:/root/ccx /nfs/ccx #挂载
[root@centos76_3 ~]# cd /nfs/ccx
[root@centos76_3 ccx]# ls
123 ccx ccx_hero file1 file2 file3 hero_ccx_file test4 test5 test6
[root@centos76_3 ccx]# cat test4 #查看没问题
test4
[root@centos76_3 ccx]# echo test6 > test6 #写入权限不够
-bash: test6: Permission denied
[root@centos76_3 ccx]# touch test_130 #创建权限不够
touch: cannot touch ‘test_130’: Read-only file system
[root@centos76_3 ccx]#

一切ok

卸载已挂载nfs文件

直接umount 挂载路径即可。

nfs自动挂载

自动挂载其实就是aotufs功能实现的,想了解的去看这篇博客

aotofs配置和挂载本地目录及nfs使用详细说明【aotofs即自动挂载】

基于kerberos的NFS

在这里插入图片描述

服务端配置

1、 先下载krb5.keytab:wget http://host.rhce.cc/materials/nfs_server.keytab -O /etc/krb5.keytab
在这里插入图片描述
2、 修改他的上下文:chcon -R -t public_content_t 共享目录 因为共享的时候需要把上下文一起共享出去
在这里插入图片描述
3、 修改配置文件把上下文也共享出去:vi /etc/sysconfig/nfs
找到RPCNFSDARGS,后面加上 “-V 4.2
在这里插入图片描述
4、 吧这个目录共享出去:vi /etc/exports
编辑/共享目录 *(rw,sync,sec=krb5p)【注:*是所有ip的意思】
在这里插入图片描述
5、 启动和安全相关的nfs服务并设置开启自启:systemctl start nfs-secure-server , systemctl enable nfs-secure-server ,然后重启一下nfs-server:systemctl restart nfs-server
在这里插入图片描述
6、 把挂载目录的权限改为某个用户的权限(可为root,也可以为普通用户):chown 用户名 挂载目录
在这里插入图片描述
(主要用于网络用户ssh的时候看得出区别)
作用测试(system2配置完毕的客户端,所以这部需把客户端配置完毕后操作):
在这里插入图片描述
服务端配置完毕

客户端配置:

查看共享文件:showmount -e 服务端主机名(也可ip)【使用主机名需要先添加解析】:
在这里插入图片描述
说一下普通方式共享的文件写入/etc/fstab的方法:
在这里插入图片描述
写入保存后 mount -a 即可自动挂载:
在这里插入图片描述
kerberos保护的文件挂载需要kerberos秘钥,所以也需要安装相同目录的krb5:
1、 wget http://host.rhce.cc/materials/nfs_client.keytab -O /etc/krb5.keytab
在这里插入图片描述
2、vi /etc/fstab
在这里插入图片描述
如:一般可能没有设置长主机名,就设置了主机名:hostname -f 查看长主机名
在这里插入图片描述
解释一下:
长主机名就是长主机名(也俗称带域名)- hostname -f
短主机名就是短主机名-设置了长主机名的话,第一个 . 前面的内容便是短主机名
3、 启动服务并设置开机自启:systemctl start nfs-secure , systemctl enable nfs-secure
4、 mount -a挂载即可:
在这里插入图片描述


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
author-avatar
小苗的秘密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有