本文主要介绍Linux下NFS网络文件系统的基本使用教程。配置非常详细。它还提供了一些常见错误的解决方案以及需要注意的事项。强烈推荐,有需要的朋友可以参考一下。16-03-180.什么是NFS
NFS是NetworkFileSystem的缩写,由Sun公司首先开发。它最大的功能就是可以让不同的机器、不同的操作系统通过网络相互共享单个文件。因此,也可以简单地看成是一个文件服务器!此NFS服务器允许您的PC将网络上远程NFS主机共享的目录挂载到本地计算机。因此,对于本地机器来说,远程主机上的目录看起来就像是自己的分区!
虽然NFS有自己的协议和端口号,但在传输数据或其他相关消息时,NFS使用一种称为远程过程调用的协议来协助NFS本身。作品!
1.NFS至少有两个主要部分:一台服务器和一个客户端。客户端远程访问服务器上存储的数据。为了正常工作,需要配置并运行一些进程。
NFS服务器安装:
检查linux系统是否安装了nfs-utils和portmap包
命令
代码如下:#rpmqnfs-utilsportmap检查NFS服务器是否启动:
命令
代码如下:#servicenfsstarus
#serviceportmapstatus如果服务器没有启动,则启动服务
命令
代码如下:#servicenfsstart
#服务端口映射start2.RPC
当我们使用某些服务进行远程连接时,一些信息,比如主机的IP、服务的端口号、对应服务的PID等,都需要进行管理和对应!这些管理端口对应和服务关联的任务就是远程过程调用的任务。NFS本身的服务并没有提供数据传输协议,但是NFS允许我们共享文件。造成这种情况的原因是NFS使用了一些其他相关的传输协议!这些传输协议使用了所谓的RPC功能!这意味着NFS本身就是一个使用RPC的程序!说得通俗一点,NFS也可以看做是一个RPC服务器!同时需要注意的是,在某些情况下,不仅运行NFS的Server需要激活RPC服务,需要挂载NFS分区的Client机器也需要同时激活RPC!这样Server和Client就可以通过RPC协议来对应程序端口了!NFS主要管理的是共享目录,至于数据的传输,直接丢给RPC协议来操作就可以了!
3.NFS激活RPC守护进程
rpc.nfsd:该守护进程的主要功能是管理Client是否可以登录主机。它还包括登录ID的标识。
rpc.mountd:这个守护进程的主要功能是管理NFS文件系统!当客户端通过rpc.nfsd成功登录到主机后,在使用NFS服务器提供的文件之前,还会经过文件使用权限的认证过程)!他会读取NFS配置文件/etc/exports来比较Client的权限。通过这一关后,Client就可以获得使用NFS文件的权限!
4.NFS需要两个包,分别是:
nfs实用工具
它是一个包,提供了两个NFS守护进程rpc.nfsd和rpc.mountd,以及其他相关文档、文档、可执行文件等!这是NFS的主包
端口映射
刚才提到,我们的NFS其实可以看成是一个RPC服务器程序。在激活任何RPC服务器程序之前,我们需要做端口映射工作。这个工作其实就是“portmap”负责这个服务的!换句话说,在激活任何RPC服务器之前,我们需要激活portmap!那么这个端口映射到底是做什么的呢?就像这个服务的名字一样,哈哈!这只是端口的映射!例如:当Client尝试使用RPC服务器提供的服务时,由于Client需要获得可连接的端口才能使用RPC服务器提供的服务,因此Client首先会与端口映射进行通信。你好!您能否通知我并给我一个端口号,以便我可以通过RPC与您联系?』这时,portmap会自动通知客户端它所管理的端口映射,以便它可以连接到服务器!所以:“在激活NFS之前,请先激活portmap!”』
5.NFS服务器端设置:
a)/etc/exports
共享目录主机名1或IP1主机名2或IP2
b).参数
rw:可擦除权限
ro:只读权限
no_root_squash:登录NFS主机并使用共享目录的用户。如果他是root,那么他就拥有这个共享目录的root权限!该项目“极不安全”,不建议使用!
root_squash:当登录NFS主机并使用共享目录的用户为root时,该用户的权限会被压缩为匿名用户,通常他的UID和GID会变成nobody的身份;
all_squash:无论登录NFS的用户身份如何,他的身份都会被压缩为匿名用户,通常是nobody!
anonuid:前面提到的*_squash的匿名用户的UID设置值通常是nobody,但是你可以自己设置UID值!当然,这个UID必须存在于你的/etc/passwd中!
anongid:与anonuid相同,但成为组ID。
sync:数据同时写入内存和硬盘
async:数据会暂时存储在内存中,而不是直接写入硬盘。
6.设置实例:
a)/tmp*(rw,no_root_squash)//*表示所有IP都可以访问
b)/tmp*(rw)
/home/public192.168.0.*(rw)*(ro)//下面两行效果相同
/home/public192.168.0.0/24(rw)*(ro)
c)/home/test192.168.0.100(rw)//仅针对某台机器设置权限
d)/home/linux*.linux.org(rw,all_squash,anonuid=40,anongid=40)//当*.linux.org登录到这个NFS主机,并在/home/linux下写入文件时,所有者该文件的所有组都将成为/etc/passwd中对应UID40的用户。
7.权限问题
假设/etc/exports中的内容是
代码如下:
#vi/etc/exports
/tmp*(rw,no_root_squash)
/home/public192.168.0.*(rw)*(ro)
/home/测试192.168.0.100(rw)
/home/linux*.linux.org(rw,all_squash,anonuid=40,anongid=40)假设我们在客户端192.168.0.100登录到这台NFS主机,那么
情况一:192.168.0.100的:账号进行身份测试。同时,还有NFS主机上的账户测试。
A)。由于NFS主机的/tmp权限为-rwxrwxrwt,所以我在/tmp下有访问权限,文件属主为test。
b).在/home/public中,由于我有读写权限,如果/home/public目录下的NFS主机的权限开放测试写入,那么就可以读写,每个写入该文件的人都可以这是测试。如果NFS主机的/home/public没有用户test的写权限,则无法写入。即使/etc/exports包含rw,它也不起作用。
C)。/home/test中的权限与/home/public状态相同,NFS主机的/home/test需要有开放的权限才能进行测试。
d).在/home/linux下,无论何种用户,身份都会变为UID=40的账户
情况2:如果我们在192.168.0.100的身份是test2,但是NFS主机没有账号test2
A)。在/tmp下仍然可以写入,但是写入的文件的所有者变成了nobody。
b).是否可以写入/home/public和/home/test取决于/home/public的权限,但身份会更改为nobody。
c)/home/linux下的身份仍然成为UID=40的帐户。
在情况三中,192.168.0.100处的:的身份是root。
A)。可以写入到/tmp中,但是由于no_root_squash参数改变了默认的root_squash设置值,因此写入/tmp中的文件的人是root。
b)./home/public下的身份被压缩为nobody。因为默认属性有root_squash,所以文件所有者变成nobody。
c)./home/test与/home/public相同。
d)在/home/linux中,root的身份也被压缩为UID=40的用户。
8.启动服务portmap、nfs
代码如下:
#/etc/rc.d/init.d/portmap启动/etc/exports文件中的所有设置
-r:重新挂载/etc/exports中的设置,同时更新/etc/exports和/var/lib/nfs/xtab中的内容
-u:卸载目录
-v:导出时在屏幕上显示共享目录。
例子
代码如下:
#exportfs-rv//再次导出
#exportfs-au//卸载全部10个,可以查看/var/lib/nfs/xtab中各个目录的共享权限,如:
/tmpnode3
为什么anonuid=-2?呵呵!其实就是说改变65536-2的值,也就是65534的UID!检查/etc/passwd,你会发现,哇!事实证明它不属于任何人。
11.showmount命令
语法:showmount[-ae]主机名
-a:显示当前主机和客户端使用的目录的状态。
-e:显示主机名的/etc/exports中的共享目录
12.查看激活的端口号
代码如下:
#netstat-utlnnfs自己打开的端口是2049端口!是NFS主要生成的端口NFS服务器。我们之前提到过,它是一种RPC服务器,NFS提供了多种程序。因此,需要激活多个端口!而且,这些端口是“随机生成的”,这意味着端口号不会是固定的!每次重启nfs,都会得到不同的端口号!那么客户端如何知道连接到哪个端口来调用所需的程序呢?呵呵!那就是sunrpc的portmap服务生成的端口号的作用!Client首先会连接sunrpc端口来知道应该去哪个端口去调用需要的程序!因此,rpc.xxxx这样的守护进程自然不需要有固定的端口号!
NFS客户端设置
代码如下:
#mount-tnfs主机名(或IP):/目录/挂载点完成,就这么简单
为了担心意外执行NFS端挂载的SUID权限文件的程序,root可以通过更安全的方式挂载NFS共享的目录。你可以
代码如下:#mount-tnfs-onosuid,ro主机名:/目录/mountponit可能出现的问题:
1、权限设置不一致
2.忘记激活portmap,此时会报错:
mount:RPC:端口映射器故障-RPC:无法接收或
mount:RPC:程序未注册
然后,启动portmap并重新启动nfs
代码如下:
#服务端口映射启动
#servicenfsrestart3.被防火墙杀死
重置防火墙,包括iptables和TCP_Wrappers。由于端口映射已激活,因此必须提供端口111。因此,在iptables规则中,添加:
代码如下:
iptables-A输入-pTCP--dport111-j接受
iptables-AINPUT-pUDP--dport111-jACCEPT如果还是不行,那就是TCP_Wrappers的问题了。检查/etc/hosts.deny。如果有一行:
代码如下:
ALL:ALL:拒绝然后您必须将:添加到/etc/hosts.allow
代码如下:
portmap:ALL:允许如果我们的NFS是针对内网开发的,外网只针对学术网开发的话,就可以:
代码如下:
iptables-A输入-ieth0-pTCP-s192.168.0.0/24--dport111-j接受
iptables-A输入-ieth0-pUDP-s192.168.0.0/24--dport111-j接受
iptables-A输入-ieth0-pTCP-s140.0.0.0/8--dport111-j接受
iptables-AINPUT-ieth0-pUDP-s140.0.0.0/8--dport111-jACCEPT您还可以使用TCP_Wrappers在/etc/hosts.allow中指定NFS主机的主机IP和名称,例如
代码如下:
#vi/.etc/hosts.allow
端口映射:192.168.0.0/255.255.255.0:允许
端口映射:140.113.23.23:允许
portmap:sdu.edu.cn:allowRPCServer相关命令
代码如下:
rpc信息
#rpcinfo-p主机名(或IP)需要注意的问题:
需要注意的是,由于NFS使用的RPC是在客户端连接主机的,所以如果你的主机想要关闭就会成为一个“不可能完成的任务”!我还不知道正确的原因,但是如果有一个客户端连接到你的服务器,可能需要几个小时才能成功关闭!啊!真或假!不相信吗?否则,你自己试试吧!^_^!因此,建议您在关闭NFS服务器之前“关闭portmap和nfs”!如果无法正确关闭这两个守护进程,请先使用netstat-utlp找出PID,然后使用kill关闭它们!这样才能正常关机成功!请特别注意这一点!
在TurboLinux8.0forAMD64中,挂载NFS时报错为:
portmap:服务器本地主机没有响应,超时
解决方案:
代码如下:
mount-tnfs-onolocknode1:/public/public即添加-onolock参数,原因:
Unfsd不支持NLM锁定,并且会导致lockd守护进程启动
windowsserver2016配置网页web是全球广域网,也称为万维网。它是一个基于超文本和HTTP的全球性、动态交互、跨平台的分布式图形信息系统。本文内容…
[Node.js]Node.js初识系列文章目录文章目录系列文章目录1.什么是Node.js2.下载并安装Node.js1.正常方式2.使用nvm安装3Node…
node_开启本地服务1.下载node.jsNode.js2.创建一个js文件01_server.js,写入以下内容://导入hhtp模块consthttp=r…
大家好,今天小编关注到一个比较有意思的话题,就是关于萤火虫电脑培训的问题,于是小编就整理了2个相关介绍萤火虫电脑培训的解答,让我们一起看看吧。参与萤火计划有什么…
基于springboot的家政服务管理平台总结随着家政服务行业的不断发展以及家政服务在现实生活中的使用和普及,家政服务行业已成为近年来兴起的新兴行业,并能成为人…
2024-05-17 19:03:02
2024-05-17 18:48:41
2024-05-17 18:35:06
2024-05-17 18:00:35
2024-05-17 17:44:49
大家好,今天小编关注到一个比较有意思的话题,就是关于培训机构安全检查方案的问题,…
大家好,今天小编关注到一个比较有意思的话题,就是关于知名眼线培训学校的问题,于是…