NFS介绍
NFS全名为Network File System(网络文件系统)
NFS最早是有sun公司于1984年开发出来的,其目的就是让不同计算机不同操作系统之间可以彼此共享文件。
由于NFS使用起来非常方便,因此很快得到了大多数的UNIX/Linux系统的广泛支持,而且还被IETE(国际互联网工程组)制定为RFC1904、RFC1813和RFC3010标准
NFS是不可以单独进行工作的,它必须跟portmap来协商生成的。Portmap用于提供RPC协议(远程过程调用)
要想启动NFS,必须要启动portmap服务。先启portmap,后启nfs。
下面是关于NFS这个服务的属性
NFS的的相关软件包
[root@localhost ~]# rpm -qa | grep nfs
nfs-utils-lib-1.0.8-7.6.el5
[root@localhost ~]# rpm -qa | grep portmap
portmap-4.0-65.2.2.1
[root@localhost ~]#
NFS的守护进程
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpc.mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的文凭前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
portmap:portmap的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
NFS的脚本
/etc/init.d/nfs
NFS的端口
Nfsd:2049 portmap : 111 其他的端口都是由portmap(111)来分配的
NFS的配置文件
/etc/exports(主配置文件) /etc/sysconfig/nfs(全局配置文件)
下面具体配置NFS的主配置文件
Vim /etc/exports
/var/ftp/pub 192.168.0.0/24(ro,sync)
~
/var/ftp/pub 共享的目录
192.168.0.0/24 共享给那些计算机
ro sync 权限 ro(只读) sync(同步)
这样,NFS的配置就完成了,就这么简单,当然,还可以对共享文件进行更多的权限
这个时候,启动服务,先启动portmap 然后在启动nfs
[root@localhost ~]# service portmap restart
Stopping portmap: [ OK ]
Starting portmap: [ OK ]
[root@localhost ~]# service nfs restart
Shutting down NFS mountd: [ OK]
Shutting down NFS daemon: [ OK]
Shutting down NFS services: [ OK]
Starting NFS services: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
[root@localhost ~]#
Ok以后,可以使用showmount –e 来查看文件是否被共享
[root@localhost ~]# showmount -e 192.168.0.254
Export list for 192.168.0.254:
/var/ftp/pub 192.168.0.0/24
[root@localhost ~]#
已经看到192.168.0.254上面的共享目录了
客户端如何去挂载nfs server上面的共享资源呢,可以使用mount命令去手动挂载,当然也可以使用自动挂载器。
[root@localhost ~]# mount -t nfs 192.168.0.254:/var/ftp/pub /mnt/nfs/
[root@localhost ~]#
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 4061572 2587972 1263952 68% /
/dev/sda6 505604 10545 468955 3% /home
/dev/sda2 4061572 2880780 971144 75% /var
/dev/sda1 101086 13588 82279 15% /boot
tmpfs 192132 0 192132 0% /dev/shm
/dev/hdc 2935370 2935370 0 100% /media/RHEL_5.4 i386 DVD
192.168.0.254:/var/ftp/pub
4061600 2880800 971168 75% /mnt/nfs
[root@localhost ~]# cd /mnt/nfs/
[root@localhost nfs]# ls
Cluster ClusterStorage Server VT
[root@localhost nfs]#
nfs的共享资源已经被挂载到/mnt/nfs目录下面了,如果挂载的时候出现问题,很可能是因为你的客户端没有启动portmap。
那能不能够往共享里面写东西呢?
[root@localhost nfs]# mkdir file
mkdir: cannot create directory `file': Read-only file system
[root@localhost nfs]#
很明显是不可以的,他提示我们这是个只读的,好,把共享权限设置成可读可写,看下能不能够写进去。
/var/ftp/pub 192.168.0.0/24(rw,sync)
~
已经改成rw了,改完也重启一下服务。
[root@localhost nfs]#
[root@localhost nfs]# mkdir file
[root@localhost nfs]#
[root@localhost nfs]# ls
Cluster ClusterStorage file Server VT
[root@localhost nfs]#
现在已经可以建立文件了,(前提是/var/ftp/pub这个目录的权限已经开放了,不然我还是写不进去的)
下面在讨论一下NFS的默认权限
[root@localhost nfs]#
[root@localhost nfs] # ll | grep file
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Feb 19 20:21 file
[root@localhost nfs]#
可以看到,当在共享文件夹目录里面创建了一个文件,他的拥有人和拥有组都是nfsnobody,在默认情况下面,拥有人和拥有组应该是root。这个是因为在系统默认的共享权限里面设置了anonuid=65534,anongid=65534。而这个65534的id号其实就是nfsnobody用户。可以用id nfsnobody 命令来查询一下
[root@localhost ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
[root@localhost ~]#
关于刚才文件属于nfsnobody的原因,这个是由于系统默认的NFS共享权限中的root_squash 导致的
root_squash:当登陆NFS主机使用共享目录的使用者是root时,其权限被转换成匿名使用者,通常它的UID与GID都会变成nobody身份。
其实NFS有很多默认的权限,我们可以去看看
[root@localhost ~]# exportfs -v
/var/ftp/pub 192.168.0.0/24(rw,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
[root@localhost ~]#
我们把root_squash变成no_root_squash然后看看会发生什么事情。
/var/ftp/pub 192.168.0.0/24(rw,sync,no_root_squash)
~
[root@localhost ~]#
[root@localhost ~]# cd /mnt/nfs/
[root@localhost nfs]# mkdir file1
[root@localhost nfs]# ll | grep file1
drwxr-xr-x 2 root root 4096 Feb 19 20:25 file1