1、 开启portmap和nfs服务
apt-get install nfs-kernel-server
/etc/init.d/portmap start
/etc/init.d/nfs-kernel-server start
2、 将要共享的目录写到exports文件中 假设共享的目录为 /sharedisk/
vim /etc/exports
这个文件的内容非常简单,每一行由抛出路径,客户名列表以及每个客户名后紧跟的访问选项构成:
[共享的目录] [主机名或IP(参数,参数)]
其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay。
当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
/home/share 192.168.102.15(rw,sync) *(ro)
#对192.168.102.15赋予读写权限,其他机器仅有只读权限。
括号中的参数设置意义为:
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
3、重启nfs 或者使用exportfs命令使设置生效
重启nfs:/etc/init.d/nfs-kernel-server restart
用exportfs:
exportfs -rv
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v :将详细的信息输出到屏幕上
exportfs可以根据/etc/exports配置生成一个 /var/lib/nfs/etab文件,此文件是共享目录的最终权限的设置。
4、在客户端挂载该目录:
在本地创建挂载的目录
mkdir /sharedisk
mount -t nfs 192.168.0.10:/sharedisk /sharedisk
#将服务器192.168.0.10上的/sharedisk/ 路径挂载到本地
5、NFS 防火墙设置
由于nfs服务需要开启 nfs,portmapper,mountd,nlockmgr,rquotad这5个服务,需要将这5个服务的端口加到iptables里面
而nfs 和 portmapper两个服务是固定端口的,nfs为2049,portmapper为111。其他的3个服务是用的随机端口,那就需要
先把这3个服务的端口设置成固定的。
查看当前这5个服务的端口并记录下来 用rpcinfo -p
root@server:~# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32802 status
100024 1 tcp 54040 status
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049
100227 3 tcp 2049
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049
100227 3 udp 2049
100021 1 udp 54770 nlockmgr
100021 3 udp 54770 nlockmgr
100021 4 udp 54770 nlockmgr
100021 1 tcp 44903 nlockmgr
100021 3 tcp 44903 nlockmgr
100021 4 tcp 44903 nlockmgr
100005 1 udp 44541 mountd
100005 1 tcp 54030 mountd
100005 2 udp 47762 mountd
100005 2 tcp 57530 mountd
100005 3 udp 35485 mountd
100005 3 tcp 56965 mountd
将这3个服务的端口设置为固定端口:
vim /etc/services
在文件的最后一行添加:
mountd 54030/tcp
mountd 35485/udp
rquotad 966/tcp
nlockmgr 44903/tcp
nlockmgr 54770/udp
把相关的端口添加到iptables
6、启动时自动挂栽
修改客户机的 /etc/fstab文件,加入类似如下行:
192.168.102.47:/home/share /mnt nfs rsize=8192,wsize=8192,timeo=14,intr
重启客户机,即可实现系统启动时自动挂栽共享资源
7、使用 autofs 实现资源挂栽
autofs 使用 automount 守护进程来管理你的挂载点,它只在文件系统被访问时才动态地挂载它们。
autofs 查询主配置文件 /etc/auto.master 来决定要定义哪些挂载点。然后它使用适用于各个挂载点的参数来启动 automount 进程。
主配置中的每一行都定义一个挂载点,然后用单独的配置文件定义在该挂载点下要挂载的文件系统。
安装 autofs
# aptitude install autofs
修改/etc/auto.master文件, 加入如下内容:
/mnt /etc/auto.nfs
创建 /etc/auto.nfs 文件内容如下:
nfs -rw,soft,intr,rsize=8192,wsize=8192 192.168.102.47:/home/share
这样,每当您进入 /mnt/nfs 目录时,系统都会尝试将服务器的共享资源挂栽到该目录上。
应当注意nfs目录是由 automount 动态地创建的,它不应该在客户机器上实际存在。
===============================================================================================
centos系统的iptables设置
配置针对NFS Server的防火墙
[root@mes-bk backup]# vi /etc/sysconfig/nfs
# Port rquotad should listen on.
RQUOTAD_PORT=875
# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=32769
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
其中 portmapper nfs 服务端口是固定的分别是 111 2049
另外 rquotad nlockmgr mountd 服务端口是随机的。由于端口是随机的,这导致防火墙无法设置。
这时需要配置/etc/sysconfig/nfs 使 rquotad nlockmgr mountd 的端口固定。
找到以下几项,将前面的#号去掉。
[root@mes-bk backup]# rpcinfo -p localhost
程序采用的协议连接阜
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 907 status
100024 1 tcp 910 status
100011 1 udp 897 rquotad
100011 2 udp 897 rquotad
100011 1 tcp 900 rquotad
100011 2 tcp 900 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 47851 nlockmgr
100021 3 udp 47851 nlockmgr
100021 4 udp 47851 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 56501 nlockmgr
100021 3 tcp 56501 nlockmgr
100021 4 tcp 56501 nlockmgr
100005 1 udp 911 mountd
100005 1 tcp 914 mountd
100005 2 udp 911 mountd
100005 2 tcp 914 mountd
100005 3 udp 911 mountd
100005 3 tcp 914 mountd
-A RH-Firewall-1-INPUT -s 0.0.0.0/24 -m state --state NEW -p tcp --dport 33993 -j ACCEPT
-A RH-Firewall-1-INPUT -s 0.0.0.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
挂接nfs server的client端执行nfsstat -m命令,可以得出nfs server端nfs版本