Reno mount(1) can't mount NFS filesystems from "secure" mountds +FIX
Jonathan
jonathan at comp.vuw.ac.nz
Mon Feb 11 09:42:55 AEST 1991
Synopsis:
/sbin/mount doesn't use a reserved port for NFS mounts,
as required by the latest Sun implementation.
Symptom:
Some NFS mount requests fail. For example, attempting to mount the
filesystem /home/whitu from the SunOS 4.1 system whitu.isor on the
4.3BSD-Reno system nikau:
Script started on Mon Feb 11 10:06:44 1991
nikau# mount -t nfs -o ro whitu.isor:/home/whitu /u/isor/whitu
Can't access /home/whitu: Permission denied
script done on Mon Feb 11 10:06:56 1991
Repeat-by:
On a 4.3bsd-Reno system, attempt to NFS-mount a filesystem
exported from a Sun running SunOS 4.1 or 4.1.1, where the
mountd on the sun is started without a "-n" argument.
Diagnosis:
NFS mount daemons (mountd's) based on Sun's release 3.0 of NFS
(including, but not limited to, those shipped with SunOS 4.1, MORE/bsd,
and Irix 3.3) will only communicate with reserved ports (i.e., port
numbers less than 1024). The port the Reno mount(1) uses to obtain the
args for an NFS mount is not a reserved port.
On such systems, the -n argument to mountd removes this restrictions,
but makes things slightly less secure. Some sysadmins therefore
refuse to use it, so this is not a suitable workaround.
Fix:
A kludge to force a reserved port follows. This is sufficient for
a single mount request, but could be more robust.
*** mount.c.orig Sat Jun 23 05:16:56 1990
--- mount.c Wed Feb 6 12:02:40 1991
***************
*** 675,680 ****
--- 675,700 ----
u_short tport;
static struct nfhret nfhret;
static char nam[MNAMELEN + 1];
+ #if 1
+ struct sockaddr_in soname;
+
+ /*
+ * Make sure socket for mount info RPC is privileged.
+ * Newer mount daemons require it.
+ */
+ if ((so = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
+ perror("mount: creating socket for NFS args");
+ exit(1);
+ }
+ soname.sin_family = PF_INET;
+ soname.sin_addr.s_addr = INADDR_ANY;
+ soname.sin_port = htons(IPPORT_RESERVED - 2);
+ soname.sin_len = sizeof(soname);
+ if (bind(so, &soname, sizeof(soname)) < 0) {
+ perror("mount: binding reserved port");
+ exit(1);
+ }
+ #endif
strncpy(nam, spec, MNAMELEN);
nam[MNAMELEN] = '\0';
--
-----------------------------------------------------------------------------
sane mailers: jonathan at comp.vuw.ac.nz | Proverbs for Paranoids, 3:
UUCP: ...!uunet!comp.vuw.ac.nz!jonathan| {\em You} hide, {\em They} seek.
| - Thomas Pynchon
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list