NFS security
Guy Harris
guy at gorodish.Sun.COM
Fri Sep 9 16:43:03 AEST 1988
> You're correct in that the error has nothing to do with NFS, but mknod
> will not allow anyone but the superuser to create files *at the system
> call level*. Even if mknod(8) didn't have the check you describe, the
> call would fail later in the program when mknod(2) was issued.
Yes, I'm quite aware of that; that's why I stated that I had no idea what the
check was doing in the "mknod" command. The only effects the check in the
command has are:
1) since the check is done before the check for "argc != 5" in the S5
version if a non-superuser forgets what the syntax is for creating
FIFOs, they can't just type "mknod" and get a usage message (this is
done right in the Sun version).
2) the error message you get if you're not super-user is
mknod: must be super-user
rather than
mknod: Not owner
which is a more useful message. This is the only reason I can see
for sticking the check in. (The "correct" fix for this would be to
add a new error code, so that you can distinguish between "you can't
do that to the object in question because your effective user ID is
not that of the owner of the object nor is it superuser", which
would give the message "Not owner", and "you can't do that because
you're not superuser", which would give the message "Not
super-user". The two are distinct errors, but unfortunately are
both reported with the same error code EPERM. It is, alas, a bit
late to fix UNIX's overloaded error codes....)
> Another thing to be wary of is "superuserness" does not carry over NFS
> connections, thus if you were root on the local system and tried to
> issue mknod for a NFS filesystem, you might get the same style of
> error. This would, in fact, be a problem with NFS. But most people I
> know call it a feature.
The problem, as originally stated, is that the superuserness is irrelevant once
the operation goes over the wire, in most UNIX NFS servers; the server does not
forbid remote "mknod"s, even if 0 is mapped to -2. The check is done at the
system call level, so neither the NFS server code nor the underlying UNIX file
system code that the server calls does the check. The check should be done in
the underlying file system code, and not at the system call level (after all,
somebody might want to implement a file system on which non-superusers *can* do
arbitrary "mknod" operations).
More information about the Comp.unix.wizards
mailing list