NFS全称"网络文件系统",主要配置件/etc/exports和etc/sysconfig/nfs...NFS能使不同计算机之间能通过网络进行文件共享的一种网络协议,多用于UNIX/Linux网络系统中,使用NFS既可以提高资源的使用率,又可以大大节省客户端本地硬盘的空间,因为你根本不需要将所有文件复制到本地硬盘中,同时也便于对资源进行集中管理.
虽然NFS可以在网络中进行文件共享,但是NFS协议本身并没有提供数据传输的功能,它必须借助于远程过程调用(RPC)协议来实现数据传输.RPC定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务器上的服务进程请求服务,而不需要了解底层通信协议细节.可以将NFS服务器看成是RPC服务器,而将NFS客户端看成RPC客户端,这样NFS服务器和NFS客户端之间就可以通过RPC协议协议进行数据传输...
要使用NFS服务器,至少有三个守护进程在行,rpc.nfsd rpc.mount portmap 还有一个守护进程lockd,用来锁定用户权限的..
rpc.nfsd 他是基本的NFS守护进程,主要功能是管理客户端是否能够登入服务器..
rpc.mount 他是RPC安装守护进程,主要功能是管理NFS的文件系统.当客户端顺利地通过了rpc.nsfd登入NFS服务器后,在使用NFS服务器所提供的文件前,还必须通过文件使用权限的验证.rpc.mountd会读取NFS的配置文件/etc/exports来对比客户端权限...portmap 主要功能是进行端口映射工作,当客户端尝试连接并使用RPC服务器提供服务(如NFS服务)时,portmap会将所管理的与服务对应的端口号提供给客户端,从而使客户端可以通过该端口向服务器请求服务...要主意的是portmap只用于RPC,但它对NFS服务来说是必不可少的.portmap没有运行,NFS客户端就无法查找从NFS服务器中共享的目录...这个一定要记住...
用户映射选项:
all_squash 将远程访问的所有用户及属主和属组都映射为匿名用户和用户组,一般均为nfsnobody....
no_all_squash 不将远程访问的所有用户及属组都映射为匿名用户...
root_squash 将root用户及所属组都映射为匿名用户(默认设置)
no_root_squash 不将root用户及属组映射为匿名用户.
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并制定该匿名用户账为本地用户(UID=xxx)
anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并制定该匿名组账户为本地用户组账户(GID=xxx)
常用其他选项.
secure 限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
insecure 允许客户端从大于1024的TCP/IP端口连接NFS服务器.
sync 将数据同步写入内存缓冲区于磁盘中,虽然这样做效率很低,但可以保证数据的一致性...
async 将数据先保存在内存缓冲区,必要时才写入磁盘..
wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可提高效率..(默认设置)..
no_wdelay 若有写操作,则立即执行,应与sync配合使用..
subtree_check 若输出目录时一个子目录,则NFS Server将检查其父目录的权限(默认设置)..
no_subtree_check 即使输出目录是一个子目录,NFS Server也不检查其父目录的权限,这样做客提高效率...
下面我们来配置NFS服务,我的SERVER IP:92.168.0.195..CLIENT IP:192.168.0.197先的安装一个名为nfs-utils和另一个为portmap两个包,默认情况下Redhat安装了这两
个包...使用下面命令查看是否安装了这两个包....
#rpm -qa |grep nfs-utils
#rpm -qa |grep portmap
我这已经安装了,就不再演示怎么去装了,然后我们创建四个目录....
#mkdir -p /var/{test,pub,wendy,natasha}
#cd /var/test;touch a.txt b.txt;ls -l
-rw-r--r-- 1 root root 0 Mar 4 22:15 a.txt
-rw-r--r-- 1 root root 0 Mar 3 22:15 b.txt
#vim /etc/exports
/var/test 192.168.0.197(rw,async)
/var/pub *(ro)
/var/wendy 192.168.1.0/24(ro,no_root_squash)
/var/natasha *.zzu.com(rw,all_squash,sync,no_wdelay)
解说:/var/test目录可供192.168.0.197访问,数据异步写入磁盘...
/var/pub目录任何网段的客户机都可以访问,且具有只读的权限.
/var/wendy目录只允许192.168.1.0网段机器访问,且具只读权限.并且不将root用户映射到匿名用户..
/var/nastasha目录允许.*zzu.com中的所有客户机访问,且具备读写权限,并且将所有用户及所属的组都映射为nfsnobody,数据同步写入磁盘,如果有写入操作,立即执行...
然后重启服务...
#service nfs restart
#service portmap restart
查看服务的状态...
#service nfs status
nfsd (pid 5126 5125 5124 5123 5122 5121 5120 5119) is running...
rpc.rquotad (pid 5114) is running...
#service portmap status
portmap (pid 3211) is running...
其实每次修改了配置文件我们可以不重启动服务,让其重新读取一下配置文件使用下面的命令...
#exportfs -r (重新读取所有文件系统,相当于重启服务)
#exportfs -u (关闭所有已挂载的文件系统)
#exportfs -v (重启服务后用此命令可查看配置文件中的信息)
#exportfs -au(关闭所有的要被挂载的文件系统)
查看监听的端口,及其进程..
#rpcninfo -p localhost;netstat -tunlp |grep 2049
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 883 status
100024 1 tcp 886 status
100011 1 udp 823 rquotad
100011 2 udp 823 rquotad
100011 1 tcp 826 rquotad
100011 2 tcp 826 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 34831 nlockmgr
100021 3 udp 34831 nlockmgr
100021 4 udp 34831 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 40888 nlockmgr
100021 3 tcp 40888 nlockmgr
100021 4 tcp 40888 nlockmgr
100005 1 udp 837 mountd
100005 1 tcp 840 mountd
100005 2 udp 837 mountd
100005 2 tcp 840 mountd
100005 3 udp 837 mountd
100005 3 tcp 840 mountd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
查看本机都有哪些共享目录..使用
#showmount -e localhost
下面我们进入客户端先创建一个目录,执行此命令进行挂载..
#mkdir /mnt/a
#mount -t nfs 192.168.0.195:/var/test/ /mnt/a
#cd /mnt/a;ls -l
-rw-r--r-- 1 root root 0 Mar 3 22:15 a.txt
-rw-r--r-- 1 rootroot 0 Mar 3 22:15 b.txt
我们不能将其这两个小文件删除,因为我们没有给192.168.0.197的no_root_squash,如果给它这个权限,他是可以删掉的,这些我都测试过,默认情况下都是root_squash,服务器会将其转换成来宾的账号...
在服务器端执行下面的命令,查看本机有哪些文件被挂载了...
[root@station18 ~]# showmount -a localhost
All mount points on localhost:
192.168.0.197:/var/test
来做个小测试,在服务器上创建一个randy的用户UID为1000,密码为redhat,在客户机上创建一个用户solaris,UID为 1000,密码redhat
服务器:
#useradd -u 1000 randy
#passwd randy
客户机:
#useradd -u 1000 solaris
#passwd solaris
修改服务器上/var/test/上a.txt和b.txt属主和属组都为randy还要修改test目录的所属组和属主位randy
#cd /var/test
#chown -R randy.randy ../test/;ls -l;ls -ld ../test
-rw-r--r-- 1 randy randy 0 Mar 4 07:51 a.txt
-rw-r--r-- 1 randy randy 0 Mar 3 22:15 b.txt
drwxr-xr-x 2 randy randy 4096 Mar 3 23:00 ../test/
在去客户机从新挂载次文件,再切换到solaris用户然后删除看一下是否具备删权限,发现可以删除的...有的人会发现在服务器上两文件属主属组都randy,且配置文件中没no_root_squash权限,在客户机上此文件属主和属组solaris,但是客户机可以将其删除,不可思议吧!那是因为两用户的UID一样,NFS靠UID来识别用户,只要双方UID一样,对方就能将文件进行修改.这点大可以看出NFS很不安全的,但是很好用,很多场合也得用到它
转载于:https://blog.51cto.com/zhangcz/1343891