Complex security mechanism is unsecure
John F Haugh II
jfh at rpp386.cactus.org
Thu Dec 13 00:46:05 AEST 1990
In article <6874 at titcce.cc.titech.ac.jp>, mohta at necom830.cc.titech.ac.jp (Masataka Ohta) writes:
> In the latter case, you must be careful that no unauthorized person can
> have uucp nor root priviledge. If you have an executable owned by uucp
> in root's command serach path (like /usr/bin/tip), those who have uucp
> priviledge can easily set a trojan horse trap.
sure, and any program owned by "bin" which is in root's command search
path is also likely to be a trojan horse. most of the programs in /bin
have that property. this is why "bin" shouldn't have a password unless
you are willing to have the owners of "bin"'s password become "root"
someday. and the same applies, of course, to "uucp" and "sys" and so on.
> >Unfortunately, if you have an application that
> >wants to change the ownership to the user, such as cu, you must now
> >make cu set-UID to "root".
>
> But it is more secure.
not true - read on.
> So, don't make the security mechanism complex. The simpler, the more secure.
this part is true - the number of things which you must protect against
with "root" being the effective user ID is far greater than the number
of failure modes with a program set-UID to "uucp". "uucp" has no
extra privileges, whereas "root" has all of them.
consider for just a moment the entire catagory of failures along the
lines of "illegal file access". "root" does not require access permission
to change a file, but "uucp" does. there still remains many other system
calls which have special behavior with euid == 0. none of those apply
to euid == "uucp". finally, as if we were adding insult to injury, the
common implementation of setuid() on System V does not include the ability
to toggle between euid == 0 and euid == ruid - the first visit from 0 to
ruid is permanent, which means that you either run as euid == 0 all day
long, or fork off other processes to change their id's and exit. yet, if
euid != 0 and ruid != 0, you are free to alternate between euid and ruid
repeatedly (actually, between ruid and the saved set user ID).
so, the short form answer is that in general set-UID to root is far less
secure that set-UID to non-root, and this is borne out in various security
related documents and criteria. you should =always= execute with the
least amount of privilege required to perform the task at hand. set-UID
to root is a direct violation of this concept of least privilege.
--
John F. Haugh II UUCP: ...!cs.utexas.edu!rpp386!jfh
Ma Bell: (512) 832-8832 Domain: jfh at rpp386.cactus.org
More information about the Comp.unix.internals
mailing list