RE: Different sequence of "exportfs" produce different effects on nfs client mounts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Bruce,
	The nfs-utils on my box is nfs-utils-1.2.1-2.6.6, which is Suse distributed.
	I tried the same experiment on fedora18, which use nfs-utils-1.2.6, and got the same result.
	I go through the code of support/export/client.c, found that in client_get_type(), when the client is specified as an IP address(which can not be resolved as an FQDN), it actually return the result: MCL_SUBNETWORK.
	I guess that's the reason that the client "192.168.0.21" and "192.168.0.0/16" both are sorted to the same category: MCL_SUBNETWORK, so the order of exports matters here.
	Is this what exportfs and mountd mean to be?
B.R
Minlan Wang

On Tuesday, October 15, 2013 at 03:49AM +0000, Bruce Fields wrote:
> Looking at the mountd code....
> 
> Looks like utils/mountd/cache.c makes no special effort to prioritize
> exports except in the v4root and crossmnt cases, neither an issue in
> your case.
> 
> So yes it depends on ordering. From man exports:
> 
> 	 If a client matches more than one of the specifications above,
> 	 then the first match from the above list order takes precedence
> 	 - regardless  of the  order they appear on the export line.
> 	 However, if a client matches more than one of the same type of
> 	 specification (e.g.  two  netgroups), then  the  first  match
> 	 from  the order they appear on the export line takes
> 	 precedence.
> 
> The order given is: single host, IP networks, wildcards, negroups,
> anonymous.
> 
> So the single host exports should have taken precedence.
> 
> The code here does look like it corectly implements the above ordering.
> 
> What version of nfs-utils are you using?
> 
> --b.
> 
> On Tue, Oct 15, 2013 at 06:39:59AM +0000, Wangminlan wrote:
> > On Mon, Oct 14, 2013 at 16:46 +0000, Bruce Fields wrote:
> > > On Mon, Oct 14, 2013 at 02:16:58AM +0000, Wangminlan wrote:
> > > >   Hi,
> > > >            I’ve got a problem on the nfs exportfs command. I’m
> not
> > > sure if this is the right place to ask this, if not, can you please tell me
> where?
> > > >
> > > >            Here’s what I need:
> > > >   1. I have a folder named /mnt/fs1 to be exported.
> > > >   2. All the host in subnetwork 192.168.0.0/16 should be able access
> this
> > > folder, but their root should be squashed.
> > > >   3. Some specified host in the same subnetwork can gain the root
> > > permission on the folder, for example: 192.168.0.21, 192.168.0.22.
> > > >
> > > >   I’ve got a SLES11SP1 box as the nfs server, the nfs clients are
> SLES11SP1,
> > > too, and the protocol used between clients and server are NFSv3.
> > > >   Here are the commands I used to do the export:
> > > >   #exportfs –o rw,root_squash 192.168.0.0/16:/mnt/fs1
> > > >   #exportfs –o rw,no_root_squash 192.168.0.21:/mnt/fs1
> > > >   #exportfs –o rw,no_root_squash 192.168.0.22:/mnt/fs1
> > > >   After this, everything works as expected.
> > After this, the contents of /proc/net/rpc/auth.unix.ip/content and
> /proc/net/rpc/nfsd.export/content are:
> > 	NV200_01:/proc/net/rpc # cat auth.unix.ip/content
> > 	#class IP domain
> > 	nfsd 192.168.0.21 192.168.0.0/16,192.168.0.21
> > 	nfsd 0.0.0.0 -test-client-
> > 	# nfsd 100.43.189.1 -no-domain-
> >
> > 	NV200_01:/proc/net/rpc # cat nfsd.export/content
> > 	#path domain(flags)
> > 	/mnt/fs1
> 	-test-client-(rw,no_root_squash,sync,no_wdelay,fsid=0,anonuid=4294967
> 295,anongid=4294967295)
> > 	/mnt/fs1
> 	192.168.0.0/16,192.168.0.21(rw,no_root_squash,sync,wdelay,no_subtree
> _check,uuid=13266f0d:1fbd40d5:b0b5c4fe:cfe104eb)
> > 	# /mnt/fs1
> 	192.168.0.0/16,192.168.0.21(rw,no_root_squash,sync,wdelay,no_subtree
> _check,uuid=13266f0d:1fbd40d5:b0b5c4fe:cfe104eb)
> > Besides, the content of /var/lib/nfs/etab is:
> > 	NV200_01:/proc/net/rpc # cat /var/lib/nfs/etab
> > 	/mnt/fs1
> 	192.168.0.22(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no
> _all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=6553
> 4)
> > 	/mnt/fs1
> 	192.168.0.21(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no
> _all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=6553
> 4)
> > 	/mnt/fs1
> 	192.168.0.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_
> all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534
> )
> > > >
> > > >   But, after the following operations:
> > > >   #exportfs –u 192.168.0.0/16:/mnt/fs1              /* Delete
> this
> > > export */
> > > >   # exportfs –o rw,root_squash 192.168.0.0/16:/mnt/fs1
> /*
> > > And add it again */
> > > >   Hosts on 192.168.0.21 and 192.168.0.22 doesn’t get root
> permission
> > > any more. when I tried to write a file, it complains about “Permission
> denied”.
> > > >
> > > >   So, does the order of exportfs command has something to do the
> final
> > > result? Or am I doing something wrong?
> > After this, the contents of /proc/net/rpc/auth.unix.ip/content and
> /proc/net/rpc/nfsd.export/content are:
> > 	NV200_01:/proc/net/rpc # cat auth.unix.ip/content
> > 	#class IP domain
> > 	nfsd 192.168.0.21 192.168.0.0/16,192.168.0.21
> > 	nfsd 0.0.0.0 -test-client-
> > 	# nfsd 100.43.189.1 -no-domain-
> >
> > 	NV200_01:/proc/net/rpc # cat nfsd
> > 	nfsd         nfsd.export/ nfsd.fh/
> > 	NV200_01:/proc/net/rpc # cat nfsd
> > 	nfsd         nfsd.export/ nfsd.fh/
> > 	NV200_01:/proc/net/rpc # cat nfsd.export/content
> > 	#path domain(flags)
> > 	/mnt/fs1
> 	-test-client-(rw,no_root_squash,sync,no_wdelay,fsid=0,anonuid=4294967
> 295,anongid=4294967295)
> > 	/mnt/fs1
> 	192.168.0.0/16,192.168.0.21(rw,root_squash,sync,wdelay,no_subtree_ch
> eck,uuid=13266f0d:1fbd40d5:b0b5c4fe:cfe104eb)
> > And the content of /var/lib/nfs/etab is:
> > 	NV200_01:/proc/net/rpc # cat /var/lib/nfs/etab
> > 	/mnt/fs1
> 	192.168.0.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_
> all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534
> )
> > 	/mnt/fs1
> 	192.168.0.22(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no
> _all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=6553
> 4)
> > 	/mnt/fs1
> 	192.168.0.21(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no
> _all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=6553
> 4)
> > >
> > > That sounds like a bug.  The contents of
> > > /proc/net/rpc/auth.unix.ip/content and /proc/net/rpc/nfsd.export/content
> > > after getting the above "permission denied" might be interesting.
��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux