Subject: Re: clearing suid/sgid bits upon ownership change
To: Rob Windsor <windsor@warthog.com>
From: Klaus Klein <kleink@ira.uka.de>
List: tech-kern
Date: 12/10/1997 14:43:31
Rob Windsor <windsor@warthog.com> writes:
> vfs_syscalls.c - line 1664
>
> /* Clear (S_ISUID | S_ISGID) bits: alter va_mode only if necessary. */
> if (vattr.va_mode & (S_ISUID | S_ISGID))
> newmode = vattr.va_mode & ~(S_ISUID | S_ISGID);
> Clears any suid or sgid bits if owner or group changes. Even something
> insane like clearing the suid bit if you change the group ownership.
Yes.
> This sucks. Please #ifdef it or change it so that this appears when
> securelevel >1. I can't stand this behavior. No other modern un*x in the
> world does this insane crap. I just love `surprises' like this in NetBSD --
> not.
1) POSIX.1 *requires* chown(2) to clear the set[gu]id bits, at least
if the caller is not the superuser. It is implementation-dependent
whether they are cleared if the caller is the superuser; after
discussing this matter with Charles Hannum we decided not to check for
that condidition; I *do* admit that one might argue about that.
2) Every "other modern un*x in the world" does this, at least for the
non-superuser case.