Subject: Re: Addition to force open to open only regular files
To: None <tech-kern@netbsd.org>
From: Noriyuki Soda <soda@sra.co.jp>
List: tech-kern
Date: 11/23/2000 03:13:37
> > Half-open, open-only-normal-files, fsetuid, open_as are all insufficient,
> > because there are system calls other than open(2) which is related to
> > user's privilege.
> > The saved-uid/gid feature can do what those can do, and can cope with
> > system calls other than open(2), too.
>
> Exactly. And that's the problem, not the solution.
>
> Of all the proposals so far open_as() is the only one that provides
> sufficient functionality to solve the entire class of problems while at
> the same time not making a new set of problems for itself.
I cannot understand the above statement.
If I understand correctly,
fd = open_as(filename, ...., real_uid);
is just same with the following code:
if ((euid = geteuid()) == real_uid) {
fd = open(filename, ...);
} else {
seteuid(real_uid);
fd = open(filename, ...);
seteuid(euid);
}
So, saved-uid/gid feature can do what open_as() can do.
And, open_as() cannot do what saved-uid/gid can do.
We already have saved-uid/gid feature, we currently don't have
open_as().
Saved-uid/gid is almost portable on all POSIX based systems(*),
open_as() is not portable at all.
So why you'd say "open_as is the only one that provides sufficient
functionality"?
I seemd to recall that calling open_as() can automatically disable
setreuid(2)/setregid(2). But that doens't solve any problem.
The setreuid(2)/setregid(2) problem is that a application can
call setreuid(2)/setregid(2) before calling a library function
which calls open(2), so, the library function cannot know
how to drop it's setuid privilege. Open_as() doesn't solve this
problem. So, there is nothing that open_as() is better than
saved-uid/gid feature.
(*) The reason that our saved-uid/gid feature is not compatible
with POSIX_SAVED_ID is:
In POSIX_SAVED_ID, only root-setuid program can drop
it's saved uid by setuid(2), normal-user-setuid program
cannot drop it's saved uid.
In NetBSD, normal-user-setuid program can drop it's
saved uid privilege.
--
soda