nfs 配置

来源:互联网 发布:python 驼峰命名 编辑:程序博客网 时间:2024/04/26 18:39

Linux 搭建NFS服务器

NFS介绍

NFS是分布式计算机系统的一个组成部分,  可实现在异构网络上共享和装配远程文件系统。NFSSUN公司开发,目前已经成为文件服务的一种标准(RFC1904RFC1813)。其最大功能是可以通过网络让不同操作系统的计算机可以共享数据,所以也可以将其看做是一台文件服务器

 

NFS的工作原理

启动NFS文件服务器时,/etc/rc.local会自动启动exportfs程序,指定可以导出的文件或目录,而所能挂载的也只能是其所指定的目录。

NFS是基于XDR/RPC协议的。XDReXternalData Representation,即外部数据表示法)提供一种方法,把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的计算机、操作系统及程序语言中,所有数据代表的意义都是相同的。

 

RPCRemoteProcedure Call,远程程序调用)请求远程计算机给予服务。客户机通过网络传送RPC到远程计算机,请求服务。

NFS运用RPC传送数据的方法有以下几步:

1)客户送出信息,请求服务。

2)客户占位程序把客户送出的参数转换成XDR标准格式,并用系统调用把信息送到网络上。

3)信息经过网络送达远程主机系统。

4)远程主机将接受到的信息传给服务器占位程序。

5)把XDR形式的数据,转换成符合主机端的格式,取出客户发出的服务请求参数,送给服务器。

6)服务器给客户发送服务的逆向传送过程。

 

NFS安装

安装NFS

NFS需要5RPM,分别是:

setup-*:共享NFS目录在/etc/exports中定义

initscripts-*:包括引导过程中装载网络目录的基本脚本

nfs-utils-*:包括基本的NFS命令与监控程序

portmap-*:支持安全NFSRPC服务的连接

quota-*:网络上共享的目录配额,包括rpc.rquotad(这个包不是必须的)

 

基本监控程序

要顺利运行NFS,至少需要五个Linux服务,它们各有不同的功能,有的负责装载服务,有的保证远程命令指向正确的位置。这些服务通过/etc/rc.d/init.d目录中的nfs,nfslockportmap脚本启动。下面简单介绍每个监控程序:

 

(1) 基本NFS

rpc.nfsdNFS服务器监控程序,它通过/etc/rc.d/init.d目录中的nfs脚本启动。NFS监控程序还启动rpc.mountd装载监控程序,并导出共享目录。

(2) RPC装载

可以用mount命令连接本地目录或网络目录,但还需要一个装载NFS目录的特殊监控程序rpc.mountd

(3) 端口映射器

portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。

(4) 重新启动与statd

NFS服务需要中断或者重新启动时,rpc.statd监控程序和rpc.lockd在服务器重新启动之后使客户机恢复NFS连接。

(5) 锁定

通过共享NFS目录打开文件时,锁定可以使用户不能覆盖同一个文件。锁定通过nfslock脚本并使用rpc.lockd监控程序启动运行。

 

配置NFS

以下以本人使用环境为例:

共两台Linux主机,A机版本为rhel5.5B机版本为rhel5.5。网络连接,地址解析正常。系统相关配置如下:

A

1.主机名:rhel1

2.iptables版本:1.3.5

3.网卡eth0IP地址为192.168.13.101/24

4.作为NFS服务器

 

 

B

1.主机名:rhel2

2.iptables版本:1.3.5

3.网卡eth0IP地址静态配置为192.168.13.102/24

4.网卡eth1IP地址静态配置为192.168.10.200/24

5.路由器

 

C

1.主机名:rhel3

2.iptables版本:1.3.5

3.网卡eth1IP地址根据实验需求切换相应网段

 

需求:

1/media 目录

共享/media 目录,允许所有客户端访问该目录并只有只读权限。

2/nfs/public 目录

共享/nfs/public 目录,允许192.168.13.0/24 192.168.10.0/24 网段的客户端访问,并且对此目录只有只读权限。

3/nfs/works 目录

共享/nfs/works 目录,192.168.13.0/24 网段的客户端具有只读权限,并且将root 用户映射成匿名用户。

4/nfs/test 目录

共享/nfs/test 目录,所有人都具有读写权限,但当用户使用该共享目录时都将帐号映射成匿名用户,并且指定匿名用户的UID GID 都为65534

5/nfs/security 目录

共享/nfs/security 目录,仅允许192.168.13.102 客户端访问并具有读写权限。

 

解决方案

1建立相应目录;

 

2NFS服务器上编辑/etc/exports

A机上通过vi/etc/exports,将共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享。书写规则是:(每个共享规则一行)。

共享目录主机(参数)

任何共享目录都要指定syncasync,默认是sync模式。也就是指定文件写入磁盘之前共享NFS目录是否响应命令。

下面是一些NFS共享的常用参数:

ro只读访问

rw读写访问

sync所有数据在请求时写入共享

asyncNFS在写入数据前可以相应请求

secureNFS通过1024以下的安全TCP/IP端口发送

insecureNFS通过1024以上的端口发送

wdelay如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

hideNFS共享目录中不共享其子目录

no_hide共享NFS目录的子目录

subtree_check如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check和上面相对,不检查父目录权限

all_squash共享文件的UIDGID映射匿名用户anonymous,适合公用目录。

no_all_squash保留共享文件的UIDGID(默认)

root_squashroot用户的所有请求映射成如anonymous用户一样的权限(默认)

no_root_squasroot用户具有根目录的完全管理访问权限

anonuid=xxx指定NFS服务器/etc/passwd文件中匿名用户的UID

anongid=xxx指定NFS服务器/etc/passwd文件中匿名用户的GID

 

注:

使用exportfs命令当/etc/exports内容发生改变时,挂载、卸载或更新共享目录列表。

使用showmount命令可以查看本机或远程共享目录列表。

 

配置完/etc/exportfs配置文件后,需要查看系统的iptables/etc/hosts.allow/etc/hosts.deny是否设置了正确的NFS访问规则。

 

3配置TCP WRAPPER

编辑A机上的/etc/hosts.allow,添加如下内容:

portmap:120.196.245.0/24

portmap:192.168.13.0/24

编辑A机上的/etc/hosts.deny,添加如下内容:

portmap:ALL

 

4设置nfs相关服务使用固定端口;

由于在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:

1.portmap端口111udp/tcp

2.nfsd端口2049udp/tcp

3.mountd端口"xxx"udp/tcp

系统RPC服务在nfs服务启动时默认会为mountd动态选取一个随机端口(32768--65535

另外,nfs中需要通讯的服务还有rpc.lockdrpc.statd

通过编辑A机上#vi/etc/sysconfig/nfs,找到以下几项并按如下值进行修改;

MOUNTD_PORT="4002"

STATD_PORT="4003"

LOCKD_TCPPORT="4004"

LOCKD_UDPPORT="4004"

设置mountd,statd,lockd为固定端口

 

5开启防火墙相应放行策略;

A机上的iptables设置如下;

基本规则:

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTAHLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

 

portmap服务相关规则:

iptables -A INPUT -p tcp --dport 111 -m state --state NEW -j ACCEPT

iptables -A INPUT -p udp --dport 111 -m state --state NEW -j ACCEPT

 

NFS服务相关规则:

iptables -A INPUT -p TCP --dport 2049 -m state --state NEW -j ACCEPT

iptables -A INPUT -p UDP --dport 2049 -m state --state NEW -j ACCEPT

iptables -A INPUT -p TCP --dport 4002:4004 -m state --state NEW -j ACCEPT

iptables -A INPUT -p UDP --dport 4004 -m state --state NEW -j ACCEPT

/etc/init.d/iptables save

 

启动NFS

1A机上启动NFSRPC服务

/etc/init.d/portmap start

/etc/init.d/nfs start

 

2检查NFS的运行级别:

chkconfig—list portmap

chkconfig—list nfs

 

3根据需要设置在相应的运行级别自动启动NFS

chkconfig--level235 portmap on

chkconfig--level235 nfs on

 

结果测试

NFS 服务器本机测试(A

1、使用rpcinfo 命令检测nfs 是否使用了固定端口

rpcinfo -p

2、检测nfs rpc 注册状态

rpcinfo -u 主机名或IP 地址 进程

rpcinfo-u 192.168.13.101 nfs

rpcinfo-u 192.168.13.101 mount

 

3、查看共享目录和参数设置

cat/var/lib/nfs/etab

4、使用showmount 命令查看共享目录发布及使用情况

showmount -e  showmount-e IP 地址

showmount -d  或者showmount-d IP 地址

Linux 客户端测试(C

1、查看nfs 服务器共享目录

showmount-e 192.168.13.101

 

2、挂载及卸载NFS 文件系统

mount-t nfs NFS 服务器IP 地址或主机名:共享名本地挂载点

1)   192.168.10.0/24这个网段的主机对mediapublic有只读权限,对test有读写权限,但会映射uidgid变成65534

 

mediapublic提示只读

root用户挂载test后,新建的bb文件,用户属主和属组都是65534,即匿名用户nfsnobody,实际应用用户映射改变uidgid时,不会映射到65534,这里仅为方便实验而已,一般是映射为其他普通用户,因为all_squash,anonuid=65534,anongid=65534等效于root_squash

 

2)   192.168.13.0/24mediapublictest情况与192.168.10.0/24类似,这几个步骤忽略。对于work目录会将root用户映射为匿名用户,所以只测试work目录,使用work挂载点时,会自动将root映射为匿名用户。

 新建文件aaa时,自动映射为nfsnobody用户

 

3)    192.168.13.102访问security,并具有读写权限。

 

3、启动自动挂载nfs 文件系统

vim/etc/fstab

仅添加一项示例,修改/etc/fstab,添加如下语句,并保存重启即可实现自动挂载。

温馨提示:整个实验过程,请确保目录权限已配置正确,防火墙已开放相应访问策略,如/nfs/test对所有人都有读写权限,但如果test目录并没有配置o+rw文件权限时,即使nfs服务允许读写也是没有任何作用的。