Chinaunix首页 | 论坛 | 博客
  • 博客访问: 513142
  • 博文数量: 114
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 733
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-24 13:40
文章分类
文章存档

2014年(5)

2013年(14)

2012年(95)

分类:

2012-08-04 18:45:43

原文地址:NFS配置 作者:dahai_1981

1、NFS包

NFS需要5个RPM (这些包在RHEL4上默认安装),分别是:
setup-*:    共享NFS目录在/etc/exports中定义
initscripts-*: 包括引导过程中装载网络目录的基本脚本
nfs-utils-*:  包括基本的NFS命令与监控程序
portmap-*:   支持安全NFS RPC服务的连接
quota-*:    网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的)

2、基本监控程序

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

(1) 基本NFS
rpc.nfsd是NFS服务器监控程序,它通过/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监控程序启动运行。

3、配置NFS

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

共享目录 主机(参数)

例如:/backup *.chinaunix.com(ro,sync) master.abc.com(rw,sync)

上面的规则代表将/backup目录以只读同步方式共享给*.chinaunix.com域,并且以读写同步方式共享给master.chinaunix.com主机。任何共享目录都要指定sync或async,也就是指定文件写入磁盘之前共享NFS目录是否响应命令。

下面是一些NFS共享的常用参数:
ro:只读访问
rw:读写访问
sync:所有数据在请求时写入共享
async:NFS在写入数据前可以相应请求
secure:NFS通过1024以下的安全TCP/IP端口发送
insecure:NFS通过1024以上的端口发送
wdelay:如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay:如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide:在NFS共享目录中不共享其子目录
no_hide:共享NFS目录的子目录
subtree_check:如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check:和上面相对,不检查父目录权限
all_squash:共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash:保留共享文件的UID和GID(默认)
root_squash:root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas:root用户具有根目录的完全管理访问权限
anonuid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的GID

4、启动NFS

# service portmap start
# service nfs start

查看状态:

#service nfs starus
#service portmap status

查看配置:

#exportfs –rv  (该命令也可以让新设置的“exports”文件内容不用重启便可生效)

检查NFS的运行级别:
# chkconfig --list portmap
# chkconfig --list nfs

根据需要设置在相应的运行级别自动启动NFS:
# chkconfig --level 235 portmap on
# chkconfig --level 235 nfs on

另外,还需要查看系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了正确的NFS访问规则。

参考:

     nfs-howto  中文站点

 

 

常见故障:

1、为什么我权限那里命名定义了 rw,为什么我在客户端创建文件时依然提示权限不足?

答:在UNIX类操作系统上定义的网络服务有两层级别的权限设置,一是文件系统级别的权限设置,另一个是网络服务自定义的权限设置。既然你的网络服务设置没有问题,那么查一下你系统共享目录的设置权限!chmod 777 /backup -R  这样的权限一定能解决你的问题!

2、我服务端配置没有问题,为什么客户端挂载不上,而且还没有报错?

答:其实你的客户端可能并不是挂载不上,而是挂载很慢!你可以敲完命令后等待 15分钟左右,看看能否正常被挂载。其实这个挂载慢的原因一般是由于客户端rpc服务没有启动,在挂载前在客户端执行 portmap 或 service portmap start 即可!

3、请问客户端应该如何挂载?

答:/bin/mount -t nfs 192.168.0.1:/backup /backup
或:vi /etc/fstab   192.168.102.47:/backup  /mnt  nfs  rsize=8192,wsize=8192,timeo=14,intr

4、为什么我在挂载的时候就提示权限不够?
mount: 192.168.0.20:/back failed, reason given by server: 权限不够

答:这个问题可能是你挂载的服务端的共享目录不正确,或者服务端修改配置文件后没有重启!在不重启nfs服务的前提下想让你新加的配置生效,用 exportfs -rv 命令即可!该命令也可以用于检查配置文件语法是否有误,它会把正确的配置以清除的格式显示到终端供用户查看! 如果客户端出现上面情况,也可以再客户端用 showmount -e IP 命令来查看服务器上共享的目录是否正确。

5、如果我不想让我的共享目录的权限写成 777 ,那么有什么办法让客户端挂载拥有相应权限?

答:一般来说系统默认都有nfsnobody这个用户和组,它是系统留给nfs服务专用的用户,我们只需要通过下面命令改变共享目录的属主即可 chown nfsnobody:nfsnobody /tmp/test

6、我是管理员,我如何在我的服务器上查看我设置的某个目录是否被客户挂载?

答: # showmount -d  这个命令可以查看哪些目录已经被挂载!

7、如何查看服务器上起了多少有关nfs的端口?

答: [root@slave backup]# lsof -i|grep rpc
portmap    8162     rpc    3u  IPv4  21338       UDP *:sunrpc
portmap    8162     rpc    4u  IPv4  21339       TCP *:sunrpc (LISTEN)
rpc.statd  8262 rpcuser    5u  IPv4  21766       UDP *:806
rpc.statd  8262 rpcuser    6u  IPv4  21772       UDP *:809
rpc.statd  8262 rpcuser    8u  IPv4  21775       TCP *:812 (LISTEN)
rpc.rquot 12815    root    3u  IPv4  30037       UDP *:696
rpc.rquot 12815    root    4u  IPv4  30043       TCP *:699 (LISTEN)
rpc.mount 12832    root    6u  IPv4  30089       UDP *:712
rpc.mount 12832    root    7u  IPv4  30092       TCP *:715 (LISTEN)

8、请问配置了nfs的服务器安全问题应该如何设置?

 1 Iptables 防火墙
如果我们nfs服务器在防火墙后边,则需要在防火强策略中加入如下策略:
-A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT

 2 使用 /etc/hosts.allow和/etc/hosts.deny 控制客户端的访问
/etc/hosts.allow和/etc/hosts.deny这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。这两个配置文件的格式如下:
 #服务进程名:主机列表:当规则匹配时可选的命令操作
 server_name:hosts-list[:command]
/etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以 /etc/hosts.deny为准。下面是一个/etc/hosts.allow的示例:
   ALL:127.0.0.1         #允许本机访问本机所有服务进程
   smbd:192.168.0.0/255.255.255.0     #允许192.168.0.网段的IP访问smbd服务
ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况,PARANOID匹配你想控制的IP地址和它的域名不匹配时(域名伪装)的情况。
比如,在服务器的 /etc/hosts.deny 文件作如下设置:
   # cat /etc/hosts.deny
   portmap:192.168.102.15
然后在客户机192.168.102.15上加载共享目录
   #  mount 192.168.102.47:/home/share /mnt
   mount to nfs server '192.168.102.47' failed.
我们发现现在已经无法加载共享目录的。

 

9、NFS 服务每次重启端口都是变的,怎么固定端口呢,好设置iptable.

 

1.在LINUX上正常安装NFS服务
2.修改/etc/service,添加以下内容(端口号必须在1024以下,且未被占用)
    # Local services
    mountd 1011/tcp #rpc.mountd
    mountd 1011/udp #rpc.mountd
    rquotad 1012/tcp #rpc.rquotad
    rquotad 1012/udp #rpc.rquotad
3.重起nfs服务
  service nfs restart
    chkconfig nfs on
4.此时rpc相关端口已经被固定,可以添加防火墙规则
#portmap
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 111 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 111 -j ACCEPT
#nfsd
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 2049 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 2049 -j ACCEPT
#mountd
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 1011 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 1011 -j ACCEPT
#rquotad
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 1012 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 1012 -j ACCEPT
#rpc.statd
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 32768 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 32768 -j ACCEPT

阅读(1536) | 评论(0) | 转发(0) |
0

上一篇:Android 移植

下一篇:Android中JNI编程详解

给主人留下些什么吧!~~