NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
NFS的优点:
1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
下面开始NFS的安装:
一、安装准备
关闭iptables service iptables stop chkconfig iptables off 设置selinux sed -i's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
1.安装nfs服务 [root@allentuns~]# yum -y install nfs-utils rpcbind
2.启动nfs服务 [root@allentuns~]# /etc/init.d/rpcbind start Starting rpcbind: [ OK ] [root@allentuns~]# /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ]
3.创建共享目录 [root@allentuns~]# mkdir -pv /web/htdocs mkdir: created directory `/web' mkdir: created directory `/web/htdocs' [root@allentuns~]# ll -d /web/htdocs/ drwxr-xr-x. 2 root root 4096 May 3 18:50 /web/htdocs/
4.添加共享目录其它用户有写权限 [root@allentuns~]# chmod o+w /web/htdocs [root@allentuns~]# ll -d /web/htdocs/ drwxr-xrwx. 2 root root 4096 May 3 18:50 /web/htdocs/
5.修改配置文件,设置共享目录或者分区 [root@allentuns~]# vim /etc/exports #增加一行 /web/htdocs 192.168.1.5(rw)
6.重读exports文件,使立刻生效 [root@allentuns~]# exportfs -r
7.查看服务器共享的文件。前提需要域名解析,否则报错 [root@allentuns~]# uname -n allentuns [root@allentuns~]# echo "127.0.0.1 allentuns" >> /etc/hosts [root@allentuns~]# showmount -e Export list for allentuns: /web/htdocs 192.168.1.5
1.安装showmount [root@allentuns ~]# yum -y install showmount
2.查看服务器共享 [root@allentuns ~]# showmount -e 192.168.1.4 Export list for 192.168.1.4: /web/htdocs 192.168.1.5
3.客户端挂载到本地 [root@allentuns ~]# ll /mnt/ total 0 [root@allentuns ~]# mount -t nfs 192.168.1.4:/web/htdocs /mnt/
服务器端----->>客户端 1.服务器端 [root@allentuns~]# ifconfig |grep "Bcast" inetaddr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0 [root@allentuns~]# cd /web/htdocs/ [root@allentunshtdocs]# ls [root@allentunshtdocs]# cat /etc/issue >> index.html [root@allentunshtdocs]# ll total4 -rw-r--r--. 1 rootroot 47 May 3 19:06 index.html
2.查看是否同步到客户端 [root@allentuns~]# ifconfig |grep "Bcast" inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0 [root@allentuns~]# cd /mnt/ [root@allentuns mnt]# ll total 4 -rw-r--r--. 1 root root 47 May 3 19:06 index.html
客户端----->>服务器端 1.客户端创建文件 [root@allentuns mnt]# ifconfig |grep "Bcast" inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0 [root@allentuns mnt]# touch test.php [root@allentuns mnt]# ll total 4 -rw-r--r--. 1 root root 47 May 3 19:06 index.html -rw-r--r--. 1 nfsnobody nfsnobody 0 May 3 19:10 test.php
2.服务器端看是否已经同步 [root@allentuns htdocs]# ifconfig |grep "Bcast" inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0 [root@allentuns htdocs]# ll total 4 -rw-r--r--. 1 root root 47 May 3 19:06 index.html -rw-r--r--. 1 nfsnobody nfsnobody 0 May 3 19:10 test.php 以上两点证明:nfs服务器端到客户端是双向同步的!!!
以下实验大家用主机名来区分服务器端和客户端,
服务器端为NFS_Server ip-192.168.1.4;
客户端为 NFS_Client ip-192.168.1.5;
实例一: 将/tmp分享给大家使用,让所有的人都可以存取,让root写入档案还是具有root的权限 [NFS Server] [root@NFS_Server~]# ll -d /tmp/ #目录tmp文件系统本身具有读写权限 drwxrwxrwt. 3 root root 4096 May 3 21:39 /tmp/ [root@NFS_Server~]# vim /etc/exports /tmp 192.168.1.5(rw,root_squash) [root@NFS_Server~]# exportfs -r #重新载入配置文件 [root@NFS_Server~]# ll /tmp total 0 -rw-------. 1 root root 0 Apr 23 15:05 yum.log [NFS Client] [root@NFS_Client~]# mkdir /share1 #创建挂载目录 [root@NFS_Client~]# ll /share1/ total 0 [root@NFS_Client~]# mount -t nfs 192.168.1.4:/tmp/ /share1/ #挂载 [root@NFS_Client share1]# ll #已同步到客户端的/share1目录 total 0 -rw-------. 1 root root 0 Apr 23 15:05 yum.log [root@NFS_Client share1]# whoami #查看当前用户 root [root@NFS_Client share1]# touch a.sh #以root用户创建一个测试文件 [root@NFS_Client share1]# ll #查看a.sh的宿主宿组都是root total 0 -rw-r--r--. 1 root root 0 May 3 2014 a.sh -rw-------. 1 root root 0 Apr 23 15:05 yum.log [NFS Server] [root@NFS_Server tmp]# ll #查看a.sh是否同步,查看a.sh的宿主宿组是否是root total 0 -rw-r--r--. 1 root root 0 May 3 22:15 a.sh -rw-------. 1 root root 0 Apr 23 15:05 yum.log ---End---
实验一总结:主要的就是共享权限no_root_squash 要想明白no_root_squash就要先明白root_squash的意思 root_squash:如果客户端是以root身份进行对nfs分区操作,那么会被root_squash压缩成nfsnobody。 no_root_squash:与root_squash意思相反,就是不压缩,仍然是以root用户进行进行操作nfs分区,安全性没有保证 例题二、 同一目录针对不同范围开放不同的权限 我们将一个公共的目录/www/onair 公开出去,但是我们只限定我的局域网络192.168.1.0/24这个网且加入Allentunsgroup的用户才能够读写,其它来源则只能读取 [ON Server] [root@NFS_Server ~]# mkdir /www/onair -pv mkdir: created directory `/www' mkdir: created directory `/www/onair' [root@NFS_Server~]# touch /www/onair/a.sh [root@NFS_Server~]# groupadd -g 500 Allentunsgroup [root@NFS_Server~]# useradd -g Allentunsgroup -r 500 Allentuns [root@NFS_Server~]# setfacl -m g:Allentunsgroup:rwx /www/onair #设置Allentunsgroup组对/www/onair文件的读写执行权限 [root@NFS_Server~]# ll -d /www/onair/ drwxrwxr-x+ 2 root root 4096 May 4 01:45 /www/onair/ [root@NFS_Server~]# cat /etc/group |grep Allentunsgroup #查看对应的gid后面会用到 Allentunsgroup:x:500: [root@NFS_Server~]# vim /etc/exports /www/onair 192.168.1.0/24(rw) *(ro) [root@NFS_Server~]# exportfs -r [ON Client] [root@NFS_Client~]# mkdir /usr/local/onair [root@NFS_Client~]# showmount -e 192.168.1.4 Export list for 192.168.1.4: /www/onair (everyone) [root@NFS_Client~]# mount -t nfs 192.168.1.4:/www/onair /usr/local/onair/ [root@NFS_Client~]# cd /usr/local/onair/ [root@NFS_Client onair]# ll total 0 -rw-r--r--. 1 root root 0 May 4 01:45 a.sh [root@NFS_Client onair]# whoami root [root@NFS_Clien onair]# touch b.sh #拒绝 touch: cannot touch `b.sh': Permission denied root用户拒绝写入 然后创建一个新账号,并加入到Allentunsgroup组中测试是否有写入权限 [root@NFS_Client~]# groupadd -g 500 Allentunsgroup [root@NFS_Client~]# cat /etc/group |grep Allentunsgroup Allentunsgroup:x:500: [root@NFS_Client~]# useradd -g Allentunsgroup scott [root@NFS_Client~]# id scott uid=500(scott) gid=500(Allentunsgroup) groups=500(Allentunsgroup) [root@NFS_Client~]# passwd scott Changing password for user scott. New password: BAD PASSWORD: it is too short BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. [root@NFS_Client onair]# su scott [scott@NFS_Client onair]$ whoami scott [scott@NFS_Client onair]$ ll total 0 -rw-r--r--. 1 root root 0 May 4 01:45 a.sh [scott@NFS_Client onair]$ touch b.sh #写入成功 [scott@NFS_Client onair]$ ll total 0 -rw-r--r--. 1 root root 0 May 4 01:45 a.sh -rw-r--r--. 1 nobody Allentunsgroup 0 May 4 2014 b.sh [ON Server] [root@NFS_Server ~]# ll /www/onair/ total 0 -rw-r--r--. 1 root root 0 May 4 01:45 a.sh -rw-r--r--. 1 Allentuns Allentunsgroup 0 May 4 02:11 b.sh 已经同步到Server端,并且同步到server端的用户是Allentuns,用户组为Allentunsgroup setfacl的用法 setfacl命令可以用来细分linux下的文件权限。 chmod命令可以把文件权限分为u,g,o三个组, 而setfacl可以对每一个文件或目录设置更精确的文件权限。 比较常用的用法如下: setfacl �Cm u:apache:rwx file 设置apache用户对file文件的rwx权限 setfacl �Cm g:market:rwx file 设置market用户组对file文件的rwx权限 setfacl �Cx g:market file 删除market组对file文件的所有权限 getfacl file 查看file文件的权限 Error1 [root@NFS_Server onair]# service rpcbind stop shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory Stopping rpcbind: 解决办法 退出当前目录,重新执行此命令 ---End---