浅谈网络共享之NFS服务

1️⃣NFS服务介绍

NFS简介

  • NFS(Network File System):网络文件系统,用户和程序可以像访问本地文件一样访问远端系统上的文件
  • NFS基于RPC(Remote Procedure Call)远程过程调用实现,RPC基于C/S架构实现
  • NFS优势:节省本地存储空间
    在这里插入图片描述
  • NFS发展:目前为v4版本,实现了伪根,增强了安全特性(kerberos)
  • NFS工作流程
    在这里插入图片描述
  • NFS工作原理
    在这里插入图片描述

NFS服务软件

  • 软件包:nfs-utils,默认系统安装

  • Kernel支持:nfs.ko

  • 服务开启、关闭

    • CentOS 7:systemctl start|stop nfs-server
    • CentOS 6: service nfs start|stop
  • 端口:2049(nfsd),其它端口由portmap/rpcbind(111)分配

    • 使用ss -ntlp命令查看端口,端口111的进程为rpcbind
      在这里插入图片描述
    • 使用rpcinfo -p 查看rpc注册程序,端口111的进程为portmapper
    [root@Centos7 ~]# rpcinfo -p
     program vers proto   port  service
      100000    4   tcp    111  portmapper
      100000    3   tcp    111  portmapper
      100000    2   tcp    111  portmapper
      100000    4   udp    111  portmapper
      100000    3   udp    111  portmapper
      100000    2   udp    111  portmapper
    
    • CentOS6开始portmap进程由rpcbind代替
  • 配置文件:/etc/exports, /etc/exports.d/*.exports

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

  • NFS服务主要进程

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

2️⃣NFS配置文件

1️⃣配置文件格式

  • 格式:/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
  • dir:共享目录路径
  • 主机格式
    单个主机:ipv4,ipv6,FQDN
    IP networks:两种掩码格式均支持
    172.18.0.0/255.255.0.0
    172.18.0.0/16
    wildcards:主机名通配,例如*.magedu.com,IP不可以
    netgroups:NIS域的主机组,@group_name
    anonymous:表示使用*通配所有客户端
    
  • 每个条目指定目录导出到的哪些主机,及相关的权限和选项
    默认选项:(ro,sync,root_squash,no_all_squash)
    ro,rw 只读和读写
    async 异步,数据变化后不立即写磁盘,性能高
    sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
    root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本
    是4294967294 (nfsnobody)
    no_root_squash 远程root映射成root用户
    all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
    no_all_squash (默认)保留共享文件的UID和GID
    anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合
    all_squash使用
    

2️⃣实验1:建立NFS共享目录/app/nfsfile1, /app/nfsfile2

  • 实验要求
    /app/nfsfile1目录:172.20.54.0网段的主机可以登录,支持读写,所有用户都映射为testuser
    /app/nfsfile2 目录:只有172.20.54.2主机可以登录,支持读写,远程root映射为root用户

  • 实验步骤

/ 建立testuser用户
[root@Centos7 ~]# useradd testuser
[root@Centos7 ~]# id testuser
uid=1002(testuser) gid=1002(testuser) groups=1002(testuser)

/ 编辑NFS配置文件
[root@Centos7 ~]# vim /etc/exports.d/nfsfile1.exports
/app/nfsfile1 172.20.54.0/24(rw,all_squash,anonuid=1002,anongid=1002)
[root@Centos7 ~]# vim /etc/exports.d/nfsfile2.exports
/app/nfsfile2 172.20.54.2(rw,no_root_squash)

/ 建立共享文件目录 文件
mkdir -p /app/nfsfile{1,2}
touch /app/nfsfile1/test1
touch /app/nfsfile2/test2
setfacl -R -m u:testuser:rwx /data/nfsfile1/

/ 配置文件生效
[root@Centos7 ~]# exportfs -r
[root@Centos7 ~]# exportfs -v
/app/nfsfile2 	172.20.54.2(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/app/nfsfile1 	172.20.54.0/24(sync,wdelay,hide,no_subtree_check,anonuid=1002,anongid=1002,sec=sys,rw,secure,root_squash,all_squash)

/ 挂载列表
[root@Centos7 ~]# showmount -e
Export list for Centos7.server0:
/app/nfsfile1 172.20.54.0/24
/app/nfsfile2 172.20.54.2
  • 实验测试
  • 挂载共享目录/app/nfsfile1,可以看到root和普通用户都映射为testuser用户(uid=1002, gid=1002)
[root@Centos7 ~]# mount 172.20.54.1:/app/nfsfile1 /mnt/nfs1/
[root@Centos7 ~]# cd /mnt/nfs1/
[root@Centos7 nfs1]# ls
test1
[root@Centos7 nfs1]# touch test2.txt        / root用户
[root@Centos7 nfs1]# ll
total 0
-rw-rwxr-- 1 root root 0 Dec 18 16:45 test1
-rw-r--r-- 1 1002 1002 0 Dec 18 18:31 test2.txt
[root@Centos7 nfs1]# su yijie             / 普通用户 
[yijie@Centos7 nfs1]$ ls
test1  test2.txt
[yijie@Centos7 nfs1]$ touch test3.txt
[yijie@Centos7 nfs1]$ ll
total 0
-rw-rwxr-- 1 root root 0 Dec 18 16:45 test1
-rw-r--r-- 1 1002 1002 0 Dec 18 18:31 test2.txt    / 客户端没有1002这个ID 
-rw-rw-r-- 1 1002 1002 0 Dec 18 18:32 test3.txt
  • 用172.20.54.3挂载/app/nfsfile2
[root@Centos7 nfs1]# mount 172.20.54.1:/app/nfsfile2 /mnt/nfs2/
mount.nfs: access denied by server while mounting 172.20.54.1:/app/nfsfile2
/ 被拒绝
  • 用172.20.54.2挂载/app/nfsfile2
[root@Centos7 ~]# mount 172.20.54.1:/app/nfsfile2   /mnt/nfs2/
[root@Centos7 ~]# cd /mnt/nfs2/
[root@Centos7 nfs2]# ls
test2
[root@Centos7 nfs2]# touch test1.txt
[root@Centos7 nfs2]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 18 18:42 test1.txt     / 客户端root映射服务器root
-rw-r--r-- 1 root root 0 Dec 18 16:45 test2
[root@Centos7 nfs2]# su yijie                 / 切换普通用户
[yijie@Centos7 nfs2]$ touch test2.txt
touch: cannot touch ‘test2.txt’: Permission denied  / 权限不够被拒绝

3️⃣NFS工具

rpcinfo

  • rpcinfo -p hostname:详细列明RPC注册程序
  • rpcinfo -s hostname:简略列明RPC注册程序
[root@Centos7 ~]# rpcinfo -p 172.20.54.3
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  36477  status
    100024    1   tcp  47219  status
[root@Centos7 ~]# rpcinfo -s 172.20.54.3
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100024  1         tcp6,udp6,tcp,udp                status      29

exportfs

  • -v:查看本机所有NFS共享
  • -r:重读配置文件并共享目录
  • -a:输出本机所有共享
  • -au:停止本机所有共享
  • showmount -e hostname:显示远程主机NFS共享目录
[root@Centos7 ~]# showmount -e 172.20.54.1  / 不带IP地址显示的是本机
Export list for 172.20.54.1:
/app/nfsfile1 172.20.54.0/24
/app/nfsfile2 172.20.54.2

mount.nfs

  • 客户端NFS挂载
NFS相关的挂载选项:man 5 nfs
fg(默认)前台挂载
bg后台挂载
hard(默认)持续请求
soft 非持续请求
intr 和hard配合,请求可中断
rsize和wsize 一次读和写数据最大字节数,rsize=32768
netdev 无网络不挂载
提示:基于安全考虑,建议使用nosuid,nodev,noexec挂载选项_
  • 临时挂载共享
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
  • 开机永久挂载共享
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0

4️⃣自动挂载

autofs服务简介

  • autofs服务:按需要挂载,在空闲时自动卸载
  • 由autofs包提供
  • 自动挂载的配置文件:/etc/auto.master
  • 服务文件:/usr/lib/systemd/system/autofs.service
  • 文件系统在失活的指定间隔5分钟后会自动卸载

autofs配置

1️⃣相对路径描述

  • 格式:
    /etc/auto.master文件格式:挂载点的目录名 /etc/auto.direct
    /etc/auto.direct文件格式:挂载点的基名 被挂载目录或设备
    注释:/etc/auto.direct文件仅为示例,文件名称没有要求

  • 相对路径时支持含通配符的目录名:* server:/export/&

  • 示例

[root@centos8 ~]#vim /etc/auto.master
/misc /etc/auto.misc
[root@centos8 ~]#vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

2️⃣绝对路径描述

  • 格式:
    /etc/auto.master文件格式:/- /etc/auto.direct
    /etc/auto.direct文件格式:挂载点路径 被挂载目录或设备
  • 示例:
vim /etc/auto.master:
/- /etc/auto.direct
vim /etc/auto.direct:
/foo -fstype=nfs server1:/export/foo
/user/local/ -fstype=nfs,vers=3 server1:/usr/local
/mnt/cdrom -fstype=iso9660 :/dev/cdrom

3️⃣实验:利用autofs实现远程家目录的自动挂载

  • 概述
    将NFS的共享目录,通过autofs 发布出来,做为远程主机用户的家目录
  • 环境准备
    • 三台主机
    • 一台主机 nfs server,IP:172.20.54.1
    • 另两台当 nfs client,IP:172.20.54.2(centos7)和172.20.54.66(centos6)
  • 在NFS服务器创建用户和相应的家目录,将用户wang的家目录共享
useradd -d /data/wang wang
[root@Centos7 ~]# id wang
uid=1003(wang) gid=1003(wang) groups=1003(wang)
vim /etc/exports.d/test.exports
/data/wang *(rw,anonuid=1003,anongid=1003,all_squash)

/ 生效配置文件
exportfs -r
exportfs -v
/ 查看共享文件
[root@Centos7 exports.d]# showmount -e 172.20.54.1
Export list for 172.20.54.1:
/data/wang *
  • 在第一台主机172.20.54.2上实现autofs
/ 安装autofs服务
yum -y install autofs
useradd wang
vim /etc/auto.master
/home   /etc/homeauto              / 挂载点是/home/wang,要拆分开,文件名无所谓
vim /etc/homeatuo
wang 172.20.54.1:/data/wang       / 挂载NFS服务器上共享的家目录

systemctl restart autofs
/ 进入wang目录
[root@Centos7 wang]# cd /home/wang
[root@Centos7 wang]# ls
test2.txt  test.txt
[root@Centos7 wang]# su wang     / 切换wang账号
[wang@Centos7 ~]$ touch wangfile
[wang@Centos7 ~]$ ll            / 因为这台客户端跟NFS服务器端网ID号一样
total 0
-rw-r--r-- 1 wang wang 0 Dec 18 20:58 test2.txt
-rw-r--r-- 1 root root 0 Dec 18 20:56 test.txt
-rw-rw-r-- 1 wang wang 0 Dec 18 21:21 wangfile
[wang@Centos7 ~]$ id wang        
uid=1003(wang) gid=1003(wang) groups=1003(wang)
  • 在第二台客户端172.20.54.66(centos6)上实现autofs
/ 安装autofs
yum -y install autofs
useradd wang
vim /etc/autofs
/-   /etc/homeauto           / 绝对路径

vim /etc/homeauto
/data/wang 172.20.54.1:/data/wang   / 写全

service autofs start

[wang@Centos6 ~]$ id wang
uid=500(wang) gid=500(wang) groups=500(wang)

/ 查看共享文件目录
[root@Centos6 /home/wang]#ll
total 0
-rw-r--r-- 1 1003 1003 0 Dec 18 20:58 test2.txt
-rw-r--r-- 1 root root 0 Dec 18 20:56 test.txt
-rw-rw-r-- 1 1003 1003 0 Dec 18 21:21 wangfile
/ 因为本机没有id=1003的用户,所以显示ID=1003

/ 切换wang账号,建立testwang文件
[wang@Centos6 ~]$ touch testwang
[wang@Centos6 ~]$ ll      / 还是属于NFS客户端wang的所属组
total 0
-rw-r--r-- 1 1003 1003 0 Dec 18 20:58 test2.txt
-rw-r--r-- 1 root root 0 Dec 18 20:56 test.txt
-rw-rw-r-- 1 1003 1003 0 Dec 18 21:28 testwang
-rw-rw-r-- 1 1003 1003 0 Dec 18 21:21 wangfile
  • 使用NFS建立远程家目录,如果可能,最好统一不同系统下相同用户的uid,便于后期管理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值