1.实验平台:Ubuntu11.10
2.网络系统:自建虚拟局域网,组内有PC机3台
3.NFS服务器介绍:
Network File System ,功能:通过网络,让不同的操作系统可以共享彼此的文件。
4.NFS启用前必须启动RPC这个服务,NFS对RPC有依存关系,NFS这个服务的端口开在2049,但是由于文件系统非常复杂,因此NFS还有其他的程序去启动额外的服务端口,由于系 统不能自动监测这些随机的端口,故我们也不知道到底NFS相关服务启动了哪些端口,这就需要调用RPC(remote procedure call);
默认的NFS传输端口是随机选择的,小于1024的端口;rpcbind的port为111;
RPC的主要功能:指定每个NFS功能所对应的port number。并且通知给客户端,让客户端可以连接到正确的端口上去;
RPC的工作原理:当服务器启动NFS时会随机的选取数个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的功能。
5.NFS启动的RPC 进程
rpc.nfsd 最主要的NFS服务提供程序,决定了用户能否登录NFS
rpc.mountd主要功能在于管理NFS的文件系统,决定了用户登录NFS之后能否使用文件系统
以上的服务启动脚本都已经写入nfs中
6.严格的文件访问权限
因为NFS服务本身没有进行用户身份验证,所以文件系统通过判断用户的UID和GID以及访问文件的ACL权限来限制不同用户的不同权限,文件系统的inode记录了文件的UID 和 GID
NFS server /NFS client刚好有相同的账号与用户组:用户可以用该账户访问共享文件系统
NFS server 和NFS client中有相同的UID但是用户名不一样:用户以server端的同UID的身份访问对应用户的共享文件系统
NFS server 和NFS client没有相同的UID:匿名用户
用户身份为root:视server端的设定而定,一般会被压缩为匿名用户
7.Ubuntu下默认不开启ACL(查询ACL的功能)
vim /etc/fstab
在要修改的文件系统中的<options>选项加入“,acl”
例如:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/xvda / ext3 rw,acl 0 1
8.server端:sudo apt-get install portmap nfs-kernel-server
sudo apt-get install portmap nfs-common
9./etc/exports主配置文件的语法格式
/tmp 192.168.2.0/24(ro) localhost(rw) *(all_squash)
说明:/tmp共享目录 ()内的内容定义不同用户的权限,其他则为用户来源
10.例题
让root保留root权限
vim /etc/exports
/tmp *(rw,no_root_squash) #所有用户都可以访问tmp包括root,并且有rw权限
同一个目录针对不同的用户开放不同的权限
mkdir /home/public
setfacl -m g:lyang:rwx /home/public
vim /etc/exports
/home/public 192.168.2.0/24(rw) *(ro)
仅给单一主机设定的共享目录
mkdir /home/only-lyang
setfacl -m u:lyang:rwx /home/only-lyang
vim /etc/exports
/home/only-lyang 192.168.2.4(rw)
开放匿名访问
groupadd -g 45 nfsanon
useradd -u 45 -g nfsanon nfsanon
mkdir /home/nfsanon
setfacl -m u:nfsanon:rwx /home/nfsanon
vim /etc/exports
/home/nfsanon *(rw,all_squash,anonuid=45,anongid=45)
11.启动rpcbind:rpcbind
12.启动nfs:#sudo /etc/init.d/portmap restart
#sudo /etc/init.d/nfs-kernel-server restart
13.查看NFS开启的端口
netstat -tunlp | grep -E `(rpc|nfs)`
14.rpc服务的注册状况:
rpcinfo -p [port|hostname]显示出所有的port与program的信息
rpcinfo -t|-u IP|hostname 程序名称 针对某支程序检查其TCP/UDP所在的软件版本
15.showmount [-ae] [hostname|IP]
-a :显示当前主机与客户端的NFS连接共享的状态
-e:显示某台主机/etc/exports所共享的目录数据
16.exports [-aruv]
-a:全部挂载或卸载/etc/exports文件中的配置
-r:重新挂载
-u:删除某一目录
-v:在export的时候将共享目录显示到屏幕上
exports -arv
exports -auv
17.NFS服务启动后,如果用户需要关机,务必提前关闭NFS服务,否则关机将会持续很久,可以通过kill杀掉NFS进程,查看NFS进程可以通过
netstat -tunlp | grep -E `(rpc|nfs)`
18.客户端启动NFS 和RPC :rpcbind
showmount -e NFS-IP
mount -t nfs IP:共享文件PATH 挂载点PATH
cd 挂载点PATH
19.挂载命令事例:mount -t nfs -o nosuid,noexec,nodev,rw IP:共享PATH 挂载点PATH
20.NFS特殊的挂载参数:mount -t nfs -o bg,soft,rsize=32768,wsize=32768 IP:共享PATH 挂载点PATH
21.使NFS开机即挂载:
vim /etc/rc.d/rc.local
mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 IP:共享PATH 挂载点PATH
22.配合autofs的使用:apt-get install autofs
sutofs的主要配置文件
vim /etc/auto.master
/home/nfsfile /etc/auto.nfs
vim /etc/auto.nfs
[本地端子目录] [-挂载参数] [服务器所提供的目录]
share -rw,bg,soft,rsize=32768,wsize=32768 IP:共享PATH
df -h 或者 mount | grep nfsfile 查询挂载情况