设为首页 收藏本站
查看: 470|回复: 0

[经验分享] CentOS下NFS服务器配置实例

[复制链接]

尚未签到

发表于 2016-5-10 10:55:00 | 显示全部楼层 |阅读模式
  
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目录
[iyunv@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相关软件的安装:
[iyunv@youxia122 ~]# yum -y install portmap nfs*


三,服务器端配置:
1,创建共享的目录:
[iyunv@youxia121 data]# mkidr /usr/local/data/

2,修改NFS配置文件:
[iyunv@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所有数据在请求时写入共享
asyncnfs在写入数据前可以相应的请求
securenfs通过1024以下端口发送
insecurenfs通过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_squashroot用户的所有请求映射成和anonymous用户一样的权限
no_root_squashroot用户具有根目录的完全管理访问权限
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服务器:
[iyunv@youxia121 data]# service portmap start
启动 portmap:[确定]
[iyunv@youxia121 data]# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额:[确定]
启动 NFS 守护进程:[确定]
启动 NFS mountd:[确定]

2,在客户端进行测试:
创建需要挂载的目录:
[iyunv@youxia122 local]# mkdir /usr/local/data/

执行挂载命令:
[iyunv@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data-o proto=tcp -o nolock

在客户端创建一个测试文件并进行检查:
[iyunv@youxia122 ~]# cd /usr/local/data/
[iyunv@youxia122 data]# echo "this is a test" >> /usr/local/data/hehehe
[iyunv@youxia122 data]# ll -h
总计 8.0K
-rw-r--r-- 1 root root 15 02-23 16:47 hehehe

在服务器端检查:
[iyunv@youxia121 usr]# ll -h /usr/local/data/
总计 8.0K
-rw-r--r-- 1 root root 15 02-23 16:47 heheh


五,我在配置中遇到的问题:
1,在启动NFS服务器的时候遇到的一个问题如下,原因在于NFS配置文件中地址与权限中间多了一个空格,去掉空格重新启动即可:
[iyunv@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协议即可:
[iyunv@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里面定义。而NFS4的版本是不需要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
[iyunv@kook ~]# grep -v ^# /etc/sysconfig/nfs
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002
STATD_PORT=4003
[iyunv@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
.................


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-215102-1-1.html 上篇帖子: CentOS 安装 hadoop(伪分布模式) 下篇帖子: hadoop2.2.0 centos 编译安装详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表