<返回更多

NFS服务器配置-笔记

2022-06-10    知亿
加入收藏

通过NFS共享文件

NFS的全称:网络文件系统

此服务主要是用于 linux 和linux之间;unix 和 unix之间的网络文件传输;

这个服务器相对来说比较简单,但是难度在于如何配置它的端口号。

工作原理:

NFS提供很多功能,如:rpc.nfs;rpc.mount;rpc.lockd不同的功能由不同的daemon来完成。

NFS使用的端口是2049端口;

RPC使用的端口是111端口;(远程过程调用)

 

NFS服务器默认是安装好的,我们现在给重新启动一下:

# service nfs restart

当我在启动NFS的时候,NFS会把它的一些daemon发送到RPC去注册,RPC会随机的给这些daemon随机的去分配一些端口

可以使用如下命令查看随机分配的端口号有哪些:

# rpcinfo –p localhost 这里看到的随机分配的端口,只要一重新启动NFS,端口就又会重新分配,和现在看到的端口就不会是一样的了。

这里的随机分配的端口号是一个大问题,当我们在写防火墙的时候,就不容易写端口号了,因为这些端口号在每次重新启动NFS服务器的时候,都会重新分配不一样的端口号,那这些端口号是否可以固定呢?可以的,如下:

# vim /etc/sysconfig/nfs

找到如下端口号,把它改一下:

找到这些行,如下:

# LOCKD_TCPPORT=32803

# LOCKD_UDPPORT=32769

# MOUNTD_PORT=892

# STATD_PORT=662

找到上面这些行,然后把这些行前面的“#”给去掉,把后面的端口号给改一下,并且用双引号给引起来,如下:

LOCKD_TCPPORT=”4001”

LOCKD_UDPPORT=”4001”

MOUNTD_PORT=”4002”

STATD_PORT=”4003”

重启NFS之后,发现上面的端口号已经被固定下来,如下:

# service nfs restart

# rpcinfo –p localhost

然后就可以通过防火墙来控制其端口了。

# iptables –I INPUT 1 –p tcp –dport 111 –j ACCEPT

# iptables –I INPUT 1 –p udp –dport 111 –j ACCEPT

# iptables –I INPUT 1 –p tcp –dport 2049 –j ACCEPT

# iptables –I INPUT 1 –p udp –dport 2049 –j ACCEPT

# iptables –I INPUT 1 –p tcp –dport 4001:4003 –j ACCEPT

# iptables –I INPUT 1 –p udp –dport 4001:4003 –j ACCEPT

防火墙配置好之后一定要保存一下,如下:

# service iptables save

下面就开始配置网络共享了,如下:

先创建一个文件夹,然后通过NFS把这个文件共享出去:

# mkdir /xx

然后编辑一个文件:

# vim /etc/exports

语法:共享目录 共享的范围(属性1,属性2,……)

/xx 192.168.80.0/24(rw,sync)

“rw”为可读可写;

“ sync”为同步;同步的意思就是说,当用户把这个共享目录挂载到本地时,用户往这个挂载目录里写东西,其实就往/xx里写东西,两者保持一个同步。

 

在另外一台linux机器上查看服务器上的共享,方法:

# showmount –e 192.168.80.88

然后将服务器上共享目录挂载到本地上,如下:

# mount 192.168.80.88:/xx /tmp

当往这个挂载的目录里写文件的时候,发现权限不够,原因如下:

# cd /tmp/

# touch xx

Touch: 无法创建“xx”:权限不够

权限不够的原因是:是因为服务器里有一个设置,我们只写了两个(rw,sync),但实际上它还有一个隐藏的选项,我们没有看到而已,那这个隐藏选项叫 root_squash,意思是权限的压缩,这个权限是默认权限,并没有显示在这里面。意思是说,我现在共享了一个目录,在客户端上面如果挂载了我的共享目录的话,在客户端上如果使用root来登录的话,使用root来访问我的nfs共享的时候,NFS服务器会把它当成一个匿名用户(NFS nobody),所以当客户端使用root来往NFS里面写东西,由于服务器那边做了root_squash,所以当客户端使用root来往NFS共享里写东西时,服务器会认为客户端使用的是NFS nobody用户(匿名用户)。

为什么这么说?我们来看一个配置文件,如下:

# cat /var/lib/nfs/etab

/xx 192.168.80.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

这里我只设置了rw,sync,其实后面还有很多东西;

后面有写到,root_squash,意思是权限的压缩,压缩为ID为65534的用户。可以看下这个ID为什么用户,如下:

[root@server ~]# id nfsnobody

uid=65534(nfsnobody) gid=65534(nfsnobody) ?=65534(nfsnobody)

这里就显示这个ID为nfsnobody用户(也就是匿名用户)

我们再来看一下这个共享目录的权限(在服务器上)

[root@server ~]# ll -d /xx/

drwxr-xr-x. 2 root root 4096 9? 17 23:18 /xx/

所属用户为root,所属组为root ,那么nfsnobody应该属于其它,权限这里的其它只有一个X权限

然后我们可以给其它加一个w权限,如下:

# chmod o+w /xx

这个时候客户端就可以往这个挂载里面写东西了,如下:

# cd /nfs/

# touch xx

[root@www nfs]# touch x

[root@www nfs]# ll

-rw-r--r--. 1 root root 0 9月 17 23:18 88888

-rw-r--r--. 1 nfsnobody nfsnobody 0 9月 17 23:45 sdo

-rw-r--r--. 1 nfsnobody nfsnobody 0 9月 17 23:47 wen

-rw-r--r--. 1 nfsnobody nfsnobody 0 9月 17 23:49 x

[root@www nfs]#

这个时候就会看下面三个文件的所有者和所属组都是属于nfsnobody了。

 

我们可以不做权限的压缩,如下:

在后面的括号里加上一句 no_root_squash意思是:不做权限的压缩

# vim /etc/exports

/xx 192.168.80.0/24(rw,sync,no_root_squash)

然后执行下面的命令(重新输出),如下;

# exportfs –arv

“a”所有

“r”重新挂载

“v”显示过程

“u”卸载

然后再在客户端上的NFS共享里创建一个文件,会显示所有者和所属组都为root了。

注意:不推荐大家反复多次的重启NFS服务,因为每次重新NFS服务的时候,NFS服务器都会到/var/lib/nfs/etab文件里去注册,会花很长时间,那时在创建文件的时候,会用掉很长时间才能创建出来。所以推荐大家,不要重启NFS服务,而是直接使用exportfs –arv命令。

如果只允许一台主机有写的权限,其它的不能有写的权限,可以写成如下:

# vim /etc/exports

/xx 192.168.80.88/32(rw,sync) 192.168.80.0/24(ro,sync)

前面的子网掩码不能写成24,如果你写成24的话,系统还会认为是这个网段,所以要写成32,另外上面的写法还可以写成:这里给分成两行来写的。

/xx 192.168.80.88/32(rw,sync)

/xx 192.168.80.0/24(rw,sync)

如果有多个共享的话,可以一一把系统中的共享文件全部写入到这里,如果有几百个,可以使用for 循环来做。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>