文章目录
Linux中怎么搭建NFS服务器:
一、NFS介绍:
1、什么是NFS?
NFS(Network File System)的缩写,它最大的功能是可以通过网络,让不同的机器,不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。
NFS使用的是C/S架构
2、NFS的优点:
序号 | NFS的优点: |
---|---|
1 | 可以把服务器的文件像本地一样的操作,很方便 |
2 | NFS服务器对系统资源占用也少 |
3 | NFS可以支持很多其他服务,比如kickstart(kickstart 是无人值守,网络批量安装服务),NIS等等 |
4 | 还有很多,反正用linux和UNIX就不会离开NFS |
3、NFS的守护进程:
NFS的守护进程 | 注解 |
---|---|
rpc.nfsd | 它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器 |
rpc.mountd | 它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的文凭前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。 |
rpcbind(6.0/7.0版本) | portmap的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。 |
4、NFS的访问权限:
设置输出目录只读:ro
设置输出目录读写:rw
5、用户映射选项:
选项 | 注解 |
---|---|
all_squash(默认设置) | 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody) |
no_all_squash | 同上但相反 |
root_squash(默认设置) | 将root用户及所属组都映射为匿名用户或用户组 |
no_root_squash | 同上但相反 |
anonuid=xxx | 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx) |
anongid=xxx | 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx) |
其它选项 | |
secure(默认设置) | 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器 |
insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
sync | 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性 |
async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 |
wdelay(默认设置) | 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率 |
no_wdelay | 若有写操作则立即执行,应与sync配合使用 |
subtree(默认设置) | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限 |
no_subtree | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |
6、NFS的常用目录:
目录 | 注解 |
---|---|
/etc/exports | NFS的主要配置文件(该文件可能不存在),可能要使用vi手动建立,然后在文件里面写入配置内容 |
/usr/sbin/exportfs | 维护NFS共享资源的命令,一般用的很少 |
/usr/sbin/showmount | 主要用于客户端,查看NFS共享出来的目录资源 |
/var/lib/nfs/*tab | 其中etab:记录了NFS分享出来的目录的完整权限设定值。 另一个是xtab:记录曾经连接到此NFS主机的相关客户端数据 |
二、搭建NFS服务器:
说明:本次实验环境为Redhat7.2版本,使用的两台虚拟机:
一台作为服务端(NFS)IP地址为:192.168.0.35
一台作为客户端(Client)IP地址为:192.168.0.36
NFS的包默认是安装过的,这里我们就直接开始搭建吧。
1、服务端:
(1)使用命令:mkdir /public
(2)编辑exports文件:vim /etc/exports,并写入:挂载目录和用户权限
/public 192.168.0.0/255.255.255.0(rw)
(3) 改变目录权限:chmod 777 /public/
(4)然后启动:systemctl restart nfs
当然我们可以放一写文件进去,我这里什么都没有存放。
2、客户端:
(1)客户端为了方便管理起见,这里也创建一个目录。使用命令:mkdir /PUBLIC
(2)使用showmount -e 192.168.0.35 查看这台服务器的挂载点都有哪些。
(3)使用:mount 192.168.0.35:/public /PUBLIC命令将它挂载到本地的PUBLIC目录。
(4)使用df -h 命令查看磁盘分区情况,我们可以看到已经挂在上了。
(5)接下来我们切换到挂载目录,然后写入一个文件进去。(我们可以看到默认以匿名形式:nfsnobody展现。
三、实验:
架设一台NFS服务器,并按照以下要求配置输出目录:
①开放 /nfs/shared 目录,供所有用户查阅资料。
②开放 /nfs/upload 目录作为 192.168.0.0/24 网段的数据上传目录,并将所有用户及所属的用户组都映射为 nfs-upload ,其UID与GID均为 210 。
③将 /home/tom 目录仅共享给 192.168.0.36 这台主机,并且只有用户tom可以完全访问该目录。
1、首先我们先创建文件夹,接着检测一下是否存在ID为210的用户
(1)在客户端也创建一个用于专门挂载服务端的文件夹:
mkdir /nfsshared
mkdir /nfsupload
(2)在服务端 /nfs/shared 写入一个文件:
(3)由于文件夹具有写权限,因此修改权限为777
2、接着我们创建一个UID为210的用户:useradd -u 210 nfs-upload
3、然后修改配置文件如下:
(我们先做前两个测试一下,剩下一个留着最后做)
4、重启服务:systemctl restart nfs
5、客户端进行挂载:
[root@Client ~]# mount 192.168.0.35:/nfs/shared /nfsshared/
[root@Client ~]# mount 192.168.0.35:/nfs/upload /nfsupload/
6、客户端查看是否挂上,使用df -h 命令,或者mount命令
7、客户进行测试:
(1)切换到 /nfsshared
我们发现,果然成功查看,但是写入却失败了。
(2)切换到 /nfsupload
①尝试写入一个文件,直接成功。
②服务端进行查看用户
上面用到的是root用户,我们切换到普通用户试一下吧。
①普通用户写入一个文件
②服务端再查看一下:
8、最后一步;
(1)创建用户tom,然后再tom的家目录下写入一个文件,之后再编辑配置文件,将它共享出去。
(2)之后重启服务:exportfs -r
(3)客户端创建专门的目录进行挂载,我们挂载之后使用root用户发现,权限被拒绝,之后我们创建了tom用户之后,就可以挂载上了。
注意:创建的tom的UID要一样,NFS就是基于UID、GID进行映射的。
最后,我们用tom用户写入一个文件试试,没问题,tom确实有所有的权限。