NFS,网络文件系统,起初由 Sun微系统公司进行开发,后经 IETF 扩展,现在能够支持在不同类型的系统之间通过网络进行文件共享。换言之,NFS 可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。
NFS使用客户端/服务器架构,并由客户端程序和服务器程序组成。服务器程序向其它计算机提供对文件系统的访问,其过程就叫做“输出”。NFS客户端 程序对共享文件系统进行访问时,它们从 NFS 服务器中“输送”出来。NFS 传输协议不仅用于服务器和客户机之间文件访问和共享的通信,该协议还支持服务器通过输出控制向一组受到限制的客户计算机分配远程访问特权。
一概述
1、NFS协议的版本:最初公开发行版是2,现在是3,其第四个版本在开发中
2、传输协议:TCP/UDP
3、文件上锁机制:文件上锁一般由系统调用flock和/或lockf提供,不过,NFS文件上锁一直是个棘手的问题。
4、支持磁盘配额
5、cookies和无状态安装
6、共享文件系统的命名规则:采用标准的命名方案是个不错的主意
7、安全性与NFS:
(1)、对NFS的访问是由/etx/exports文件来批准的,它枚举了若干主机名;
(2)、TCPwrappers限制NFS文件系统的主机;即设定/etc/hosts.allow和/etc/hosts.allow来限定网络主机对portmap服务(portmap监听TCP和UDP端口111)的访问;
(3)、NFS文件系统的文件级访问控制是按照UID、GID和文件权限来管理的,如果不同的客户机上有相同的UID,那么他们就可以互访彼此的NFS文件了,或者root用户改变他们想要的任何值的UID,所以建议到处都使用唯一的UID
(4)、如果已安装防火墙,禁止访问NFS使用的TCP和UDP2049端口
8、root访问和nobody账号
涉及到的命令:protmap rpc.nfsd rpc.mountd exportfs showmount
二、服务器端
当服务器让某个目录能为其它计算机所使用时,通常说这个服务器“导出(export)”了一个目录
1、服务器上运行的服务:
(1)、mountd服务:客户机安装文件系统(或者说获知它的秘密cookie)的请求
(2)、nfsd服务:用于实际的文件服务
mountd 和nfsd共享一个访问控制数据库,这个数据库说明了哪些文件系统应该被导出,而哪些客户机可能会安装它们,除了内核内部的表之外,这个数据库的运行副本通常还保存在一个称为/usr/lib/nfs/xtab的文件中。该xtab文件不能被普通人所读取,需使用exportfs来添加和修改其中的项。删除则用exportfs -u
2、NFS服务器的启动脚本路径:
RedHat : /etc/init.d/nfs
SuSE : /etc/init.d/nfsserver
Debian : /etc/init.d/nfs-kernel-server /etc/init.d/nfs-common
3、/etc/exports文件是导出目录的说明清单
其样本如下:
/home/boggs inura(rw,no_root_squash) lappie(rw)
/usr/share/man *.toadranch.com(ro)
/usr/share/man/doc (noaccess) #toadranch.com域内的所有主机可以访问除 /usr/share/man/doc外的/usr/share/man 目录下的所有文件
附表:
/etc/exports文件中客户机的描述方式:
主机名 hostname 单个主机
网络组 @groupname NIS网络组
通配符 *和? 具有通配符的FQDN。*不匹配点号(.)
IP网络 ipaddr/mask CIDR-风格的说明(如128.138.92.128/25)
/etc/exports文件常用的导出选项
ro 以只读方式导出;
rw 以读写方式导出(默认方式);
rw=list 大多数客户机为只读,list举出的主机允许以可写方式安装NFS,其它所有主机须以只读方式安装 ;
root_squash 将UID为0和GID为0映射(压制)成anonuid和anongid所指定的值;
no_root_squash 运行root正常访问。
all_squash 将所有的UID和GID映射到它们各自的匿名版本上。
anonuid=xxx 指定远程root帐号应被映射的UID号
anongid=xxx 指定远程root帐号应被映射的GID号
Secure 远程访问必须从授权端口发起,默认使用此选项;
noaccess 防止访问这个目录及其子目录(用于嵌套导出)
insecure 运行从任何端口远程访问
4、nfsd ----提供文件服务
一旦mountd证明客户机的安装请求是合法的,那么客户机就可以请求各种文件系统操作了。这些请求在服务器端由nfsd处理。客户机只有在要导出自身的文件系统时才需要运行 nfsd。
nfsd需要一个数值参数来指定它应该fork出多少个服务器线程:
(1)、对于一台使用不频繁的服务器来说,8个就够了
(2)、在一台工作服务器上,12~20个比较合适
须定期运行nfsstat检查nfsd线程的数量可能引发的性能问题
注:可以编辑/etc/init.d/nfs(RH中的启动脚本)来改变nfsd的进程数量
三、客户端
(1)安装NFS文件系统和安装本地磁盘上的文件系统非常相似。mount命令能够理解hostname:directory这样的记法代表主机hostname上的目录directory.
如:#mount -o rw,hard,intr,bg coyote:/home/boggs /coyote/home/boggs
关于NFS的安装标志详见书P381
(2)另外,和本地文件一样,NFS文件系统不能在它还在用的时候卸装。使用lsof命令找出在文件系统上打开了文件的进程;杀死它们,或者如果因为 shell的话,可以改变目录。如果别的办法都不行,或者您的服务器当机了,尝试umount -f强制文件系统被卸载。
(3)在启动时安装远程文件系统
需在/etc/fstab文件中编辑,以便在启动时自动安装
注:给fstab加上配置项的时候,需确保已用mkdir创建了适当的目录作为安装点。可以通过运行mount -a -t nfs, 安装fstab中所有的nfs类文件系统,让改动立即起作用(无需重启)。
四、nfsstat:转储NFS统计信息
#nfsstat -s #显示NFS服务器进程的统计信息
#nfsstat -c #显示与客户端相关的信息
五、自动安装
1、automount:最初的自动安装程序
2、AMD:更复杂的自动安装程序
阅读(587) | 评论(0) | 转发(0) |