CentOS7基于NFS服务的文件共享

1        NFS服务器安装与配置

1.1   环境信息

操作系统:centos7

内核版本:3.10.0-327.el7.x86_64

1.2   NFS安装与配置

关闭selinux功能:

[[email protected] ~]# setenforce 0

查看selinux状态:

[[email protected] ~]# sestatus

SELinux status:                 disabled

服务器NFS软件包安装:

[[email protected] ~]# yum install -y nfs-utils

配置export配置文件:

[[email protected] ~]# cat /etc/exports

/data/ *(rw,sync,fsid=0)

注:*代表任何IP可以访问并挂载;rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录

新建/data共享目录:

[[email protected] ~]# mkdir /data

1.3   启动NFS服务

先为rpcbind和nfs做开机启动:

[[email protected] ~]#systemctl enable rpcbind.service

[[email protected] ~]#systemctl enable nfs-server.service

然后分别启动rpcbind和nfs服务:

[[email protected] ~]#systemctl start rpcbind.service

[[email protected] ~]#systemctl start nfs-server.service

确认NFS服务器启动成功:

[[email protected] ~]#rpcinfo -p

检查 NFS 服务器是否开放挂载我们想共享的目录 /data:

[[email protected] ~]#exportfs

/data           <world>

2        客户端进行NFS目录挂载

启动rpcbind服务:

[[email protected] ~]# systemctl start rpcbind.service

检查共享目录是否存在:

[[email protected] ~]# showmount -e 10.12.35.251

Export list for 10.12.35.251:

/data *

挂载NFS共享目录:

[[email protected] ~]# mount -t nfs 10.12.35.251:/data//mnt

查看客户端mount信息:

10.12.35.251:/data/ on /mnt type nfs(rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.12.35.251,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=10.12.35.251)

3        NFS客户端文件写入测试

3.1   客户端root用户写测试

[[email protected] ~]# cd /mnt

[[email protected] mnt]# touch test2

touch: cannot touch test2Permissiondenied

报错关键字:Permission denied

出现这个错误是由于NFS服务器没有开放目录权限导致。

查看NFS目录权限:

[[email protected] ~]# ll /data/

total 26688

-rw-r--r-- 1 root root 27323419 Mar 2115:03 elasticsearch-1.7.1.noarch.rpm

-rw-r--r-- 1 root root       30 Mar 21 15:19 test

drwxr-xr-x 2 root root        6 Mar 21 15:03 test1

注:可以看到此目录只有root用户才能写入;

对NFS目录赋予777权限:

[[email protected] ~]# chmod 777 -R/data

[[email protected] ~]# ll /data/

total 26688

-rwxrwxrwx 1 root root 27323419 Mar 2115:03 elasticsearch-1.7.1.noarch.rpm

-rwxrwxrwx 1 root root       30 Mar 21 15:19 test

drwxrwxrwx 2 root root        6 Mar 21 15:03 test1

在客户端即可进行文件写入:

[[email protected] mnt]# touch test2

[[email protected] mnt]# echo ooooo>> test2

[[email protected] mnt]# cat test2

ooooo

查看目录的文件内容:

[[email protected] mnt]# ll

total 26692

-rwxrwxrwx 1 root      root     27323419 Mar 21 15:03 elasticsearch-1.7.1.noarch.rpm

-rwxrwxrwx 1 root      root           30 Mar 21 15:19 test

drwxrwxrwx 2 root      root             6 Mar 21 15:03 test1

-rw-r--r-- 1nfsnobody nfsnobody        6 Mar 21 15:33test2

注:用root 用户建立的文件test2,变成了nfsnobody 用户。

NFS服务有很多默认的参数,通过NFS服务器的/var/lib/nfs/etab文件查看/data目录完整权限设定。

[[email protected] ~]# cat/var/lib/nfs/etab

/data  *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,fsid=0,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

默认就有sync,wdelay,hide 等等,no_root_squash 是让root保持权限,root_squash 是把root映射成nobody,no_all_squash不让所有用户保持在挂载目录中的权限。所以,root建立的文件所有者是nfsnobody。

3.2   客户端使用普通用户测试

[[email protected] mnt]# groupadd test

[[email protected] mnt]# useradd test -gtest

[[email protected] mnt]# su test

[[email protected] mnt]$ ls

elasticsearch-1.7.1.noarch.rpm  test test1  test2

创建文件

[[email protected] mnt]$ touch testfile

写入内容

[[email protected] mnt]$ echo"thisistestfileintheNFS" >>testfile

查看文件内容

[[email protected] mnt]$ cat testfile

thisistestfileintheNFS

查看文件权限

[[email protected] mnt]$ ll

total 26696

-rwxrwxrwx 1 root      root     27323419 Mar 21 15:03 elasticsearch-1.7.1.noarch.rpm

-rwxrwxrwx 1 root      root            30 Mar 21 15:19 test

drwxrwxrwx 2 root      root             6 Mar 21 15:03 test1

-rw-r--r-- 1 nfsnobody nfsnobody        6 Mar 21 15:33 test2

-rw-rw-r-- 1 test     test            23 Mar 21 15:40 testfile

在客户端使用root用户对testfile写入内容:

[[email protected] mnt]# echo ‘sdfdd‘>> testfile

-bash: testfile: Permission denied

权限不够,普通用户写入文件时文件权限为用户名与组,这也就保证了服务器的安全性。

3.3   针对客户端root用户权限的解决方法

连接到NFS服务器,查看NFS目录的配置信息:

[[email protected] ~]# exportfs -v

/data           <world>(rw,wdelay,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)

修改服务器端export配置文件:

[[email protected] ~]# cat /etc/exports

/data/ *(rw,sync,no_root_squash,fsid=0)

注:添加no_root_squash参数,表明此时客户端root用户的身份等同于NFS server上面的root用户;

再次载入服务器端NFS配置:

[[email protected] ~]# exportfs -rv

exporting *:/data

查看现有NFS目录权限配置:

[[email protected] ~]# exportfs -v

/data           <world>(rw,wdelay,no_root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)

在客户端使用root用户创建文件:

[[email protected] mnt]# echothisisrootuserfile >> rootfile

查看root用户创建的文件权限:

[[email protected] mnt]# ll

total 26700

-rwxrwxrwx 1 root      root     27323419 Mar 21 15:03 elasticsearch-1.7.1.noarch.rpm

-rw-r--r-- 1root      root            19 Mar 21 16:02 rootfile

-rwxrwxrwx 1 root      root            30 Mar 21 15:19 test

drwxrwxrwx 2 root      root             6 Mar 21 15:03 test1

-rw-r--r-- 1 nfsnobody nfsnobody        6 Mar 21 15:33 test2

-rw-rw-r-- 1 test      test            23 Mar 21 15:40 testfile

可以看到客户端root用户创建的文件已经升级为NFS服务器端的root用户权限。

4        扩展阅读

4.1   关于NFS权限扩展阅读

1. 客户端连接时候,对普通用户的检查

    a. 如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户;

    b. 如果NFS server上面有同名用户,那么此时客户端登录账户的身份转换为NFS server上面的同名用户;

    c. 如果没有明确指定,也没有同名用户,那么此时用户身份被压缩成nfsnobody;

  2. 客户端连接的时候,对root的检查

    a. 如果设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root;

    b. 如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户;

    c. 如果没有明确指定,此时root用户被压缩为nfsnobody;

    d. 如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组;

4.2   NFS相关命令扩展

1、exportfs

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

  # exportfs [-aruv]

  -a 全部挂载或卸载 /etc/exports中的内容

  -r 重新读取/etc/exports 中的信息,并同步更新/etc/exports、/var/lib/nfs/xtab

  -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

  -v 在export的时候,将详细的信息输出到屏幕上。

具体例子:

  # exportfs -au 卸载所有共享目录

  # exportfs -rv 重新共享所有目录并输出详细信息

2、nfsstat

查看NFS的运行状态,对于调整NFS的运行有很大帮助。

3、rpcinfo

查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。

4、showmount

  -a 显示已经于客户端连接上的目录信息

  -e IP或者hostname 显示此IP地址分享出来的目录

5、netstat

可以查看出nfs服务开启的端口,其中nfs 开启的是2049,portmap 开启的是111,其余则是rpc开启的。

最后注意两点,虽然通过权限设置可以让普通用户访问,但是挂载的时候默认情况下只有root可以去挂载,普通用户可以执行sudo。

NFS server 关机的时候一点要确保NFS服务关闭,没有客户端处于连接状态!通过showmount -a 可以查看,如果有的话用kill killall pkill 来结束,(-9 强制结束)

时间: 2024-08-30 02:06:25

CentOS7基于NFS服务的文件共享的相关文章

LAMP平台扩展:基于NFS服务实现博客站点负载均衡

nfs简介: nfs:Network File System,网络文件系统:是一种分布式文件系统协议,最初由Sun公司开发.其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件. NFS和其他许多协议一样,是基于RPC协议实现的. rpc:Remote Procedure Call,远程过程调用:是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序.调用远程主机上的函数,一部分功能由本地程序,另一部分功能由远程主机上的函数完成. rpcbind:RPC

k8s存储数据持久化,emptyDir,hostPath,基于Nfs服务的PV,PVC

在docker和K8S中都存在容器是有生命周期的,因此数据卷可以实现数据持久化. 数据卷解决的主要问题: 1.数据持久性:当我们写入数据时,文件都是暂时性的存在,当容器崩溃后,host就会将这个容器杀死,然后重新从镜像创建容器,数据就会丢失. 2.数据共享:在同一个Pod中运行容器,会存在共享文件的需求. 数据卷的类型: 1.emptyDiremptyDir数据卷类似于docker数据持久化的docker manager volume,该数据卷初分配时,是一个空目录,同一个Pod中的容器可以对该

centos7安装nfs服务配置

nfs为什么需要RPC?因为NFS支持的功能很多,不同功能会使用不同程序来启动,因此,NFS对应的功能所对应的端口无法固定.端口不固定造成客户端与服务端之间的通信障碍,所以需要RPC来从中帮忙.NFS启动时会随机取用若干端口,然后主动向RPC服务注册取用相关端口和功能信息,RPC使用固定端口111来监听来自NFS客户端的请求,并将正确的NFS服务端口信息返回给客户端,这样客户端与服务端就可以进行数据传输了 1.由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过

centos7搭建NFS服务

服务器端 139.155.90.78 客户端  192.168.198.146 先查看自己的系统有没有安装rpcbind 和nfs-utils rpm -qa nfs-utils rpcbind 若使用命令后出现如下结果则说明已经安装 若没有的话可以 yum install nfs-utils rpcbind 安装完成之后 systemctl start rpcbind.service systemctl start nfs.service (一定是先启动rpcbind服务后开启nfs服务) 启

使用NFS服务实现文件共享

多个服务器之间需要共享文件,通过NFS服务共享是一个简单的方法 1.在作为NFS服务端的主机上新挂载了一块硬盘 现将其分区和格式化 fdisk /dev/sdb 输入n,然后一路默认最后输入w,完成分区 然后格式化 mkfs.ext4 /dev/sdb1 然后挂载到目录 mkdir -p /nfs-data; mount /dev/sdb1 /nfs-data 将下面信息写入/etc/fstab文件,让系统开启自动挂载 /dev/sdb1 /nfs-data ext4 defaults 0 0

CentOS7 部署nfs服务

参考博客 参考博客 https://blog.51cto.com/addam/1576144 错误1: 客户端挂载nfs报错mount: wrong fs type, bad option, bad superblock on... > yum install nfs-utils 原文地址:https://www.cnblogs.com/li1234yun/p/10643505.html

搭建NFS服务实现两台虚拟机之间共享

NFS网络文件系统,实现Linux与Linux之间的简化文件共享服务 1.创建目录,将光盘镜像挂载到新建目录上 mkdir -p /media/cdrom mount -o loop /dev/cdrom /media/cdrom 2.配置yum源,安装nfs服务 cd /etc/yum.repos.d vi local.repo [redhat] name=redhat baseurl=file:///media/cdrom enabled=1 gpgcheck=0 yum repolist

NFS服务和DHCP服务讲解

1.NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录和文件. 模式: C/S 模式 端口: NFS是Net File System的简写,即网络文件系统.NFS通常运行于2049端口. 2.部署NFSlinux与linux之间共享 由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务

搭建服务器之文件共享cifs,nfs,samba

cifs: 微软系统中用于网上邻居共享的一个机制,在linux下也可以通过命令mount -t cifs .....来挂载共享的文件目录等. nfs: linux之间的共享文件方式,基于rpc server方式,挂载命令mount -t nfs .....详细如下:    nfs服务器搭建需要软件rpcbind 与 nfs-utils所用到的服务包括service rpcbind nfs nfslock这三个,配置文件为/etc/exports,在里边可以设定想要分享的目录.然后可以/etc/s