linux nfs(linux中nfs的配置)

作者:电脑培训网 2024-04-25 23:51:14 496

本文主要介绍Linux下NFS网络文件系统的基本使用教程。配置非常详细。它还提供了一些常见错误的解决方案以及需要注意的事项。强烈推荐,有需要的朋友可以参考一下。16-03-180.什么是NFS

NFS是NetworkFileSystem的缩写,由Sun公司首先开发。它最大的功能就是可以让不同的机器、不同的操作系统通过网络相互共享单个文件。因此,也可以简单地看成是一个文件服务器!此NFS服务器允许您的PC将网络上远程NFS主机共享的目录挂载到本地计算机。因此,对于本地机器来说,远程主机上的目录看起来就像是自己的分区!

linux nfs(linux中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守护进程启动

相关推荐

热门推荐

猜你喜欢