Date: Mon, 16 Nov 1998 11:41:04 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Warner Losh <imp@village.org>, Andre Albsmeier <andre.albsmeier@mchp.siemens.de>, Matthew Dillon <dillon@apollo.backplane.com>, freebsd-security@FreeBSD.ORG Subject: Re: Would this make FreeBSD more secure? Message-ID: <199811161941.LAA21747@apollo.backplane.com> References: <19981116081640.A2304@internal> <19981116072937.E969@internal> <19981115192224.A29686@internal> <19981115161548.A23869@internal> <199811151758.JAA15108@apollo.backplane.com> <19981115192224.A29686@internal> <199811152210.PAA01604@harmony.village.org> <19981116072937.E969@int <199811161842.LAA05020@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Ok, here is a proposal:
(1)
Add a 'kmem' and 'tty' dummy user to /usr/src/etc/master.passwd.
Unfortunately, the operator uid is already using 2 (why it didn't
use 5 I'll never know), so give the kmem user uid 5 and the tty
user uid 4 (same as their groups except for the operator<>kmem
flip).
Is there an ANSI or POSIX standard here that we have to use instead
of just guessing?
(2)
Change identd and ntalkd entries in inetd.conf to run ntalkd tty:tty
and identd kmem:kmem.
(3)
Add an lp user and an lp group (what uid/gid ?).
Adjust lpr source to disallow -s if lpd is running secure.
Adjust lpd to chown itself to user/group lpd on startup after binding
its socket. Some additional work may be required to make sure all
the various lpd/lpc/other interactions still work properly.
Adjust mtree and MAKEDEV as appropriate to give printer spool and
printer devices appropriate user/group perms
(4)
Add a simple inherited capability resource, operating as a bitmask,
using two resources. Don't try to do anything fancy.
RLIMIT_MYCAP my capabilities (bitmask: current, allowed)
RLIMIT_INHCAP capabilities inheritable by subprocesses
(bitmask: current, allowed)
(subprocess inherits MYCAP = INHCAP & MYCAP
for both rlim_cur and rlim_max, and inherits
INHCAP directly).
So, for example, you could give a program the ability to turn on
certain capabilities but prevent the program from being able to
pass some or all of those capabilities to a subprocess (fork or exec).
You can give a program permission to use certain capabilities by
setting rlim_max but require it to turn them on itself by setting
rlim_cur. rlim_cur/rlim_max would operate as a bitmask rather then
a value/maximum.
Only root would be allowed to arbitrarily modify capabilities,
the idea being that root is more secure as other programs stop being
run as it. So, for example, you could still start named, sendmail,
lpd, and so forth as root, but they would immediately set their
capabilities and become someone else.
Any call to setuid() clears all capabilities and removes permission
to set them again.
We define several capabilities right off the bat:
RCAPF_LOWPORT allow binding to low ports
RCAPF_GIVEAWAY allow chowning a file to another
user (any uid in the kern.cap.uidlow
through kern.cap.uidhigh range). ala
SysV
RCAPF_SETTIME allow the process to set and/or adjust
the time (so xntpd does not have to run
as root).
(5)
Use RCAPF_SETTIME to fix xntpd
Use TCAPF_LOWPORT to fix xntpd, lpd, bind, sendmail, and possibly
others. sendmail might still have to be run by root by default for
program pipes, but that's a different problem that I presume
Eric Allman will work on at some point (such functionality should
really be moved into mail.local, IMHO, I'll email Eric and see
what he has to say about it).
(6)
... and so on.
-Matt
:Warner
:
Matthew Dillon Engineering, HiWay Technologies, Inc. & BEST Internet
Communications & God knows what else.
<dillon@backplane.com> (Please include original email in any response)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811161941.LAA21747>
