NFS服务应用

NFS服务概述和工作原理

  1. 什么是NFS:

通过网络,让各个系统共享彼此文件

NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中

优点:更加便利

  1. NFS挂载原理介绍

NFS 基于网络的文件系统 , 通过网络实现文件的共享  C/S架构

传输数据 , 共享数据 , 默认使用的是TCP  2049端口 , 但是在复杂的场景下使用更多端口(随机生成) 

RPC 协议: 用来建立连接 , NFS将随机生成的端口号通知给RPC服务 , 客户端通过访问RPC获得NFS的具体端口

NFS服务器部署和客户端挂载NFS共享的目录

1.安装NFS服务,需要安装两个软件:

1.1rpcbind :RPC主程序,可以将NFS视为RPC下的一个子程序

1.2nfs-utils :NFS主程序,包含rpc.nfsd,rpc.mount两个deamons。这个就是 NFS 服务所需要的主要软件。

2.NFS的相关文件:

2.1/etc/exports:NFS服务的主配置文件,该文件的最主要目的是发布共享目录并为共享目录限制权限。和其他服务的主配置文件一样,绝大部分的配置都是通过编辑该文件完成

2.2/var/lib/nfs/xtab:这个文件主要用来记录客户端与NFS服务器的连接记录,如果想查看哪些客户端曾经连接过NFS服务器,查看该文件即可。

2.3/var/lib/nfs/etab ,主要记录了 NFS 所共享出来的目录的完整权限设定值

1、NFS服务器部署:

要部署NFS服务,必须安装下面两个软件包:nfs-utils:NFS主程序,rpcbind:PRC主程序;

NFS服务器端和Client端都需要这安装这两个软件。

查看NFS软件包:

# rpm -qa | grep -E  'nfs|rpcbind'

安装nfs-utils和rpcbind软件包

# yum -y install nfs-utils rpcbind

2、启动NFS服务

注意:先启动rpc服务,再启动nfs服务。

# systemctl start rpcbind    #启动rpc服务

# systemctl enable rpcbind    #设置开机启动

启动nfs服务:

# systemctl start nfs     #启动nfs服务

# systemctl enable nfs    #设置开机启动

3、配置共享文件目录,编辑配置文件:

首先创建共享目录,然后在/etc/exports配置文件中编辑配置即可。

配置文件说明:

NFS服务的主配置文件exports发布共享目录的格式如下:

共享目录  [客户端地址1(权限)]  [客户端地址2(权限)]……

客户端指定方式

示例

使用IP地址指定单一主机

10.20.30.40

使用IP地址指定范围主机

172.16.0.0/16

使用IP地址指定范围主机

192.168.1.*

使用域名指定单一主机

www.test.com

使用域名指定范围主机

*.test.com或www[1-8].test.com或www?.test.com

使用通配符指定所有主机

*

NFS权限设置

NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集;

参数

说明

ro

设置共享权限为只读

rw

设置共享权限为读写

root_squash

对于访问NFS server共享目录的用户,如果是root的话会被压缩成为nobody用户身份。

no_root_squash

访问nfs server共享目录的用户如果是root的话,它对该目录具有root权限。这个项目极不安全,不建议使用

all_squash

不管访问nfs server共享目录的用户身份如何包括root,它的权限都将被压缩成为匿名用户,同时他们的uid和gid都会变成nobody或nfsnobody账户的uid,gid。在多个nfs客户端同时读写nfs server数据时,这个参数很有用可以确保大家写入的数据的权限是一样的。

但不同系统有可能匿名用户的uid,gid不同。因为此处我们需要服务端和客户端之间的用户是一样的。比如说:服务端指定匿名用户的UID为2000,那么客户端也一定要存在2000这个账号才可以

anonuid

设置匿名账号的UID,说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody。UID 是65534.

anongid

同anonuid,就是把uid换成gid而已

sync

请求写入数据时,将数据同步写入内存和硬盘,保证不丢失数据。这可能导致效率降低

async

优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

配置实例:

需要输出的共享目录:

/webroot 目录可读写,并且不限制用户身份,共享给192.168.0.0/24网段所有主机;

/bbs 这个目录仅共享给192.168.0.8这台主机,以供该主机上面的www这个用户来使用,

具体操作如下:

关闭selinux和firewalld防火墙

在nfs服务器和客户端分别创建一个用户

客户端 #useradd  -M  -s  /sbin/nologin  -u  2000  www

服务器 # useradd  -M  -s  /sbin/nologin  -u  2000  www

在nfs服务端创建要共享输出的目录并设置权限

# mkdir /webroot

# mkdir /bbs

# chmod  -R  a+w  /webroot/

# chown  -R  www:www  /bbs/

编辑/etc/exports配置文件,将本地的/webroot和/bbs目录共享发布

# vim /etc/exports

执行systemctl reload nfs 或exportfs -rv命令使修改的/etc/exports配置内容生效

# systemctl reload nfs

# exportfs -rv

服务器共享配置格式:

基本格式:共享目录 ip/24(共享属性)

共享权限设置:

ro:只读属性

rw:读写属性

sync:文件实际写入磁盘后才返回

all_squash:所有访问用户均被压缩成后续接的用户(即anonuid和anongid指定的用户和组)。

anonuid:默认压缩的用户

anongid:默认压缩的用户组

查看NFS服务器共享出来目录:

服务器 #showmount -e localhost

查看配置:

exportfs -v

4、客户端配置

客户端也要安装nfs-utils和rcpbind软件包

# systemctl start rpcbind

# systemctl enable rpcbind

注意:客户端关闭selinux

在客户端查看NFS服务器共享出来目录:

showmount -e 服务器地址

挂载NFS服务器上/webroot目录到本地/var/www/html目录下

挂载NFS服务器上/bbs目录到本地/var/www/bbs目录下

在客户端上确认挂载点目录存在

# mkdir -p /var/www/{html,bbs}

客户端挂载NFS文件系统:

# mount  -t  nfs  192.168.0.6:/webroot  /var/www/html/

# mount  -t  nfs  192.168.0.6:/bbs  /var/www/bbs/

执行# df -hT查看文件系统的挂载情况

开机启动挂载NFS

想要系统每次启动时自动挂载NFS服务器上的共享目录,则可以编辑/etc/fstab文件

NFS服务器的IP:共享目录    挂载点    nfs   defaults   0 0

测试客户端对nfs共享目录的读写操作,创建文件测试

你可能感兴趣的:(基础,linux,centos,nfs)