文件共享系统之NFS

文件共享服务之NFS


一、基础知识

        NFS:Network File System

    是在linux和unix系统上除了ftp外常用的文件共享服务的一种。

    借助于RPC实现文件传输功能。

    经过二三十年的发展,已经非常成熟了,广泛用于linux、unix,甚至windows和MAC都在极力支持NFS功用

NFS与http和ftp的区别:

①NFS发起的是一个函数的执行调用请求

    ftp和http发出的是一个资源调用请求

② NFS是映射挂载实现功能的

     ftp和http是通过应用程序的客户端和服务器端交互实现功能的


RPC: Remote Procedure Call protocol包括远程过程调用、函数调用(远程主机上的函数)

一部分功能由本地程序完成

另一部分功能由远程主机上的函数完成

过程与函数的区别:过程没有返回值,函数有返回值

         wKiom1VRe76RDUsEAAEKBZIk55g632.jpg

重大尴尬:

    在远程主机上存储创建的文件属主和属组到底是谁?

    如果本地操作用户有账号,远程主机没有,怎么算呢?

    root用户都是0,那对远程主机的控制权限就无限大了,远程主机不安全。

    基于这种情况,sun公司就研发了NIS系统。

NIS: Network Information System 网络信息系统

    作用:身份认证——集中于某服务器完成身份认证

    用户登录时,在login界面程序上输入的帐号通过网络发送给另外一个主机,由另外这台用于集中存储用户帐号信息的服务器检查帐号是否存在,如果存在,则通知用户输入密码,密码也打包发送给远程主机,核对密码也正确后,于是用户就可以登录了。

    NIS也是明文的,因此一般只在局域网使用,而且NIS服务器成为整个系统的单点故障所在。现在NIS已经很少应用了。

    现在用户集中存储一般是用ldap,并可以与cobblers结合。cobblers传输认证可以不传输敏感信息但完成用户帐号密码信息认证。这种认证方式是比较安全的


NFS: 仅支持基于IP的认证,而不能基于帐号和密码的认证

     而且因为是一个远程调用服务,不是一个请求响应服务,所以自身没办法实现基于帐号的认证,即使是基于ip,也不能实现帐号密码认证

     因此,远程主机一般还须启动一个守护进程moutd,用mountd控制哪些用户可以凭帐号和密码访问。只有经过mountd认证后,才会被发给一个令牌通行证,才能凭令牌访问远程主机的文件系统。


nfs服务器需要同时启动三个服务进程:nfsd, mountd, idmapd

nfsd:

管理共享文件系统的进程,监听在 2049/tcp, 2049/udp。

mountd:

访问帐号的控制进程,不是总所周知的程序,仅仅是nfs的辅助服务,而且是基于RPC运行的,因此其监听端口是由本地的公共进程服务RPC代为监听的,其监听端口是由RPC代为随机选择一个未用的,是个半随机端口模式。mountd的监听端口号需要先向RPC询问后得知

idmapd:

将远程登录的帐号映射为本地的nobody,本地的nobody在远程主机上映射为响应的属主和属组。原理是通过UID号来对应的,与名字无关,即只要UID号是同一个,即将远程操作用户映射为本地这个UID号用户。

wKiom1VRe_qQodzmAAHUOHWglKw919.jpg

RPC服务:portmapper

rpcinfo: report RPC information

查看命令:# rpcinfo -p [host]

host:可以是本地主机,也可以是远程某个主机。默认是本地主机

探测某个主机上portmapper服务是否正常工作,监听在哪个端口上,而且有哪些服务注册使用RPC服务

[root@aunt-s ~]# rpcinfo -p 172.16.20.150    (远程主机)

  program vers proto   port  service

   100000    4   tcp    111  portmapper

   100000    3   tcp    111  portmapper

   100000    2   tcp    111  portmapper

   100000    4   udp    111  portmapper

   100000    3   udp    111  portmapper

   100000    2   udp    111  portmapper

   100024    1   udp  58704  status

   100024    1   tcp  43182  status

[root@aunt-s ~]# rpcinfo -p localhost (本地主机)

  program vers proto   port  service

   100000    4   tcp    111  portmapper

   100000    3   tcp    111  portmapper

   100000    2   tcp    111  portmapper

   100000    4   udp    111  portmapper

   100000    3   udp    111  portmapper

   100000    2   udp    111  portmapper

   100024    1   udp  59481  status

   100024    1   tcp  40707  status

涉及的程序包:

启动服务的程序包为nfs-utils,教室centos6默认是安装上的,最小化安装没有安装这个程序组;

这一个rpm包提供多种功能程序

服务器端是在内核中的,不需要再安装,只需启动模块就性。

[root@aunt-s ~]# rpm -q nfs-utils

nfs-utils-1.2.3-54.el6.x86_64

[root@aunt-s ~]# rpm -ql nfs-utils

/etc/nfsmount.conf

/etc/rc.d/init.d/nfs

/etc/rc.d/init.d/nfslock

/etc/rc.d/init.d/rpcgssd

/etc/rc.d/init.d/rpcidmapd

/etc/rc.d/init.d/rpcsvcgssd

/etc/request-key.d/id_resolver.conf

/etc/sysconfig/nfs

/sbin/mount.nfs 挂载nfs4以前版本的命令

/sbin/mount.nfs4 挂载nfs4版本的命令

/sbin/nfs_cache_getent

/sbin/rpc.statd

/sbin/umount.nfs  卸载nfs4以前版本的命令

/sbin/umount.nfs4 卸载nfs4版本的命令

/usr/sbin/exportfs

/usr/sbin/mountstats

/usr/sbin/nfsidmap

/usr/sbin/nfsiostat

/usr/sbin/nfsstat

/usr/sbin/rpc.gssd

/usr/sbin/rpc.idmapd  服务器端关键的要启动的三个服务

/usr/sbin/rpc.mountd

/usr/sbin/rpc.nfsd

/usr/sbin/rpc.svcgssd

/usr/sbin/rpcdebug

/usr/sbin/showmount

/usr/sbin/sm-notify

/usr/sbin/start-statd

wKiom1VRfIiB1ZFQAAVn10AS6Vg196.jpg

wKiom1VRfJGDL5pZAAJJKt4nDtQ225.jpg



二、 服务器端需要操作的过程:

1、查看有没有安装程序包

[root@kingdom ~]# rpm -q nfs-utils

nfs-utils-1.2.3-54.el6.x86_64

如果是xxx is not installed,则需要安装一下

2、查看安装生成的文件

[root@kingdom ~]# rpm -ql nfs-utils

3、配置服务并启动

[root@kingdom ~]# chkconfig | grep nfs

nfs             0:off 1:off 2:off 3:off 4:off 5:off 6:off

nfslock         0:off 1:off 2:off 3:on 4:on 5:on 6:off

[root@kingdom ~]# chkconfig nfs on

[root@kingdom ~]# chkconfig | grep nfs

nfs             0:off 1:off 2:on 3:on 4:on 5:on 6:off

nfslock         0:off 1:off 2:off 3:on 4:on 5:on 6:off

[root@kingdom ~]# service nfs start

Starting NFS services:           [  OK  ]

Starting NFS quotas:             [  OK  ]  这个是允许客户端使用磁盘块大小的控制程序

Starting NFS mountd:             [  OK  ]

Starting NFS daemon:             [  OK  ]

Starting RPC idmapd:             [  OK  ]

4、查看启用的端口

[root@kingdom ~]# rpcinfo -p

5、查看man手册熟悉/etc/exports文件的配置使用,并设置好

wKioL1VRflmBwldAAAErYzKwVBI099.jpg

/etc/exports文件基本配置格式:

文件系统 客户端(选项)<空格>客户端(选项)

 客户端:IP、FQDN或DOMAIN、NETWORK

IP:长格式、短格式都可以,如172.16.20.110/16、172.16.20.100/255.255.0.0

可使用通配符:* (任意长度的任意字符)、?(任意单个字符)

        选项:多个选项之间用逗号隔开,常用的有:

    ⑴secure: 

这个选项是缺省选项,它使用了 1024 以下的 TCP/IP 端口实现 NFS 的连接。指定 insecure 可以禁用这个选项。

    ⑵rw: 

这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读的。

    ⑶async: 

这个选项是缺省选项,可以改进性能,但是如果没有完全关闭 NFS 守护进程就重新启动了 NFS 服务器,这也可能会造成数据丢失。

    ⑷no_wdelay: 

这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项。

    ⑸nohide: 

如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用 hide 选项。

    ⑹no_subtree_check: 

这个选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。

    ⑺no_auth_nlm: 

这个选项也可以作为 insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。

    ⑻mp (mountpoint=path): 

通过显式地声明这个选项,NFS 要求挂载所导出的目录。

    ⑼fsid=num: 

这个选项通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。

    ⑽root_squash: 

这个选项不允许 root 用户访问挂载上来的 NFS 卷。

    ⑾no_root_squash: 

这个选项允许 root 用户访问挂载上来的 NFS 卷。

    ⑿all_squash: 

这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。

    ⒀anonuid 和 anongid: 

这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。

EXAMPLE

 # sample /etc/exports file

 /               master(rw) trusty(rw,no_root_squash)

 /projects       proj*.local.domain(rw)

 /usr            *.local.domain(ro) @trusted(rw)

 /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

 /pub            *(ro,insecure,all_squash)

 /srv/www        -sync,rw server @trusted @external(ro)

 /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

 /build          buildhost[0-9].local.domain(rw)


6、配置好共享的内容,并安全导出

专用工具:# exportfs

export -ar: 重新导出所有的文件系统,已连接的不会被打断;添加或修改后也用这个选项重新安全导出

export -au: 关闭导出的所有文件系统

export -u FS: 关闭指定的导出的文件系统

7、查看导出成功与否

[root@kingdom nfs]# showmount -e 172.16.20.150

Export list for 172.16.20.150:

/share/nfs 172.16.250.148,172.16.20.110

wKiom1VRfP6jtyj6AAMlyNon_9k071.jpg

三、客户端使用过程:


1、查看NFS服务器端共享的文件系统:

# showmount -e NFSSERVER_IP

例如: # showmount -e 172.16.20.150

(如果没有这个程序,需要先安装showmount)

[root@aunt-s vusers_conf]# showmount -e 172.16.20.150

Export list for 172.16.20.150:

/share/nfs 172.16.250.148,172.16.20.110


2、挂载NFS文件系统:

2.1 先查看本地主机是否启动两个守护进程:

rpcbind

rpc.statd

[root@aunt-s mnt]# ss -tnlp | grep rpc

LISTEN     0      128                       *:54418                    *:*      users:(("rpc.statd",1390,9))

LISTEN     0      128                      :::43571                   :::*      users:(("rpc.statd",1390,11))

LISTEN     0      128                      :::111                     :::*      users:(("rpcbind",1339,11))

LISTEN     0      128                       *:111                      *:*      users:(("rpcbind",1339,8))

2.2 挂载

mount -t nfs SERVER:/path/to/sharedfs  /path/to/mount_point

例如: # mount -t nfs 172.16.20.150:/share/nfs   /mnt

将远程主机172.16.20.150上的/share/nfs挂载到本地的/mnt目录下使用,然后可以直接查看使用了,就如新加了一个分区一样。

wKiom1VRfRvDpmqjAAYkHBFSvDc232.jpg

wKiom1VRfWDAfd6rAAErPwuQmKY926.jpg

3、开机自动挂载nfs设置: 

/etc/fstab

SERVER:/PATH/TO/EXPORTED_FS   /mount_point nfs defaults,_netdev 0 0

挂载选项设置:

⑴defaults

⑵_netdev:当远程共享主机不在线时,允许我们开机时系统等待一个时长后就不再试图挂载后继续启动,如果没有这个选项,系统将一直等待直到挂载成功。

⑶rsize 的值是从服务器读取的字节数。

⑷wsize 是写入到服务器的字节数。默认都是1024, 如果使用比较高的值,如8192,可以提高传输速度,但断电时丢失的数据也可能越大

⑸timeo:超时时长,单位为十分之一秒,当PRC时间超时时,主机会先等待这个timeo设定的时长,然后再发送重新传送请求。每重试一次,timeo都加倍,直到达到设置的最大超时时间或者60秒。对于速度慢或者繁忙的nfs主机,增加这个值能改善挂载使用的体验。

⑹intr:允许在对挂载的远程nfs文件操作超时时发送打断信号,如关闭等

wKiom1VRfUDTXsyNAALxaKnKXpc723.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章