Subject: Re: ps ax availability for non-root
To: Bill Studenmund <wrstuden@zembu.com>
From: Joseph Mallett <jmallett@newgold.net>
List: tech-kern
Date: 04/16/2001 15:00:09
On Fri, 13 Apr 2001, Bill Studenmund wrote:

> On Fri, 13 Apr 2001 wojtek@3miasto.net wrote:
> 
> > i would like to add option to disable readability of process info of other
> > users completely for non-root (like in linux with secure-linux patch):
> > 
> > i have almost no experience in kernel programming so is it a good idea to 
> > change:
> > 
> > 	/* only root or same user change look at the environment */
> > 	if (type == KERN_PROC_ENV || type == KERN_PROC_NENV) {
> >    		if (up->p_ucred->cr_uid != 0) {
> > 			if (up->p_cred->p_ruid != p->p_cred->p_ruid ||
> > 			    up->p_cred->p_ruid != p->p_cred->p_svuid)
> > 				return (EPERM);
> > 		}
> 
> I realize this is the existing code. But is it me, or is the above logic
> test about p_ruid's wrong? If I understand the idea, I should only be able
> to see the environment of processes running as me, or su-id processes I
> started. That makes a lot of sense.
> 
> But the logic test will always return EPERM if p->p_cred->p_ruid !=
> p->p_cred->p_svuid since up->p_cred->p_ruid will always be different from
> one of them. Thus I, as a non-root user, will only be able to see
> processes I started which are NOT set-uid. That's not what I understood
> the desire to be.... I think the test should be 
> 
> >                       if (up->p_cred->p_ruid != p->p_cred->p_ruid &&
> >                           up->p_cred->p_ruid != p->p_cred->p_svuid)
> 
> :-)
> 
> > to:
> > 
> > 	/* only root or same user change look at the environment
> >            (user_ps_ax!=0) or anything (user_ps_ax==0) */
> > 	if (!user_ps_ax || type == KERN_PROC_ENV || type == KERN_PROC_NENV) {
> > 		if (up->p_ucred->cr_uid != 0) {
> > 			if (up->p_cred->p_ruid != p->p_cred->p_ruid ||
> > 			    up->p_cred->p_ruid != p->p_cred->p_svuid)
> > 				return (EPERM);
> > 		}
> > 
> > 
> > and then lines for sysctl interface (kern.user_ps_ax ?) for user_ps_ax
> > variable which defaults to 1 but could be changed to 0.
> 
> I think the name "user_ps_ax" is confusing. It's not obvious to me if 0 or
> non-zero means that a user can see only her processes. With a default of
> 1, we get current behavior (which is the least-surprising thing). How
> about changing the name to user_ps_ax_all, then 1 means user ps -ax sees
> all. Or change the logic and name it no_user_ps_ax (get rid of the !).
> 
> > > Maybe depending on the securelevel, i.e. -1, 0, 1, 2, availability of
> > > things like top, ps, etc. to non-root should be negated or enabled?
> >
> > yes. i think that is should be automatic at securelevel >1 but there are
> > people that say that it should be selectable behavior.
> > any idea other than new sysctl variable?
> 
> Ewww.... I think having it an overall default for securelevel > 1 is bad.
> I'm the main user of my machine, so it makes a lot of sense for me to be
> able to see all of root's processes.
> 
> That said, I REALLY understand why we'd want to limit a user to seeing
> only his or her processes. I worked at NAS, part of NASA, where we had
> different competitors (different aircraft companies) using the same
> machines. They really didn't want the competition to see what they were
> doing...
> 
> So I think something like a sysctl would be good - I can see the advantage
> of both choices of a setting. And there's a way to have different sysctl's
> set during boot, so an admin could make it so that the machine always
> booted multiuser with it set.
> 
> > > Why would one do this anyway? the only reasoin I point out the above is it
> > > doesn't add a new sysctl variable, and would build upon exisiting ideas if
> > > such a thing is needed (which I doubt).  
> 
> Oh, it's needed. :-) It's just simultaneously needed and despised. :-) So
> something like a sysctl would be good.
> 
> The idea of making it something based on login class would be good, but
> more work.

I suppose the 'more work' reason shouldn'y fly though. If there's
extensive support for login class-related stuff at lower levels, then in
the future, similar problems like this could be solved easier, and of
course, we'd have the continual use of a centralised thing like login
classes to control this.

> 
> Take care,
> 
> Bill
> 
> 


/joseph

--
Joseph Mallett           Security Specialist
jmallett@newgold.net         www.newgold.net

irc.newgold.net/#xMach       xMach Core Team
jmallett@xMach.org             www.xMach.org

xMach Research Group            www.xmrg.com

<josephm> Crystal Pepsi: sure it caused cancer,
          but it was leet.