Linux NFS服务

Linux NFS服务NFS服务一、NFS简介NFS(NetworkFileSystem)即网络文件系统,它允许网络中的不同计算机相互之间共享资源。NFS客户端可以透明地读写远程NFS服务器上的文件,就像访问本地文件一样。二、NFS服务概述NFS是1980年由SUN发展出来在UNINX&Linux系统间实现文件共享的一种方法。它是一种文件系统协议,支持应用程序在客户端通过网络存取位于服务器磁盘中的数据。NFS只提供网络文件共享功能,不提供数据传输的功能。因此NFS客户端和NFS服务器需要借助R

大家好,欢迎来到IT知识分享网。

NFS服务

一、NFS简介

NFS(Network File System)即网络文件系统,它允许网络中的不同计算机相互之间共享资源。NFS客户端可以透明地读写远程NFS服务器上的文件,就像访问本地文件一样。

二、NFS服务概述

NFS是1980年由SUN发展出来在UNINX&Linux系统间实现文件共享的一种方法。它是一种文件系统协议,支持应用程序在客户端通过网络存取位于服务器磁盘中的数据。

NFS只提供网络文件共享功能,不提供数据传输的功能。因此NFS客户端和NFS服务器需要借助RPC(Remote Procedure Calls)远程过程调用协议实现数据传输。RPC定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息。

NFS服务器自开启服务之后一直处于等待状态,由NFS客户端建立过程调用的请求,将调用参数发送到远程NFS服务器,并等待响应。当请求到达远程NFS服务器后,NFS服务器处理客户端的请求,调用指定的程序,并将结果返回NFS客户端。NFS服务器上的目录如果可以被过程用户访问,就称为导出(export);客户主机访问服务器导出目录的过程称为挂载(mount)或导入(import)。

三、NFS工作流程

当访问程序通过NFS客户端向NFS服务端存取文件时,其工作流程如下所述:

步骤1,首先用户访问NFS共享资源,由程序在NFS客户端上发出NFS文件存取功能的询问请求,这时NFS客户端(即执行程序的服务器)RPC服务(portmap 或 rpcbind 服务)就会通过网络向NFS服务端的RPC服务(即 portmap 或 rpcbind 服务)的111端口发出NFS文件存取功能的询问请求。

步骤2,NFS服务端的RPC服务(即 portmap 或 rpcbind 服务)找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务(即 portmap 或 rpcbind 服务)。

步骤3,此时NFS客户端就可以获取到正确的端口,然后就直接与NFS daemon 联机存取数据。

步骤4,NFS客户端把数据存取成功后,告诉用户存取结果。

由于NFS的各项功能都需要向RPC服务注册,所以RPC服务能获取到NFS服务的各项对应的端口号、PID、NFS在主机监听的IP等,从而NFS客户端才能够通过RPC服务询问从而找到正确的端口。也就是说,NFS需要有RPC服务,NFS服务只需在服务端后于RPC启动,客户端无需启动NFS服务。

Linux NFS服务

四、NFS服务实践

案例1:

某公司新购一台服务器,服务器上已安装Linux操作系统,现要求将服务器配置成NFS服务器,实现文件共享服务,公司网络的网段为192.168.X.0/24。具体共享要求如下:

(1)在服务器端创建目录/nfs<y>1,并在其中创建文件rodir.txt,再创建目录/nfs<y>2,并在其中创建文件rwdir.txt。

(2)共享/nfs<y>1目录,允许所有的客户端访问该目录,但只具有读取权限。

(3)共享/nfs<y>2目录,只允许192.168.x.0/24网段的客户端访问,并具有读写权限。

(4)在客户端查看NFS服务器上发布的共享目录。

(5)在客户端挂载NFS服务器上发布的/nfs<y>1目录到本地的/nfslocal1目录下,并查看文件列表。

(6)在客户端挂载NFS服务器上发布的/nfs<y>2目录到本地的/nfslocal2目录下,并在其中创建文件wtest.file

1、实验环境

角色 主机名 操作系统 网卡 IP地址 备注
NFS服务器 nfsserver.gc.com CentOS7.4 vmnet18 192.168.92.11 虚拟机
NFS客户端 nfsclient.gc.com CentOS7.4 vmnet18 192.168.92.101 虚拟机

2、环境准备

  • NFS服务器

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.92.11
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
​
​
[root@localhost ~]# hostnamectl set-hostname nfsserver.gc.com
[root@localhost ~]# hostname
nfsserver.gc.com
​
[root@nfsserver ~]# systemctl stop firewalld
[root@nfsserver ~]# systemctl disable firewalld
[root@nfsserver ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
     
[root@nfsserver ~]# getenforce 
Disabled
​
​
[root@nfsserver ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                     repo name                 status
DVD                         gc                        enabled: 3,894
repolist: 3,894

  • NFS客户端

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.92.101
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
​
​
[root@localhost ~]# hostnamectl set-hostname nfsclient.gc.com
[root@localhost ~]# hostname
nfsclient.gc.com
​
​
[root@nfsclient ~]# systemctl stop firewalld
[root@nfsclient ~]# systemctl disable firewalld
[root@nfsclient ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
​
[root@nfsclient ~]# getenforce 
Disabled
​
​
[root@nfsclient ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                     repo name                 status
DVD                         gc                        enabled: 3,894
repolist: 3,894

3、配置文件解析

/etc/exports                            ###主配置文件
/usr/sbin/exports                       ###NFS服务自带管理命令
/usr/sbin/showmount                     ###客户端用来查看服务端分享的资源命令
/usr/lib/systemd/system/nfs.service     ###NFS服务管理脚本
/usr/lib/systemd/system/rpcbind.service ###rpc服务管理脚本

4、配置参数解析

参数 内容说明
rw|ro 该目录分享的权限是可读写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。
sync|async sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
no_root_squash|root_squash 客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
all_squash 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 。
anonuid|anongid anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 。

5、服务配置

(1)安装软件包

[root@nfsserver ~]# rpm -q rpcbind nfs-utils || yum install rpcbind nfs-utils -y

(2)创建共享文件

[root@nfsserver ~]# mkdir /nfsgc{1,2}
[root@nfsserver ~]# touch /nfsgc1/rodir.txt /nfsgc2/rwdir.txt
[root@nfsserver ~]# chown -R nfsnobody:nfsnobody /nfsgc{1,2}
[root@nfsserver ~]# ls -l /nfsgc1 /nfsgc2
/nfsgc1:
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 31 22:36 rodir.txt
​
/nfsgc2:
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 31 22:36 rwdir.txt
[root@nfsserver ~]# echo "chige ok" > /nfsgc1/rodir.txt 
[root@nfsserver ~]# echo "chige no problem" > /nfsgc2/rwdir.txt 
[root@nfsserver ~]# cat /nfsgc1/rodir.txt /nfsgc2/rwdir.txt 
chige ok
chige no problem

(3)修改配置文件

[root@nfsserver ~]# cat /etc/exports
/nfsgc1     *(ro)
/nfsgc2     192.168.92.11/24(rw,async)

(4)启动服务并设置开机自启动

[root@nfsserver ~]# systemctl start rpcbind
[root@nfsserver ~]# systemctl enable rpcbind
[root@nfsserver ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
   Active: active (running) since Wed 2021-03-31 22:42:11 CST; 1min 32s ago
 Main PID: 1268 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─1268 /sbin/rpcbind -w

[root@nfsserver ~]# systemctl start nfs
[root@nfsserver ~]# systemctl enable nfs
[root@nfsserver ~]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Wed 2021-03-31 22:42:11 CST; 14s ago
 Main PID: 1290 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

6、客户端测试

(1)安装包客户端软件包

[root@nfsclient ~]# rpm -q rpcbind nfs-utils || yum install rpcbind nfs-utils -y

(2)访问测试

[root@nfsclient ~]# showmount -e 192.168.92.11
Export list for 192.168.92.11:
/nfsgc1 *
/nfsgc2 192.168.92.11/24

(3)挂载测试

[root@nfsclient ~]# mkdir /nfslocal{1,2}
[root@nfsclient ~]# mount -t nfs 192.168.92.11:/nfsgc1 /nfslocal1
[root@nfsclient ~]# mount -t nfs 192.168.92.11:/nfsgc2 /nfslocal2
[root@nfsclient ~]# df -Th | grep nfs
192.168.92.11:/nfsgc1   nfs4       17G  1.4G   16G   8% /nfslocal1
192.168.92.11:/nfsgc2   nfs4       17G  1.4G   16G   8% /nfslocal2
[root@nfsclient ~]# cat /nfslocal1/rodir.txt /nfslocal2/rwdir.txt 
chige ok
chige no problem
[root@nfsclient ~]# touch /nfslocal1/wtest.file
touch: cannot touch ‘/nfslocal1/wtest.file’: Read-only file system
[root@nfsclient ~]# touch /nfslocal2/wtest.file
[root@nfsclient ~]# ls -l /nfslocal2
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 17 Mar 31 22:39 rwdir.txt
-rw-r--r-- 1 nfsnobody nfsnobody  0 Mar 31 22:50 wtest.file

案例2:(选做)

根据案例2进行扩展,经过一段时间的运营,公司发现,普通用户在NFS服务器上没有以匿名用户身份访问,但管理员root居然是以匿名(nfsnobody)身份访问的,因此需要做出调整。调整方案为当管理员root用户访问时,在服务器端需要映射为root用户。

1、修改服务器配置

[root@nfsserver ~]# cat /etc/exports
/nfsgc1     *(ro)
/nfsgc2     192.168.92.11/24(rw,async,no_root_squash)

2、客户端测试

[root@nfsclient ~]# touch /nfslocal2/wtest2.file
[root@nfsclient ~]# ls -l /nfslocal2
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 17 Mar 31 22:39 rwdir.txt
-rw-r--r-- 1 root      root       0 Mar 31 22:52 wtest2.file
-rw-r--r-- 1 nfsnobody nfsnobody  0 Mar 31 22:50 wtest.file

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22255.html

(0)
上一篇 2024-01-08 16:45
下一篇 2024-01-08 18:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信