Linux系统NFS网络文件系统

NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或目录到本地系统可挂载的目录下

NFS实现是通过RPC服务来实现的

实现过程:

1、NFS RPC主要的功能是记录每个NFS功能所对应的端口号,并将信息传递给请求数据的NFS客户端,从而实现数据的传输

2、NFS服务启动时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,RPC服务就知道每个端口对应的NFS功能了,然后RPC会用固定的端口(111)来监听NFS客户端的请求,将正确的NFS端口传给NFS的客户端

服务端启动顺序:

事先RPC服务,后启动NFS服务,否则NFS服务无法向RPC服务进行注册,Centos 5.x 系统下RPC服务为portmap,Centos 6.x系统为rpcbind

NFS软件:nfs-utils 是NFS的主程序

NFS配置文件格式如下:

NFS共享目录   NFS客户端地址(参数1.参数2)

1、NFS共享目录的实际目录必须是绝对路径

2、NFS客户端为服务端授权可以访问共享目录的NFS客户端地址,可以是IP、域名、主机名、整个网段,或者用*来匹配所有主机

3、参数是对授权访问NFS共享目录的权限(客户端的访问权限集合)

安装布署过程

 

服务器端配置如下

1、查看操作系统版本与内核

[root@Centos ~]# cat /etc/redhat-release

CentOS release 6.5 (Final)

[root@Centos ~]# uname -r

2.6.32-431.el6.x86_64

2、检查是否安装NFS RPC服务

[root@Centos ~]# rpm -aq nfs-utils rpcbind

rpcbind-0.2.0-12.el6.x86_64

nfs-utils-1.2.3-39.el6.x86_64

3、如果没安装相关服务请使用如下命令进行安装

yum install nfs-utils -y

yum install rpcbind  -y

启动

按启动的先后顺序来启动服务

[root@Centos ~]# /etc/init.d/rpcbind status

rpcbind is stopped

[root@Centos ~]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@Centos ~]# /etc/init.d/nfs status  

rpc.svcgssd is stopped

rpc.mountd is stopped

nfsd is stopped

rpc.rquotad is stopped

[root@Centos ~]# rpcinfo -p localhost  查看rpc的注册信息情况

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

[root@Centos ~]# /etc/init.d/nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

相关服务启动后,我们再来查看NFS向RPC的注册情况

如果想让NFS、RPC服务开机自启动,实际生产环境中一般都会将配置放在/etc/rc.local下面

[root@Centos ~]# cat /etc/rc.local

####start up by 2016-08-21

/etc/init.d/rpcbind start

/etc/init.d/nfs start

检查配置情况

[root@Centos /]# tail -2 /etc/rc.local

/etc/init.d/rpcbind start

/etc/init.d/nfs start

5、配置服务端NFS配置文件/etc/exports

[root@Centos ~]# vi /etc/exports

#####config for nfs-server 2016-8-21

/data/bbs 192.168.1.3(rw,sync)

检查配置情况

[root@Centos /]# tail -2 /etc/exports

#####config for nfs-server 2016-8-21

/data/bbs 192.168.1.3(rw,sync)

6、配置完成后重启NFS服务

/etc/init.d/nfs reload  (/usr/bin/exprots -r) 两者功能相同

[root@Centos /]# /etc/init.d/nfs reload

客户端配置如下

1、查看服务器操作系统版本与内核

[root@localhost ~]# cat /etc/redhat-release

CentOS release 6.5 (Final)

[root@localhost ~]# uname -r

2.6.32-431.el6.x86_64

2、启动RPC服务

[root@localhost ~]# /etc/init.d/rpcbind status

rpcbind is stopped

[root@localhost ~]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@localhost ~]# /etc/init.d/rpcbind status

rpcbind (pid  25679) is running...

3、查看挂载情况

[root@localhost ~]# showmount -e 192.168.1.2

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

[root@localhost ~]# ping 192.168.1.2

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.

64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.745 ms

64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.532 ms

64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.470 ms

64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.522 ms

^C

--- 192.168.1.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3060ms

rtt min/avg/max/mdev = 0.470/0.567/0.745/0.106 ms

[root@localhost ~]# iptables -F           关闭服务与客户端防火墙

[root@localhost ~]# showmount -e 192.168.1.2

Export list for 192.168.1.2:

/data/bbs 192.168.1.3

4、客户端进行NFS挂载

[root@localhost ~]# mount -t nfs 192.168.1.2:/data/bbs /mnt

[root@localhost ~]# df -h

Filesystem                    Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root   18G  3.3G   14G  20% /

tmpfs                         491M   72K  491M   1% /dev/shm

/dev/sda1                     485M   35M  426M   8% /boot

192.168.1.2:/data/bbs          50G  3.5G   44G   8% /mnt

5、测试共享

服务端查看具体目录权限

[root@Centos /]# ls -ld data/bbs/

drwxr-xr-x. 2 root root 4096 Aug 21 10:07 data/bbs/

表明其它用户具有读与执行权限

[root@Centos /]# cd data/bbs/

[root@Centos bbs]# touch text.txt

[root@Centos bbs]# mkdir textdir

[root@Centos bbs]# ls

textdir  text.txt

客户端测试

[root@localhost ~]# cd /mnt

[root@localhost mnt]# ls -ll

total 4

drwxr-xr-x. 2 root root 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 root root    0 Aug 21 05:39 text.txt

[root@localhost mnt]# touch 123.txt

touch: cannot touch `123.txt': Permission denied ----> 权限不足

所以需要在服务端改变其它用户的访问权限才可以

[root@Centos /]# chmod 777 data/bbs/

[root@Centos /]# ls -ld data/bbs/

drwxrwxrwx. 3 root root 4096 Aug 21 10:39 /data/bbs/

然后在客户端测试

[root@localhost mnt]# pwd

/mnt

[root@localhost mnt]# touch 123.txt

[root@localhost mnt]# ls -ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:44 123.txt

drwxr-xr-x. 2 root      root      4096 Aug 21 05:39 textdir

-rw-r--r--. 1 root      root         0 Aug 21 05:39 text.txt

[root@localhost mnt]# echo "123">>123.txt

[root@localhost mnt]# cat 123.txt

123

 

经过测试表明,客户端也可以正常访问共享目录与文件,同时也具有读写权限,那么问题又来了,客户端是通过什么用户名来访问服务器端的呢,刚刚修改的权限是征对其它用户(除了文件、目录的所有者与所属组外的用户),如果需要限制访问共享目录,其实这个权限是具有很大安全隐患的

那么我们来服务端看看到底是授权什么用户来访问共享目录呢???

[root@Centos /]# cat /var/lib/nfs/etab

/data/bbs       192.168.1.3(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

这里我们查看这个uid/gid都为65534的用户是哪个???

[root@Centos /]# grep 65534 /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

所以服务端我们将权限重新修改如下

[root@Centos /]# chown -R nfsnobody:nfsnobody data/bbs/

[root@Centos /]# ls -ld data/bbs/

drwxrwxrwx. 3 nfsnobody nfsnobody 4096 Aug 21 10:44 data/bbs/

客户端查看配置生效情况如下

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:39 text.txt

但是细心的朋友们肯定也发现了,这样还是不安全,因为所有相同的版本的系统都会默认存在这一个用户nfsnobody,那么对限制访问还是没有做到万无一失,因此这里就出现了更改默认用户的做法,将默认用户更改成其它用户

其服务端配置如下

首先得添加用户并禁止登陆指定它的UID

[root@Centos /]# useradd -s /sbin/nologin -M -u 3000 nfsuser

[root@Centos /]# tail -1 /etc/passwd

nfsuser:x:3000:3000::/home/nfsuser:/sbin/nologin

修改NFS配置

[root@Centos /]# echo "#####config for nfs-server 2016-8-21">/etc/exports

清空配置并加上一行注释信息

[root@Centos /]# echo "/data/bbs       192.168.1.3(rw,sync,all_squash,anonuid=3000,anongid=3000)">>/etc/exports         添加相关配置

[root@Centos /]# tail -2 /etc/exports            检查配置情况

#####config for nfs-server 2016-8-21

/data/bbs       192.168.1.3(rw,sync,all_squash,anonuid=3000,anongid=3000)

因此客户端同样也需要添加用户

[root@localhost mnt]# useradd -s /sbin/nologin -M -u 3000 nfsuser

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:39 text.txt

测试发现还是原来默认的用户,这是因为服务端虽然改了NFS的配置,但是共享目录与文件的相关配置仍然是默认的所以上服务端查看下目录权限如下

[root@Centos bbs]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 10:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 10:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 10:39 text.txt

因此需要对/data/bbs/这个共享目录进行更改

[root@Centos bbs]# chown -R nfsuser.nfsuser /data/bbs/

[root@Centos bbs]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 10:44 123.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 10:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 10:39 text.txt

 

最后登陆到客户查看配置生效情况如下

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 05:39 text.txt

[root@localhost mnt]# touch 234.txt

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 05:44 123.txt

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 06:27 234.txt

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 06:17 23.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 05:39 text.txt

表明配置正确,且达到需求,此时访问共享目录的权限就更改为nfsuser,其它主机如果没有添加此用户是无法正常访问NFS的共享目录与文件的,安全性比较高。至此整个安装与布署过和结束。

Linux系统NFS网络文件系统的更多相关文章

  1. Linux系统——NFS网络文件系统

    在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资 ...

  2. linux初学者-NFS网络文件系统篇

    linux初学者-NFS网络文件系统篇 在上一篇的SAMBA篇中介绍了linux系统和windows系统之间共用的网络文件系统CIFS,主要用于客户端是windows的情况.在linux系统之间,所用 ...

  3. Linux之NFS网络文件系统

    NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络资源共享.在NFS的应用中,本地NFS的客户端应用可 ...

  4. tiny4412 linux+qtopia nfs网络文件系统的挂载

    1,首先确定uboot启动内核的bootargs参数 Linux-CommandLine = root=/dev/nfs nfsroot=192.168.1.131:/home/tiny4412/ro ...

  5. Linux基础学习-NFS网络文件系统实时文件共享

    NFS网络文件系统 如果大家觉得Samba服务程序的配置太麻烦了,那么你共享文件的主机都是Linux系统,那么推荐大家在客户端部署nfs服务来共享文件.nfs(网络文件系统)服务可以将远程Linux系 ...

  6. [学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

    本文转自迅为:http://www.topeetboard.com 学习平台:iTOP-4412开发板 本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统. 我们使用的软硬件环境是 ...

  7. linux初学者-CIFS网络文件系统篇

    linux初学者-CIFS网络文件系统篇 CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享.CIFS可以在linux系统和windows系统之间共享文件,因此这种文件系统主要用于客户端是 ...

  8. NFS(网络文件系统)

    NFS(网络文件系统) 1.关于NFS介绍 1.1NFS在企业中的应用场景 在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放 ...

  9. NFS 网络文件系统挂载在A8板子上

    我承认自己是菜鸟,没什么网络知识就来搞挂载nfs网络文件系统,花费了5天的时间才把nfs网络文件系统成功挂载在A8板子上,实现了A8板子和虚拟机的文件共享.分享一下个人经验: 以下是基于nfs已经完成 ...

随机推荐

  1. 简单生成svg文件

    this.fileSaveSync = function (file, data) { var fs = require('fs-extra'); fs.writeFileSync(file, dat ...

  2. .Net 转战 Android 4.4 日常笔记目录

    .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建 .Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 .Net 转战 Android 4.4 ...

  3. Power BI官方视频(1) Power BI Desktop 7月份更新功能概述

    2016年7月,Power BI Desktop进行了一些功能更新,提高整体的用户体验.同时也有一些新的和令人兴奋的功能.看看大概介绍,更新功能要点: 本文原文地址:Power BI官方视频(1) P ...

  4. 感恩回馈,《ASP.NET Web API 2框架揭秘》免费赠送

      在继<WCF全面解析(上下册)>.<ASP.NET MVC 4框架揭秘>之后,我的另一本书<ASP.NET Web API 2框架揭秘>( 本书详细信息见< ...

  5. 创建 VXLAN - 每天5分钟玩转 OpenStack(111)

    前面我们讨论了 VXLAN 的理论知识,并且在 ML2 中完成了相关配置.今天将通过 Web UI 创建 vxlan100_net 并观察节点网络结构的变化. 打开菜单 Admin -> Net ...

  6. The network bridge on device VMnet0 is not running

    The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...

  7. 【原】IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)

    网上流传了太多关于合并lib库的方法,自己也尝试过,但大多失败.有感于这种急于解决问题,经过百般尝试后依旧无果的无奈心情,小翁在这里用一个实例来完整阐述如何在mac中合并lib静态库. 这里以移动广告 ...

  8. ubuntu 配置git公钥

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  9. Android 短信监听及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  10. sqlite - java 初学

    进来准备使用一种embedded database,即嵌入式数据库,方便随项目本地存储.目前学习打算是sqlite和H2. document:http://www.runoob.com/sqlite/ ...