网络共享(Ftp,NFS,Samba)-------NFS
1. NFS的由来: NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统(Linux和Unix间)的计算机间共享文件和外设,所以它的通讯协定设计与主机及操作系统无关. 它是由SUN公司于1984年推出,使得可以本地机一样的使用另一台联网计算机的文件和外设。NFS在文件传送或信息传送过程中依赖于RPC协议
功能:当我们的NFS Server设定好共享目录后,其他的NFS Client端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自定义),进入这个挂载点即可查看共享的文件。
缺陷: a.明文传输
b.只能用于Linux和Unix间操作系统中
c.新版的NFS服务是置于系统内核中的。
2.RPC:RPC, 远程过程调用 (remote procedure call)是能使客户端执行其他系统中程序的一种机制。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。常用于分布式C/S模型,发出请求的程序是客户程序,而提供服务的程序是服务器。
功能:NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些 端口 来传输文件,因此, NFS 的功能所对应的端口不固定,而是采用随机取用一些未被使用的小于 1024 的端口来使用,但客户端又不知道服务器端的相关端口,所以需要远程过程调用(RPC) 的服务,RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且返回给客户端,让客户端可以连结到正确的端口上去。当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并返回客户端正确的端口。
可以指定的静态端口:MOUNT_PORT=”4002”
STATD_PORT=”4003”
LOCKD_TCPPORT=”4004”
LOCKD_UDPPORT=”4004”
ROUOTAD_PORT=”4005”
STATD_OUTGOING_PORT=”4006”
3.NFS包:nfs-utils-1.0.6-65.EL4
脚本:nfs,nfslock
端口:2049(Tcp/Udp)nfsd, 其他半随机(111Tcp/Udp,及其他的小于1024的随机端口。)
配置文件:/etc/exports, /etc/sysconfig/nfs
进程:rpc.mounted ß-------mount
lockdß--------NLM
rpc.statdß------NLM
NFS 主程序:nfs-utils
RPC 主程序:portmap
/var/lib/nfs/*tab
在NFS服务器的登录档都放置到/var/lib/nfs/目录里面,在该目录下有两个比较重要的登录档,一个是etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个xtab则记录曾经连结到此NFS主机的相关客户端资料。
/var/lib/nfs/rmtab
状态文件,列出了挂接导出文件的远程客户机清单。
4.服务器端得应用及其规则:
A.安装nfs软件包:yum list all|grep nfs
yum install nfs-utils.i386
B.启动RPC服务:service portmap start(portmap不需要设定,只要直接启动就行,启动之后,会出现一个port 111的sunrpc的服务)
查看RPC服务的状态:service portmap status
rpcinfo -p localhost(查看当前主机的RPC状态)
启动nfs服务service nfs restart(开启nfs服务)
chkconfig nfs on(将其加入开机自启行列)
C.编辑nfs的配置文件:vi /etc/exports(默认为空)
假设为下面所示:
/var/guest 192.168.1.0/24(rw,async)
/var/ftp 192.168.0.0/24(rw,no_root_squash,sync)
保存退出!
注意:下面是一些NFS共享的常用参数:
ro: read-only,只读访问权限
rw: read-write,可读写的权限
sync: 资料同步写入到内存与硬盘中
async: 资料会先暂存于内存中,而非直接写入硬盘(异步)
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: 和上面相对,不检查父目录权限
no_all_squash: 保留共享文件的UID和GID(默认)
all_squash
不论登入 NFS 的使用者身份为何, 他的UID和GID映射匿名客户anonymous(通常也就是 nobody(nfsnobody)),适合公用目录。
root_squash
在登入NFS主机使用共享之目录的使用者如果是root时,那么这个使用者的权限将被映射成为匿名使用者,通常他的 UID 与 GID 都会变成nobody(nfsnobody) 那个系统帐号的身份的权限;uid和gid由0变为65534.
no_root_squash
登入NFS主机使用共享目录的使用者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限!这个项目『极不安全』,不建议使用!
anonuid=xxx: 指定NFS服务器/etc/passwd文件中匿名客户的UID
anongid=xxx: 指定NFS服务器/etc/passwd文件中匿名客户的GID
D.此时我们不需重启服务,可以使用命令将其重新读取:
exportfs –a
注意:-a :全部挂载(或卸载和-u连用时)/etc/exports文件内的设置
-r :重新挂载/etc/exports里面的设置,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab 的内容!
-u :卸载某一目录
-v :在export的时候,将分享的目录显示到屏幕上!
exportfs -arv重新挂载一次 /etc/exports的设置
exportfs –auv全部卸载
E. 此时我们可以自己先检查一下NFS服务器是否可以连接
showmount –e localhost
showmount -a localhost
注意: showmount [-ae] [hostname|IP]
-p :显示出所有的 port 与 porgram 的信息;
参数:
-a :这个参数是一般在NFS 服务器上使用,是用来显示已经挂载上本机nfs目录的客户机
-d:查看哪个目录已被挂载到NFS 服务器上。(一般也在NFS 服务器上使用)
-e :显示主机的 /etc/exports 所共享的目录
5.客户端的配置及规则:
A.当客户端访问服务器时,我们需要首先建立挂载点
Eg:mkdir mnt
B.挂载共享目录
mount -t nfs 192.168.1.0:/var/ftp mnt/
C.此时我们可以切换到挂载目录中查看共享目录
showmount –e IP(服务器的ip地址)
cd mnt
ls
如果是root用户,即可查看里面的文件,但是只读权限(规定为可读可写,为何为只读呢?)
Reason:因为root_squash参数,没有规定时,都将root用户映射为匿名用户,将其uid和gid由0变为65534,权限缩减。除非声明声明no_root_squash,root用户登录时才可以保持共享目录中规定的权限。修改如下:
/var/guest 192.168.1.0/24(rw, no_root_squash,async)
6.案例:
1. 假如说服务器上有个用户natasha,并且他是/var/guest目录的所有者,即将目录的用户和组都改为natasha,假如natasha的uid为2001,在客户机上有个natasha和mary两个用户,但natasha的uid为2000,mary的uid为2001,此时natasha将无法登录,而mary却可以查看(原因很简单,NFS是靠uid和gid来识别用户的身份的。)
2. 同一目录针对不同范围开放不同权限
# vi /etc/exports
/home/public 192.168.0.0/24(rw) *(ro)
即将主机与网域分为两段(用空格隔开),此时当客户机处于192.168.0.0/24这个网段中时,针对这个被挂在的目录就具有可读可写的权限;而其他网段的客户机挂载目录后就只有可读权限。
3. 开放匿名登入的情况
# vi /etc/exports
/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
# 如果要开放匿名,那么重点是all_squash,并且要配合anonuid
当 test.linux.org 登入这部 NFS 主机,并且在 /home/linux 写入文件时,该文件的所有人与所有群组,就会变成/etc/passwd 里面对应的UID为40的那个身份的使用者。
总结:/etc/exports 中client的书写规则
(1)单个主机
可以用短名及完全限定名(QFDN),或者用IP地址,例如student1,student1.test.com.cn或者192.168.10.1
(2)Net-Group
可以列出/etc/netgroup文件中或NFS网组映射中定义的整组主机。网组名以@开头。
(3)通配符主机(*,?)
.discuz.net *. *.comsenz.com
*:匹配零个或多个
?:只匹配一个
(4)掩码
192.168.1.0/255.255.255.0