NFS网络文件系统配置

简介:

NFS网络文件系统配置 



NFS简介


NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。


 

nfs安装包:nfs-utils

 

nfs配置文件:/etc/exports


语法:   文件系统  客户端(导出选项)  客户端(选项)


客户端处可填写:IP、FQDN或DOMAIN、NETWORK、*


 


NFS主要有3类选项:


访问权限选项


    设置输出目录只读:ro

    设置输出目录读写:rw


用户映射选项


    all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);

    no_all_squash:与all_squash取反(默认设置);

    root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);

    no_root_squash:与root_squash取反;以root身份创建目录和文件,此时共享目录权限(755);针对于其它用户向共享目录写入目录或文件,需要给共享目录权限(757)此时普通用户将普通用户自己身份写入目录和文件。

    anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);

    anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);


其它选项


    secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

    insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

    async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

    wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

    no_wdelay:若有写操作则立即执行,应与sync配合使用;

    subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

    no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;



 


查看NFS服务器端共享的文件系统


    showmount –e SERVER_IP


 


客户端使用NFS文件系统


    mount –t nfs SERVER:/path/to/sharedfs /path/to


 

  # exportfs [-aruv]


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

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

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

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


    具体例子: 

         exportfs:维护exports文件导出的文件系统表的专用工具


    exportfs –rv:重新导出所有的文件系统


    exportfs –au:关闭导出的所有文件系统(卸载所有共享目录)



 


开机自动挂载nfs:


SERVER:/PATH/TO/EXPORTED_FS /mount_point   nfs     defaults,_netdev   0 0


 _netdev:说明此共享是一个网络文件系统,如果联系不上,就会跳过此文件系统


示例:


172.16.4.100:/share/nfs   /mnt       nfs     defaults,_netdev 0 0





NFS使用演示


示例:将本机的/share/nfs使用nfs共享出去,让其他客户端可以访问


[root@nfs ~]# mkdir -p /share/nfs

[root@nfs ~]# vim /etc/exports

/share/nfs 172.16.4.136(rw)

[root@nfs ~]# exportfs -v

/share/nfs      172.16.4.136(rw)

/export  10.1.1.0/255.255.255.0(rw,fsid=0,no_root_squash,async)


验证nfs是否成功共享


[root@client ~]# showmount -e 172.16.4.100

Export list for 172.16.4.100:

/share/nfs 172.16.4.136


客户端挂载使用


[root@client ~]# mount -t nfs 172.16.4.100:/share/nfs /mnt/

[root@client ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg0-root   20G 299M   19G   2% /

tmpfs                 491M     0 491M   0% /dev/shm

/dev/sda1             190M   28M 153M  16% /boot

/dev/mapper/vg0-usr   9.8G 2.0G  7.4G  21% /usr

/dev/mapper/vg0-var    20G 267M   19G   2% /var

172.16.4.100:/share/nfs

                       20G  312M  19G   2% /mnt


这个时候nfs就可以正常使用了


 


由于服务器默认将root用户映射为了来宾用户,如果以root用户访问nfs服务器是没有写权限的


[root@client ~]# cp /etc/fstab /mnt/

cp: cannot create regular file `/mnt/fstab':Read-only file system


服务器端设置允许root用户以root权限访问这个共享服务器


[root@nfs ~]# vim /etc/exports

/share/nfs 172.16.4.136(rw,no_root_squash)


设置完成之后重启服务器,在使用root用户复制文件就有权限了


[root@client ~]# cp /etc/fstab /mnt/

[root@client ~]# ll /mnt/

total 4

-rw-r--r-- 1 nobody nobody 921 Apr 23 18:51 fstab

验证:nfs是通过用户id来认证用户,而不是用户名


创建用户gentoo使用户对/share/nfs有读写执行权限,然后在里面创建一个文件

[root@Server ~]# useradd -u 600 gentoo

[root@Server ~]# setfacl -m u:gentoo:rwx /share/nfs/

[root@Server ~]# su - gentoo

[gentoo@Server ~]$ cd /share/nfs/

[gentoo@Server nfs]$ touch a.gentoo

[gentoo@Server nfs]$ ll

total 4

-rw-rw-r-- 1 gentoo gentoo   0 Apr 23 18:55 a.gentoo


客户端操作:


创建相同id,然后不同的用户名,进行写入

[root@client ~]# useradd -u 600 fedora

[root@client ~]# su - fedora

[fedora@client ~]$ cd /mnt/

[fedora@client mnt]$ ll

total 4

-rw-rw-r-- 1 nobody nobody   0 Apr23 18:55 a.gentoo

[fedora@client mnt]$ touch a.fedora

[fedora@client mnt]$ ll

total 4

-rw-rw-r-- 1 nobody nobody   0 Apr 23 18:59 a.fedora

-rw-rw-r-- 1 nobody nobody   0 Apr 23 18:55 a.gentoo


创建不同id,相同用户名,进行写入

[root@client ~]# useradd gentoo

[root@client ~]# id gentoo

uid=602(gentoo) gid=602(gentoo) groups=602(gentoo)

[root@client ~]# su - gentoo

[gentoo@client ~]$ cd /mnt/

[gentoo@client mnt]$ ll

total 4

-rw-rw-r-- 1 nobody nobody   0 Apr 24 2015 a.fedora

-rw-rw-r-- 1 nobody nobody   0 Apr 24 2015 a.gentoo

[gentoo@client mnt]$ touch b.gentoo

touch: cannot touch `b.gentoo': Permission denied


结论:相同用户名,无法成功写入,相同id可以成功写入。如果相同的用户名,相同id也是可以成功写入的。



关于权限的分析


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


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


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


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

        


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


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


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


    c. 如果没有明确指定,此时root用户被压缩为nfsnobody;其它用户对照上述1中的b、c来显示所有者和所属组;


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



示例一:

NFS Server:

[root@NFS ~]# mkdir /Data

[root@NFS ~]# chmod o+w /Data/

[root@NFS ~]# cat /etc/exports 

/Data  10.10.172.0/255.255.255.0(rw,no_root_squash,async)

[root@NFS ~]# service nfs restart

Shutting down NFS daemon: [  OK  ]

Shutting down NFS mountd: [  OK  ]

Shutting down NFS quotas: [  OK  ]

Shutting down NFS services:  [  OK  ]

Shutting down RPC idmapd: [  OK  ]

Starting NFS services:  [  OK  ]

Starting NFS quotas: [  OK  ]

Starting NFS mountd: [  OK  ]

Starting NFS daemon: [  OK  ]

Starting RPC idmapd: [  OK  ]

[root@NFS ~]# tail /etc/passwd

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

centos:x:500:500:centos:/home/centos:/bin/bash

test:x:501:501::/home/test:/bin/bash

[root@NFS ~]# 


NFS Client:

[root@Client ~]# tail /etc/passwd

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

centos:x:500:500:centos:/home/centos:/bin/bash

gentoo:x:501:501::/home/gentoo:/bin/bash

test:x:502:502::/home/test:/bin/bash

[root@Client ~]# mount -t nfs 10.10.172.82:/Data /mnt

[root@Client ~]# cd /mnt/

[root@Client mnt]# touch root.txt

[root@Client mnt]# ll

total 0

-rw-r--r--. 1 root   root   0 Sep 18  2016 root.txt

[root@Client ~]# su centos

[centos@Client mnt]$ touch centos.txt

[centos@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos centos 0 Sep 18  2016 centos.txt

-rw-r--r--. 1 root   root   0 Sep 18  2016 root.txt

[centos@Client mnt]$ su gentoo

Password: 

[gentoo@Client mnt]$ touch gentoo.txt

[gentoo@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos centos 0 Sep 18 16:55 centos.txt

-rw-rw-r--. 1 test   test   0 Sep 18  2016 gentoo.txt

-rw-r--r--. 1 root   root   0 Sep 18  2016 root.txt

[gentoo@Client mnt]$ su test

Password: 

[test@Client mnt]$ touch test.txt

[test@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos centos 0 Sep 18 16:55 centos.txt

-rw-rw-r--. 1 test   test   0 Sep 18 16:55 gentoo.txt

-rw-r--r--. 1 root   root   0 Sep 18  2016 root.txt

-rw-rw-r--. 1 nobody nobody 0 Sep 18 16:56 test.txt

[test@Client mnt]$ 



示例二:

NFS Server:

[root@NFS ~]# tail /etc/passwd

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

centos:x:500:500:centos:/home/centos:/bin/bash

test:x:501:501::/home/test:/bin/bash

[root@NFS ~]# cat /etc/exports 

/Data  10.10.172.0/255.255.255.0(rw)

[root@NFS ~]# 


NFS Client:

[root@Client ~]# tail /etc/passwd

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

centos:x:500:500:centos:/home/centos:/bin/bash

gentoo:x:501:501::/home/gentoo:/bin/bash

test:x:502:502::/home/test:/bin/bash

[root@Client ~]# mount -t nfs 10.10.172.82:/Data /mnt

[root@Client ~]# cd /mnt/

[root@Client mnt]# touch root.txt

[root@Client mnt]# ll

total 0

-rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 18  2016 root.txt

[root@Client mnt]# su centos

[centos@Client mnt]$ touch centos.txt

[centos@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos    centos    0 Sep 18  2016 centos.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 18  2016 root.txt

[centos@Client mnt]$ su test

Password: 

[test@Client mnt]$ touch test.txt

[test@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos    centos    0 Sep 18 17:16 centos.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 18 17:16 root.txt

-rw-rw-r--. 1 nobody    nobody    0 Sep 18  2016 test.txt

[test@Client mnt]$ su gentoo

Password: 

[gentoo@Client mnt]$ touch gentoo.txt

[gentoo@Client mnt]$ ll

total 0

-rw-rw-r--. 1 centos    centos    0 Sep 18 17:16 centos.txt

-rw-rw-r--. 1 test      test      0 Sep 18  2016 gentoo.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 18 17:16 root.txt

-rw-rw-r--. 1 nobody    nobody    0 Sep 18 17:17 test.txt

[gentoo@Client mnt]$ 



本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1853686,如需转载请自行联系原作者
相关文章
|
2月前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
625 49
|
2月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
373 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
1月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
283 10
|
1月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
5月前
|
安全 网络虚拟化 数据安全/隐私保护
配置小型网络WLAN基本业务示例
本文介绍了通过AC与AP直连组网实现企业分支机构移动办公的WLAN基本业务配置方案。需求包括提供名为“WiFi”的无线网络,分配192.168.1.0/24网段IP地址给工作人员,采用直连二层组网方式,AC作为DHCP服务器,并使用隧道转发业务数据。配置步骤涵盖AP与AC间CAPWAP报文传输、DHCP服务设置、AP上线及WLAN业务参数配置等,最终确保STA成功接入无线网络“WiFi”。
配置小型网络WLAN基本业务示例
|
5月前
|
监控 安全 网络安全
网络安全新姿势:多IP配置的五大好处
服务器配置多IP地址,既能提升网络速度与安全性,又能实现多站点托管和故障转移。本文详解多IP的五大妙用、配置方法及进阶技巧。从理论到实践,合理规划IP资源,让服务器性能跃升新高度。
181 2
|
8月前
|
域名解析 网络协议 Linux
网络基础知识与配置
本文介绍了网络基础知识,涵盖网络概念、协议、拓扑结构及IP地址等内容。网络是由计算机设备通过通信线路连接而成的系统,用于资源共享与信息传递。文中详细解析了TCP/IP协议族(如IP、TCP、UDP)、常见应用层协议(如HTTP、FTP、SMTP、DNS)的功能与应用场景。同时,阐述了多种网络拓扑结构(总线型、星型、环型、树型、网状)的特点与优缺点。此外,还讲解了IP地址分类、子网掩码的作用,以及如何在Windows和Linux系统中配置网络接口、测试连通性(Ping、Traceroute)和查看默认网关与路由表的方法。这些内容为理解和管理计算机网络提供了全面的基础知识。
922 6
|
8月前
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
8月前
|
监控 安全 网络协议
Hyper V上网实战:多虚拟机网络环境配置
在Hyper-V环境中配置多虚拟机网络以实现上网功能,需完成以下步骤:1. 确认Hyper-V安装与物理网络连接正常;2. 配置虚拟交换机(外部、内部或专用)以支持不同网络需求;3. 设置虚拟机网络适配器并关联对应虚拟交换机;4. 验证虚拟机网络连接状态;5. 根据场景需求优化多虚拟机网络环境。此外,还需注意网络隔离、性能监控及数据备份等事项,确保网络安全稳定运行。

热门文章

最新文章