nfs

NFS服务

NFS文件系统

  • NFS:基于network file system 网络文件系统,基于内核的文件系统,sun公司开发,通过使用NFS,用户可以像访问本地文件一样访问远端系统的文件
  • 优势:节省本地存储空间,将常用的数据,如home目录,存放在NFS目录下服务器上且可以通过网络访问,本地终端可以减少自身存储空间的使用

image-20230825171504016

NFS工作原理

image-20230825171648061

NFS各个版本的对比

NFS服务介绍

软件包:nfs-utils

kernel支持:nfs.ko

端口2049(nfsd),其他的由portmap(111)分配

配置文件:/etc/exports,/etc/exports.d/*.exports

centos7不支持同一目录同时使用nfs和samba共享,因为使用锁机制不同,

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

centos6开始portmap进程由rpcbind代替

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

日志:/etc/lib/nfs

NFS配置文件

路径/etc/exports

导出的文件系统格式:

/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...

  1. #开始为注释

  2. 主机格式

    • 单个主机:ipv4,ipv6,FQDN
    • IP networks:两种掩码格式均支持:172.18.0.0/16
    • wildcards:主机名通配,例如*.mage.com,ip 不可以
    • netgroups:NIS域的主机组,@group_name
    • anonymous:表示使用*通配所有客户端
  3. 每个条目指定目录导出到的哪些主机,以及相关的权限和选项

    默认选项:(ro,sync,root_squash,no_all_squash)

    • ro,rw 只读和读写
    • async 异步,数据变化之后不立即写入磁盘,性能高
    • sync 同步,数据在请求之后立即写入共享
    • no_all_aquash 保留共享文件的UID和GID
    • all_squash所有远程用户(包括root)都变成nfsnobody
    • root_squash 远程root映射为nfsnobody,UID变为65534
    • no_root_squash 远程root映射成root用户
    • anounid=和anongid=指明匿名用户映射为特定用户的UID和GID,而非nfsnobody,可配合all_quash使用
  4. 示例:/data/nfsdir1 192.168.99.0/24(sync,rw,root_squash,all_squash)

NFS配置示例

注意[101]$开头的是主机192.168.10.101,[102]$开头的主机是192.168.10.102

1,修改配置

 [root@101 ~]#vim /etc/exports
 [root@101 ~]#echo"/data/nfsdir1 *(rw)" /etc/exports

2,加载生效看看

 [root@101 ~]#exportfs -r  #重读配置文件生效
 [root@101 ~]#exportfs -v  #查看共享目录
/data/nfsdir1 	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

3,用102这台机器挂载下

 [root@centos7 ~]#mkdir /mnt/nfs1
 [root@centos7 ~]#mount 192.168.10.101:/data/nfsdir1 /mnt/nfs1
 [root@centos7 ~]#df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/sda2                     10475520 4517448   5958072  44% /
devtmpfs                        483048       0    483048   0% /dev
tmpfs                           498976       0    498976   0% /dev/shm
..........................................................
192.168.10.101:/data/nfsdir1   5232640   32896   5199744   1% /mnt/nfs1

4,挂载创建个文件结果发现权限不足

 [root@centos7 ~]#cd /mnt/nfs1/
 [root@centos7 nfs1]#showmount -e 192.168.10.101 #查看远程的主机共享的目录
Export list for 192.168.10.101:
/data/nfsdir1 *
 [root@centos7 nfs1]#touch f1 
touch: cannot touch ‘f1’: Permission denied

5,回到101,给这个目录设置FACL

 [root@101 ~]#setfacl -m u:nfsnobody:rwx /data/nfsdir1

6,可以看到所创建的文件账号都是nfsnobody的

 [root@centos7 nfs1]#touch f1
 [root@centos7 nfs1]#ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 27 17:03 f1
 [root@centos7 nfs1]#

7,其他的是把102主机上的 root映射成nfsnobody账号了,这是因为在exportfs -v的输出中,有这么一句话"root_squash",其他的主机root权限都会被压榨成nfsnobody

[root@101 ~]#exportfs -v
/data/nfsdir1 	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

8,那如果换其他的账号来试试

 [root@centos7 nfs1]#useradd wang
 [root@centos7 nfs1]#su wang
 [wang@centos7 nfs1]$ls
f1
 [wang@centos7 nfs1]$whoami 
wang
 [wang@centos7 nfs1]$ls
f1
 [wang@centos7 nfs1]$touch f2
touch: cannot touch ‘f2’: Permission denied

9,权限不足,因为wang账号的id为1001,无法映射成nfsnobody,只有id=1001才能映射成nfsnobody,那如果把所有的账号都映射层nfsnobody呢,这样做

 [root@101 ~]#vim /etc/exports
 [root@101 ~]#cat /etc/exports
/data/nfsdir1 *(rw,all_squash)
 [root@101 ~]#exportfs -r

10,这样就可以了,所创建的账号都会被映射成nfsnobody了。

 [wang@centos7 nfs1]$whoami
wang
 [wang@centos7 nfs1]$touch wnag.file
 [wang@centos7 nfs1]$ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 27 17:03 f1
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Aug 27 17:23 wnag.file

11,那能不能映射成其他的账号呢?

#一会儿我们就映射成test用户
 [root@101 ~]#useradd test
 [root@101 ~]#id test
uid=1001(test) gid=1001(test) groups=1001(test)
  #id同样是1001


#修改配置
 [root@101 ~]#cat /etc/exports
/data/nfsdir1 *(rw,all_squash,anonuid=1001,anongid=1001)
 [root@101 ~]#exportfs -r
 

#设置FACL
 [root@101 ~]#setfacl -m u:test:rwx /data/nfsdir1


​ 来102试试

为什么显示1001呢,因为102主机上没有id=1001的账号

 [root@centos7 nfs1]#userdel wang
 [root@centos7 nfs1]#touch root2
 [root@centos7 nfs1]#ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 27 17:03 f1
-rw-r--r-- 1      1001      1001 0 Aug 27 17:40 root2
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Aug 27 17:23 wnag.file

NFS其他配置示例

1,在/etc/exports 文件中定义导出目录

# 以下是共享配置文件中的一些例子:

/myshare server.example.com   # 允许名为"server.example.com"的主机访问/myshare共享

/myshare *.example.com        # 允许以 ".example.com" 结尾的任何域名的主机访问/myshare共享

/myshare server?.example.com     # 允许名为"server"后面跟任意一个字符,然后以 ".example.com" 结尾的域名的主机访问/myshare共享

/myshare server[0-20].example.com   # 允许名为"server"后面跟一个数字(0到20之间)然后以 ".example.com" 结尾的域名的主机访问/myshare共享

/myshare 172.25.11.10                        # 允许IP地址为172.25.11.10的主机访问/myshare共享

/myshare 172.25.0.0/16                        # 允许IP地址以172.25开头的所有主机(CIDR表示法)访问/myshare共享

/myshare 2000:472:18:b51:c32:a21                # 允许IPv6地址为2000:472:18:b51:c32:a21的主机访问/myshare共享

/myshare 2000:472:18:b51::/64                    # 允许以2000:472:18:b51开头的所有IPv6地址的主机(CIDR表示法)访问/myshare共享

/myshare *.example.com 172.25.0.0/16             # 允许以 ".example.com" 结尾的任何域名的主机和以172.25开头的所有主机访问/myshare共享

/myshare desktop.example.com(ro)                  # 允许名为"desktop.example.com"的主机以只读的方式访问/myshare共享

/myshare desktop.example.com(ro) server[0-20].example.com(rw)   # 允许名为"desktop.example.com"的主机以只读模式访问/myshare共享,同时允许名为"server"后面跟一个数字(0到20之间)然后以 ".example.com" 结尾的域名的主机以读写模式访问/myshare共享

/myshare diskless.example.com(rw,no_root_squash)    # 允许名为"diskless.example.com"的主机以读写模式访问/myshare共享,并禁用对共享的访问进行根用户的映射(root squashing)

NFS工具

1,rpcinfo

rpcinfo -p  hostname
rpcinfo -s  hostname #查看RPC注册工具

2,exportfs [options]

[Optinos] 说明
-v 查看本机所有NFS共享
-r 重读配置文件,并共享目录
-a 输出本机所有共享
-au 停止本机所有共享

3,showmount -e 192.168.10.101 查看某个主机上的nfs

4,mount nfs 挂载工具

客户端NFS挂载

nfs挂载相关选项 man 5 nfs

  1. fg (默认)前台挂载 | bg 后台挂载

  2. hard (默认)持续请求 | soft 非持续请求

  3. intrhard配合,请求可中断。

  4. rsizewsize 一次读和写数据最大字节数,rsize=32769

  5. _netdev 无网络不挂载

    基于安全考虑,建议使用 nosuid,nodev,noexec挂载选项

示例:

mount -o rw nosuid,fg,hard,intr 172.16.0.1:/testdir	 /mnt/nfs	

开机挂载

写入配置文件。

[101]$ cat  /etc/fstab
  172.16.0.1:/public /mnt/ nfs defaults 0 0

参考:

参考视频:

b站

参考文档:

csdn

posted @ 2023-08-28 08:56  浅~~  阅读(12)  评论(0)    收藏  举报