[Sunhelp] About top
Doug McLaren
dougmc at frenzy.com
Fri Oct 20 12:29:04 CDT 2000
On Thu, Oct 19, 2000 at 10:39:48PM +0100, Leon Halford wrote:
| Top & for that matter freeware programs are not generally as useful
| as they first appear.
That is one of the most idiotic statements I've ever seen.
`freeware' programs are a very large part of what make *nix far more
useful than most other OS's.
| top in particular introduces security problems to Solaris.
?
| Solaris 8 has a "top" clone called /usr/bin/prstat - I suggest
| you use that.
Alas, the Solaris 2.6 box I'm looking at doesn't have it. So that
doesn't help much unless you have 2.8 ...
| Whilst we're on the topic, top should definately never be made
| available to any user other than root on a production server.
| A mistake I have seen all too often.
Uh-huh.
| Why?
|
| Well as you rightly point out it gives users the ability to easily
| kill processes. Bad pratice even if its their own application.
| That however is nothing compared to this:
|
| top requires any given user running it to be a member of group
| "sys" on Solaris such that they can read /dev/kmem - ie physical
| memory!
Oh really?
% id
uid=2318(dmclaren) gid=10(staff)
I'm obviously not a member of group kmem.
% ls -la `where top`
-rwxr-xr-x 1 root staff 267 Mar 25 1999 /usr/local/bin/top
top obviously isn't setuid or setgid.
% top | head -15
...
Memory: 256M real, 85M free, 176M swap in use, 593M swap free
...
PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND
2325 dmclaren 1 28 0 1448K 1352K cpu 0:00 1.16% top3.5-2.6
2304 dmclaren 1 38 0 2336K 2184K sleep 0:00 0.09% tcsh
2326 dmclaren 1 48 0 856K 784K sleep 0:00 0.05% head
1450 nobody 4 50 0 21M 4032K sleep 1:12 0.00% ctlds
1462 nobody 4 10 0 21M 3960K sleep 0:55 0.00% ctlds
1615 nobody 4 20 0 22M 4736K sleep 0:43 0.00% ctlds
335 oracle 40 59 0 27M 10M sleep 0:37 0.00% oracle
and top is obviously working. Fancy that!
To be fair, I thought top did need access to read kmem on Solaris.
After all, the `ps' command is setuid root -
% ls -la `where ps`
-r-sr-xr-x 1 root sys 26372 Jul 15 1997 /bin/ps
-r-sr-xr-x 1 root sys 26372 Jul 15 1997 /usr/bin/ps
-rwsr-xr-x 1 root sys 21536 Jul 15 1997 /usr/ucb/ps
... but apparantly top works fine without it.
As for top requiring that a user be a member of the kmem group to use
it, you've never heard of a setuid/setgid program, have you? They
allow a programmer to set up a program that runs as a different uid or
gid than the user running it. This is how a *nix box allows users to
do things that require enhanced priviledges, like changing your
password or doing an ICMP ping.
If top DID need to read /dev/kmem, you'd just make it setgid kmem and
it would work fine -- you wouldn't need to make your users a member of
the kmem group. Yes, this does require some dilligence on the part of
the person who writes programs that are setgid or setuid to make it
secure, but done properly they're safe. And top should have been done
properly, because in some cases it does need to be setgid kmem.
Yes, it's possible that a program like top could have a bug in it to
where *if it were setgid kmem* that this could be used by a user to
gain read access (not write access!) to /dev/kmem. I'm unaware of any
such bugs.
Note that /bin/ps could also have bugs like this, and since it's
setuid root, the possible danger is much greater. And it's not the
only such program -- for a list of other setuid/setgid programs that
*could* have such bugs on your system, run this -
find / -type f -perm -2000 -o -perm -4000 -ls
Just because they came with Solaris doesn't mean they're secure.
| If that wasnt bad enough, group "sys" happens to be a
| very powerful group on Solaris, because not only does it have
| read access to /dev/kmem it has read access to every disk device
| too - which implies a member of group sys can read ANY file on
| any local file system including root owned files (ie /etc/shadow
| etc). I leave this as an experiment for you all, but it's easier
| than you may think, certainly no programming is required.
Actually, I leave this as an exercise to you.
In my installation, top is not setgid kmem, so you can't use it to
read /dev/kmem. But I suggest that you go ahead and set it to setgid
kmem on your site. Make sure your user is NOT in the kmem group (he
shouldn't be) and then use top to gain arbitrary read access to
/dev/kmem. I don't think you can do it, even if you DO do some
programming.
| Alternatively as a work around to adding users to group "sys"
What does group `sys' have to do with /dev/kmem -
% ls -la /dev/kmem /devices/pseudo/mm at 0:kmem
lrwxrwxrwx 1 root root 27 May 19 1998 /dev/kmem -> ../devices/pseudo/mm at 0:kmem
crw-r----- 1 root sys 13, 1 May 19 1998 /devices/pseudo/mm at 0:kmem
Let me answer for you - *absolutely nothing*.
| you can start fiddling permissions on /dev/kmem to make top
| available to non root users - but as soon as you do that you
| break other programs and of course pkgchk will immediateley
| complain.
| Dont do it! Stick to using "prstat" or "/usr/ucb/ps -aux" on
| pre Solaris 8 machines as they are *much* safer.
Uh-huh.
--
Doug McLaren, dougmc at frenzy.com
`But officer, I was only trying to gain enough speed so I could coast
to the nearest gas station.'
More information about the SunHELP
mailing list