CentOS下NFS服务器配置实例

LINUX下NFS的配置与安全设置

Redhat Linux NFS配置
    NFS简介:
    NFS是网络文件系统的简写(network file system),主要用在linux或unix环境中,是有sun公司开发,并于1984年推出的一个RPC服务系统。
    NFS功能介绍:
    他可以将多个目录或者单个目录进行发布,例如我们在网刻系统的时候可以用NFS来共享光盘镜像,NFS是以发布目录的方式将文件进行发布,而客户端是以挂载的方式进行访问。客户端可以节省本地空间,将数据存放在nfs服务器上。NFS也可以针对但个用户以及多用户设置不同的访问权限。
    详细配置步骤:
    安装NFS必须要开启的服务有:nfs、portmap、
    NFS的配置相对于其他服务是比较简单的,我们依然还是要注意防火墙以及SElinux,
    首先我们检查软件是否已安装,这里我已经都安装了。
    在安装redhat linux 时这些包默认就已被安装,如果你检查发现没有安装,可以使用一下命令进行安装;
    #rpm –ivh nfs*
    #rpm –ivh portmap
    配置NFS,配置文件在/etc/exports
    首先我们使用vim打开/etc/exports 我们会发现这是一个空文件,里面没有任何内容。如果没有此文件,我们可以新创建一个,
    这里我们举个例子来完成对NFS的配置,
    例如:公司有多台计算机,而其中只有一台服务器有光驱,而我们其他的计算机也想安装光盘上的软件,现在我们就可以用NFS来实现。例如我们的服务器光驱挂载在/media上,接下来我们来编辑配置文件来实现以上的功能。
    依然使用vi打开配置文件编辑以下内容:
 
    然后保存退出,这个文件里我们只需编辑俩个字段:前面的为共享目录,后面的为哪些人可以访问以及访问权限,*代表所有人(ro)为只读权限。
    启动服务
然后我们可以使用exportfs命令查询输出的目录
    客户端挂载
    需要启动服务 portmap
    使用mount命令挂载,例如我/下有nfs目录,我将挂载到nfs目录上
   
    然后我们就可以访问光盘目录了,
    反挂载使用umount /nfs
    我们还可以使用shoumount --export 192.168.0.7   查看NFS所发布的目录
    如果您想共享其他的目录也是安装同样的方法,注意权限问题,目录权限和共享权限。
    一些相关共享权限:
    ro 客户端为只读权限
    rw 客户端为读写权限
    root_sqush 客户端使用root访问时映射为nobady (默认选项)
    no_root_squash 客户端映射为root访问
    启动服务的其它方式:/etc/rc.d/init.d/portmap start   /etc/rc.d/init.d/nfs start
    部分配置文件细节
    exports文件内容格式:
    <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
    1.输出目录:
    输出目录是指NFS系统中需要共享给客户机使用的目录;
    2.客户端:
    客户端是指网络中可以访问这个NFS输出目录的计算机
    客户端常用的指定方式
    指定ip地址的主机 192.168.0.200
    指定子网中的所有主机 192.168.0.0/24
    指定域名的主机 a.liusuping.com
    指定域中的所有主机 *.liusuping.com
    所有主机 *
    3.选项:
    选项用来设置输出目录的访问权限、用户映射等。NFS主要有3类选项:
    访问权限选项
    设置输出目录只读 ro
    设置输出目录读写 rw
    用户映射选项
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
    no_all_squash 与all_squash取反(默认设置);
    root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
    no_root_squash 与rootsquash取反;
    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服务器也不检查其父目录的权限,这样可以提高效率;
    /home/work 192.168.0.*(rw,sync,no_root_squash)
    内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。
    /home/work 也称为服务器输出共享目录。
    括号内的参数意义描述如下:
    rw:读/写权限,只读权限的参数为ro;
    sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。
    no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
    接着执行如下命令,启动端口映射:
    # /etc/rc.d/init.d/portmap start
    最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:
    # /etc/rc.d/init.d/nfs start
    用户也可以重新启动Linux 服务器,自动启动Linux NFS 服务。
    在NFS 服务器启动后,还需要检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。
    我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux 服务器上运行如下命令:
    # mount –t nfs 192.168.0.20:/home/work /mnt
    # ls /mnt
    命令将Linux 服务器的NFS 输出共享目录挂载到/mnt 目录下,因此,如果NFS 正常工作,应该能够在/mnt 目录看到/home/work 共享目录中的内容。
    客户端 mount命令   mount –t nfs 192.168.0.20:/home/work /mnt/nfs –o nolock
    简单脚本执行
    host启动nfs:
    snfs
    #!/bin/bash
    ifconfig eth0 192.168.0.20
    /etc/rc.d/init.d/portmap start
    /etc/rc.d/init.d/nfs start
    嵌入式目标机挂载nfs:
    mnfs:
    #!/bin/sh
    mount -t nfs 192.168.0.20:/home/work/nfs /mnt/nfs -o nolock
    echo "nfs ok!"
    在客户端查看NFS各种状态
    showmount -e 可看有分享哪些目录
    # showmount -a 可看出所有的 mount
    # showmount -e 172.16.75.1
    在服务端 显示当前主机NFS服务器中已经被NFS客户机挂载使用的共享目录    # showmount -d
    检查NFS的运行级别:
    # chkconfig --list portmap
    # chkconfig --list nfs
    根据需要设置在相应的运行级别自动启动NFS:
    # chkconfig --level 235 portmap on
    # chkconfig --level 235 nfs on
    客户端开机自动挂载
    通过修改/etc/fstab文件可以实现开机自动挂载nfs目录
    [root@linux-b nfs1]# vim /etc/fstab
    /dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
    LABEL=/boot             /boot                   ext3    defaults        1 2
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    /dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
    192.168.0.231:/nfs/frank        /mnt/nfs1       nfs     defaults        0 0
    1、在配置NFS服务器之前用ping命令确保两个linux系统正常连接,如果无法连接关闭图形界面中的防火墙#service iptables stop
    2、更改完“exports”文件后要输入exportfs –rv ,使得“exports”文件生效。
    3、检查nfs服务是否开启,默认是关闭的。


###############################################################################################################

一,应用环境介绍:

用途

操作系统

IP地址

服务器端

CentOS 5.2 X86_64

192.168.0.121

客户端

CentOS 5.2 X86_64

192.168.0.122

 

 

二,NFS相关软件的安装:

[root@youxia122 ~]# yum -y install portmap nfs*

 

 

三,服务器端配置:

1,创建共享的目录:

[root@youxia121 data]# mkidr /usr/local/data/

 

2,修改NFS配置文件:

[root@youxia121 data]# vi /etc/exports

/usr/local/data/ 192.168.0.122(rw,no_root_squash,no_all_squash,sync)

 

注:配置文件说明:

/usr/local/data/ 为共享的目录,使用绝对路径。

192.168.0.122(rw,no_root_squash,no_all_squash,sync) 为客户端的地址及权限,地址可以是一个网段,一个IP地址或者是一个域名,域名支持通配符,如:*.youxia.com,地址与权限中间没有空格,权限说明:

rw:read-write,可读写;

ro:read-only,只读;

sync:文件同时写入硬盘和内存;

async:文件暂存于内存,而不是直接写入内存;

no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。

root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;

all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;

anongid:匿名用户的GID值。

NFS服务器配置:
        创建一个目录用于共享,然后再用vi /etc/exports编辑文件,在里面
添加内容,格式如下:
 [共享的目录] [主机名或ip(参数1,参数2)] [主机名或ip(参数1,参数2)] ...
NFS常用到的参数有:
 ro  只读
 rw  读写
 sync  所有数据在请求时写入共享
 async  nfs在写入数据前可以相应的请求
 secure  nfs通过1024以下端口发送
 insecure nfs通过1024以上端口发送
 wdenlay  有多个用户写入nfs目录,则归组写入
 no_wdelay 有多个用户写入nfs目录,则立即写入
 hide  不共享子目录
 no_hide  共享子目录
 subtree_check 如果共享/usr/bin之类的子目录,强制nfs检查父目录的权限
 no_subtree_check不检查父目录权限
 all_squash 共享文件的uid和gid映射匿名用户anonymous,适用公用目录
 no_all_squash 保留共享文件的uid和gid
 root_squash root用户的所有请求映射成和anonymous用户一样的权限
 no_root_squash root用户具有根目录的完全管理访问权限
 anonuid=xxx 指定nfs服务器/etc/passwd文件匿名用户的uid
 anongid=xxx 指定nfs服务器/etc/passwd文件匿名用户的gid
配置完成后要重启nfs服务例如:/etc/init.d/nfs restart

在linux客户机上要查看nfs资源可以用showmount -e 服务端ip地址,测试是否通讯成功

如果要用windows系统不能直接访问NFS服务器,如果要共享可以用samba服务器。

 

四,启动NFS服务器并进行测试:

1,启动NFS服务器:

[root@youxia121 data]# service portmap start

启动 portmap:[确定]

[root@youxia121 data]# service nfs start

启动 NFS 服务: [确定]

关掉 NFS 配额:[确定]

启动 NFS 守护进程:[确定]

启动 NFS mountd:[确定]

 

2,在客户端进行测试:

创建需要挂载的目录:

[root@youxia122 local]# mkdir /usr/local/data/

 

执行挂载命令:

[root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data  -o proto=tcp -o nolock

 

在客户端创建一个测试文件并进行检查:

[root@youxia122 ~]# cd /usr/local/data/

[root@youxia122 data]# echo "this is a test" >> /usr/local/data/hehehe

[root@youxia122 data]# ll -h

总计 8.0K

-rw-r--r-- 1 root root 15 02-23 16:47 hehehe

 

在服务器端检查:

[root@youxia121 usr]# ll -h /usr/local/data/

总计 8.0K

-rw-r--r-- 1 root root 15 02-23 16:47 heheh

 

 

五,我在配置中遇到的问题:

1,在启动NFS服务器的时候遇到的一个问题如下,原因在于NFS配置文件中地址与权限中间多了一个空格,去掉空格重新启动即可:

[root@youxia121 local]# service nfs restart

关闭 NFS mountd:[确定]

关闭 NFS 守护进程:[确定]

关闭 NFS 服务: [确定]

启动 NFS 服务: exportfs: No options for /usr/local/data/ 192.168.0.122: suggest 192.168.0.122(sync) to avoid warning

exportfs: No host name given with /usr/local/data (rw,no_root_squash,no_all_squash,sync), suggest *(rw,no_root_squash,no_all_squash,sync) to avoid warning

[确定]

关掉 NFS 配额:[确定]

启动 NFS 守护进程:[确定]

启动 NFS mountd:[确定]

 

 

2,客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:

[root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data

mount.nfs: Input/output error

 

解决方法:mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data  -o proto=tcp -o nolock

 

本篇文章没有结论,只有思路。有兴趣的自己做做吧。


所有的事情都有个缘由的,这个事情我就比较烦。用来NFS,以前觉得简单,所以没有特别在意。这次想用NFS,并且打开iptables的情况下,就发现了问题。

问题描述:已经在Server端iptables上,打开portmap的端口111,后来得知NFS 4用的端口是2049,当时使用图形界面配置,所以也打开了。但是客户端就是错误。showmount -e serverIP的时候报mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive,关闭iptalbes就OK。再查,知道了。NFS和RPC的关系得知了一些NFS在2、3版本的时候的一些相关进程。(这些具体进程,可以看我的参考文档),总之,当使用3的版本时,要将相关联的端口打开。而那几个端口是随机的,如果想指定为固定端口,需要在/etc/sysconfig/nfs里面定义。而NFS 4的版本是不需要portmap的。但是需要配合krb5来做。很麻烦,都是思路。除非真的用。我是不想弄了。
写写思路就得了。

几个命令用得着:
man -k nfs  
exportfs -r
nfsstat


引用

参考文档:
1: RHEL5 Deployment_Guide.eng.pdf
2: http://slackwiki.org/NFS_and_Firewall
3: http://www.guyong.cn/blog/article.asp?id=168
4: http://wiki.linux-nfs.org/wiki/index.php/Main_Page



忍不住,还是处理了。具体操作如下:

修改/etc/sysconfig/nfs
[root@kook ~]# grep -v ^# /etc/sysconfig/nfs
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002
STATD_PORT=4003
[root@kook ~]# cat /etc/sysconfig/iptables
.................
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4001 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4001 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4002 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4002 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4003 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4003 -j ACCEPT
.................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值