多语言展示
当前在线:1080今日阅读:195今日分享:14

0基础跟我学linux服务器 2、怎么配置nfs和权限

上一节(https://jingyan.baidu.com/article/20095761df297ccb0621b455.html)小编教大家建立了简单的NFS服务器,接下来小编要具体带大家深入了解下NFS的配置文件以及后面的权限问题啦。
工具/原料

一台linux

方法/步骤
1

首先我们得知道NFS的配置文件在哪里。NFS的配置文件在/etc/exports

2

我们先来看看上一篇小编带大家写的配置文件。cat /etc/exports可以看到,我们这里有3个参数。分别是/mynfs *(ro,sync)对应的关系是:共享什么?谁能用?怎么用?第一个参数/mynfs的意思就是,nfs服务器要向客户端共享根目录下的mynfs这个文件夹。第二个参数是哪些主机能访问?这里我们写了个通配符*,意思就是说所有主机都能访问。当然,写法是很灵活的,比如我们可以让192.168.1.*网段的主机能访问,甚至可以只提供前面的几个主机位和网络位,例如192.*.*.*,还可以使用?通配符,例如192.168.1.?,这样的话,也就是说我们只能允许,192.168.1.0 - 192.168.1.9的主机可以访问。或者是192.168.1.?2(局限于192.168.1.12、22、32、42......92),或者192.168.1.??(也就是说局限于192.168.1.10-192.168.1.99的主机访问。)还可以写FQDN,也就是完整域名,例如www.baidu.com,如何dns设置正确的话,你可以让一个域里面的用户来访问nfs。或者具体的工作组?第三个参数是怎么使用共享?我们的ro表示权限只读,sync表示同步写入数据。当然,我们还可以这样写:共享文件路径 主机1(配置) 主机2(配置) 主机x(配置)....

3

我们这里详细的了解下第三个参数,怎么使用?ro/rw,ro是只读,rw是读写sync/async(同步/异步),具体可以看man exports,什么是同步和异步,说简单点就是,不管你在nfs目录上写了多少数据,同步的话,就实时同步到nfs服务器,异步指的就是暂时把数据保存在内存里,适当的时候再写到硬盘里(例如缓冲区满了,再者用户断开了nfs,而用户又改变了nfs的文件,那么这时就可以写数据了。)异步可以提高服务器性能。no_wdelay:若有写操作则立即执行,应与sync配合使用(wdelay为延迟的意思,意思就是no wdelay不延迟)root_squash/no_root_squash(压缩root为来宾/不压缩root为来宾)为什么要用压缩这个词呢?因为squash这个单词自身就是压缩的意思。什么叫压缩root为来宾,也就是说如果你指定了root_squash,如果root登陆了nfs,那么他在这个nfs并没有root的超级权限,因为他被压缩成了来宾。那么no_root_squash呢,就是不压缩root为来宾,也就是说如果root登陆了nfs,那么他具备了所有权限(试想下,如果别的unix登陆了你NFS,把你的文件全删了)。all_squash/no_all_squash(压缩所有用户为来宾/不压缩所有用户为来宾),这个就不细说了,但是要注意一点,nfs默认设置为root_squash和all_squash,也就是说任何人都是来宾用户。subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)insecure:允许客户端从大于1024的tcp/ip端口连接服务器图为man exports

4

更精确的设置:anonuid=uid/anongid=gid(压缩来宾为指定的用户/压缩来宾为指定的用户组)有了这个参数我们配置起来就很方便了,这是让我们改变默认的来宾用户。默认的来宾用户是nfsnobody我们可以通过cat /etc/passwd来找到这个nfsnobody用户。

5

你发现没有,nfs没有任何的参数来做这样一个事,例如只指定某个特定的用户可以写我们的某个nfs目录,其他用户只能读。如果我们想这样做,只有两个办法:第一:通过主机限制。我们可以写成,/mynfs *(ro) 指定的IP(rw) 目录权限需要设置正确(例如其他用户我们设置为rw-)第二:通过no_all_squash(在unix上,只要有对应的uid,就具备对应目录权限),这个的话,如果在windows上挂载就很尴尬咯我们这就开始第二个方法。在之前,小编要说清楚一点,关于权限的优先级的问题。例如,我们的mynfs的权限是rwxr--r--,而这个文件的所有者是root,即使我们在exports中写了rw,也是不能写的。那如果mynfs的权限是rwxr--rw-的话,而我们在exports中只写了ro,那么也是不能写的。目录权限优先于配置文件设置的权限,这点请切记。例如,我们现在想要让binn这个用户具备nfs目录的所有权限(读写和执行),其他用户只能读。关于权限的问题,我们只需要把nfs目录所有者设置为binn。chown binn mynfs

6

修改nfs目录权限。chmod u=rwx,o=r /mynfs然后ls -l看看权限。

7

然后我们开始写配置文件。vim /etc/exports/mynfs *(rw,no_all_squash,sync,root_squash)设置mynfs 读写权限,不压缩用户为来宾,同步传输,压缩root用户为来宾:wq保存退出

8

/etc/init.d/nfs restart重启nfs服务

9

然后我们来到另外一台机器上,新建一个binn用户。然后登陆binn用户。su获得root权限。mount -t nfs NFS的IP:\nfs目录 挂载点挂载成功可以通过mount查看

10

我们先用root权限去访问下我们的nfs,这时发现竟然没有权限,可是刚刚我们明明在nfs服务器上,chmod o=r /mynfs。这时请注意,我们只给了r读的权限,并没有给x执行的权限,而cd改变当前目录,确实要x权限的,不相信我们可以ls看看。

11

我们只需要在nfs服务器上chmod o=rx /mynfs就可以了。这时我们再cd进去,是不是可以进去了呢?

12

这时我们尝试新建一个文件试试?touch heymynfs提示权限不足,为啥?你难道忘了?我们压缩了root用户(root_squash),而root用户只是一个普通的来宾用户,也就是在我们的nfs目录上,是其他用户,那么,只有读和执行的权限,并没有写的权限。那么,很简单。我们把root权限退出来,回到我们的binn用户。

13

cd /mnt然后touch heymynfs。是不是成功了?本节到这里就结束了,大家要自己动手才能体会到unix的精髓。下节小编会教大家怎么在网络上查看nfs服务器和使用nfs的一些工具。

注意事项

如果喜欢本经验,请关注我。可以把它分享给您的朋友,烦请点个投票点个收藏。谢谢,您的支持是我最大的动力。

推荐信息