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 查询挂载情况