Linux NFS典型实例及权限详解

1,首先对NFS服务作简单的配置,修改主配置文件,

[root@localhost ~]# vim /etc/exports

/tmp    *(rw,no_root_squash,sync)
/public 192.168.0.0/24(rw,sync)      *(ro,sync)
/test   192.168.0.100(rw,sync)
/linux  *.feifan.com(rw,all_squash,anonuid=40,anongid=40,sync)

 

2,不要忘了创建目录哦,并做权限修改

[root@localhost ~]# mkdir /public
[root@localhost ~]# mkdir /test
[root@localhost ~]# mkdir /linux

[root@localhost ~]# chmod 757 /public/
[root@localhost ~]# chmod 757 /test/
[root@localhost ~]# chmod 757 /linux/

好了,现在可以启动了,

[root@localhost ~]# service portmap start

[root@localhost ~]# service nfs start

如果不放心是否真的启动了,可以查询一下

[root@localhost ~]# netstat -tulnp

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN  

 

[root@localhost ~]# rpcinfo -p localhost
    程序     版本 协议   端口
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    783  status
    100024    1   tcp    786  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   udp   1026  nlockmgr
    100021    3   udp   1026  nlockmgr
    100021    4   udp   1026  nlockmgr
    100021    1   tcp   3953  nlockmgr
    100021    3   tcp   3953  nlockmgr
    100021    4   tcp   3953  nlockmgr
    100011    1   udp    622  rquotad
    100011    2   udp    622  rquotad
    100011    1   tcp    625  rquotad
    100011    2   tcp    625  rquotad
    100005    1   udp    626  mountd
    100005    1   tcp    629  mountd
    100005    2   udp    626  mountd
    100005    2   tcp    629  mountd
    100005    3   udp    626  mountd
    100005    3   tcp    629  mountd

这里还可以连线观察

[root@localhost ~]# showmount -e localhost
[root@localhost ~]# tail /var/lib/nfs/etab

重新挂载设定内容

[root@localhost ~]# exportfs -arv

为了安全,不要忘记设定防火墙哦

[root@localhost ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 111 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -i eth0 -p udp -s 192.168.0.0/24 --dport 111 -j ACCEPT

也可以使用TCP Wrappers来限制

[root@localhost ~]# vim /etc/hosts.allow

mountd: 192.168.0.0/255.255.255.0

mountd: 192.168.1.0/255.255.255.0

[root@localhost ~]# vim /etc/hosts.deny

mountd: ALL

 

3,Client的使用

[root@localhost ~]# showmount -e 192.168.0.2 (NFS ip)

[root@localhost ~]# mount -t nfs 192.168.0.2:/public/ /public

如果是开机就挂载了,就必须修改配置文件

[root@localhost ~]# vim /etc/fstab
192.168.0.2:/public  /public  nfs nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768  0 0

这里我要说的是,还有一种更好的挂载方法,可以让Client要使用NFS共享的目录资料时,才去挂载它,当隔了5分钟没有使用的时候,就主动的卸载它, 要注意的是,那些 /home/nfs/public 是不需要事先建立的。

[root@localhost ~]# vim /etc/auto.master

/home/nfs       /etc/auto.nfs --timeout=60

[root@localhost ~]# mkdir /home/nfs

[root@localhost ~]# vim /etc/auto.nfs

public  -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/public
testing -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/test
temp    -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/tmp

[root@localhost ~]# /etc/init.d/autofs restart

[root@localhost ~]# cd /home/nfs/public

[root@localhost public]#

竟然进来了,是不是很奇怪啊呵呵

 

4,实例演示完了,下面详细分析档案权限

情况一:Client 端与 Server 端具有相同的 UID 与帐号
    假设我在 192.168.0.100 登入 NFS Server (IP 假设为 192.168.0.2) 主机,并且192.168.0.100 的帐号为 tom 这个身份,同时,在这部 NFS 上面也有 tom 这个帐号,并具有相同的 UID,那么,

    ①. 由于 192.168.0.2 这部 NFS 主机的 /tmp 权限为 -rwxrwxrwt ,所以 192.168.0.100 上面的用户在 NFS 的/tmp 底下具有存取的权限,并且写入的档案所有人为 tom ;
   ②. 在 /public 当中,由于我有读写的权限,所以如果在 /public 这个目录的权限对于 tom 有开放写入的话,那么我就可以读写,并且我写入的档案所有人是 tom,但是如果 /public 对于 tom 这个使用者并没有开放可以写入的权限时, 那么我还是没有办法写入档案,这点请特别注意!
    ③. 在 /test 当中,我的权限与 /public 相同,但是还需要 NFS 主机的 /test 对于tom 有读写限;
    ④. 在 /linux 当中,由于用户身份一定都会被变成 UID=40 这个帐号,所以,这个目录就必需要针对 UID = 40 的那个帐号名称,修改他的权限才行。

情况二:Client 端与 Server 端的帐号不同

    假如我在 192.168.0.100 的身份为 tom ,但是 192.168.0.2 这部 NFS 主机却没有 tom 这个帐号时,情况会变成怎样呢?

    ①. 我在 /tmp 底下还是可以写入,但是写入的档案所有人变成 nobody 了;
    ②. 我在 /public 里面是否可以写入,还需要视 /public 的权限而定,不过,我的身份被变成 nobody ;
    ③. /test 与 /public 相同;
    ④. /linux 底下,我的身份被变成 UID = 40 那个使用者。

情况三:Client 端的身份为 root
    假如我在 192.168.0.100 的身份为 root,权限变成怎样

    ①. 我在 /tmp 里面可以写入,并且由于 no_root_squash 的参数,改变了预设的 root_squash 设定值,所以在 /tmp 写入的档案所有者为 root ;
    ②. 我在 /public 底下的身份还是被压缩成为 nobody ,因为预设属性里面都具有 root_squash ,所以,如果 /public 有针对 nobody 开放写入权限时,那么我就可以写入,但是档案所有人变成 nobody ;
    ③. /test 与 /home/public 相同;
    ④. /linux 的情况中,root 的身份也被压缩成为 UID = 40 的那个使用者。

 

在我讲解实例以及权限之后,您应该了解了很多,如果这一关通过了,那么你的 NFS 服务掌握的非常好了,在这里还希望大家提出宝贵意见,给我留言,我的QQ: 303247761

 

有兴趣的朋友可以做这样一个实例:
假设环境∶

   1. 假设我的 Linux 主机为 192.168.0.100 这一部;
   2. 预计将 /tmp 以可读写,并且不限制使用者身份的方式分享给所有 192.168.0.0/24 这个网域中的所有 Linux 工作站;
   3. 预计开放 /home/nfs 这个目录,使用的属性为唯读,可提供除了网域内的工作站外,向外亦提供资料内容;
   4. 预计开放 /home/upload 做为 192.168.0.0/24 这个网域的资料上传目录,其中,这个 /home/upload 的使用者及所属群组为 nfs-upload 这个名字,他的 UID 与 GID 均为 210;
   5. 预计将 /home/andy 这个目录仅分享给 192.168.0.50 这部 Linux 主机,以提供该主机上面 andy 这个使用者来使用,也就是说, andy 在 192.168.0.50 及 192.168.0.100 均有帐号,且帐号均为 andy ,所以预计开放 /home/andy 给 andy 使用他的家目录啦!

你可能感兴趣的:(linux)