From owner-freebsd-hackers@FreeBSD.ORG Thu Jul 26 06:12:26 2007 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BED3216A41B for ; Thu, 26 Jul 2007 06:12:26 +0000 (UTC) (envelope-from jmg@hydrogen.funkthat.com) Received: from hydrogen.funkthat.com (gate.funkthat.com [69.17.45.168]) by mx1.freebsd.org (Postfix) with ESMTP id 8973413C428 for ; Thu, 26 Jul 2007 06:12:26 +0000 (UTC) (envelope-from jmg@hydrogen.funkthat.com) Received: from hydrogen.funkthat.com (mmre20x0wu3nrin5@localhost.funkthat.com [127.0.0.1]) by hydrogen.funkthat.com (8.13.6/8.13.3) with ESMTP id l6Q6CQN4070372; Wed, 25 Jul 2007 23:12:26 -0700 (PDT) (envelope-from jmg@hydrogen.funkthat.com) Received: (from jmg@localhost) by hydrogen.funkthat.com (8.13.6/8.13.3/Submit) id l6Q6CPJn070371; Wed, 25 Jul 2007 23:12:25 -0700 (PDT) (envelope-from jmg) Date: Wed, 25 Jul 2007 23:12:25 -0700 From: John-Mark Gurney To: Victor Loureiro Lima Message-ID: <20070726061225.GJ99491@funkthat.com> Mail-Followup-To: Victor Loureiro Lima , Daniel Molina Wegener , FreeBSD Hackers References: <200707232052.58485.dmw@unete.cl> <20070724184355.GH99491@funkthat.com> <20070724225157.GI99491@funkthat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Operating-System: FreeBSD 5.4-RELEASE-p6 i386 X-Files: The truth is out there X-URL: http://resnet.uoregon.edu/~gurney_j/ X-Resume: http://resnet.uoregon.edu/~gurney_j/resume.html Cc: FreeBSD Hackers , Daniel Molina Wegener Subject: Re: A few questions... X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: John-Mark Gurney List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Jul 2007 06:12:26 -0000 Victor Loureiro Lima wrote this message on Wed, Jul 25, 2007 at 12:14 -0300: > 2007/7/24, John-Mark Gurney : > >Victor Loureiro Lima wrote this message on Tue, Jul 24, 2007 at 16:35 > >-0300: > >> 2007/7/24, John-Mark Gurney : > >> >Daniel Molina Wegener wrote this message on Mon, Jul 23, 2007 at 20:52 > >> >-0400: > >> >> a) Is there any function or variable that tells me which is the > >> >> root user UID in the system, or root always have 0 and it's > >> >> an "elegant" option to compare the variables or structure > >> >> members against zero. > >> > > >> >#include > >> > > >> >uid == UID_ROOT > >> > > >> >> b) Can normal users look for system processes or kernel threads? > >> > > >> >Yes, ps does this... > >> > > >> > >> ps(1) either elevates its priviledges during execution, or has some > >> other way of medling into the afairs of other processes that will > >> eventually need some higher priviledge status (either that, or I am > >> really out-dated on modern operational systems) > > > >hydrogen,ttypm,/home/johng,503$ls -l /bin/ps > >-r-xr-xr-x 1 root wheel 31372 May 8 2005 /bin/ps* > > > >So, as you see, no suid or sgid necessary for ps to function... > >FreeBSD exports most/all of the info through sysctl which does not > >require elevated privs to get... > > > >And ps doesn't medling.. it's just a voyeur.. > hahaha I liked that phrase ;) > > > Check this out: > http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ps/ps.c?rev=1.106.2.2;content-type=text%2Fplain > > Turns out ps(1) uses libkvm, more specifically kvm_getprocs() function > (the function that I said was in the middle of my last experience on > getting process information from FreeBSD ;)) Im pretty sure it doesnt > get _any_ of its info thru sysctl's, but using the kvm interface which > is simple, clean and orthogonal, however I guess I was a little bit > incorrect in my last email, ps(1) in its common execution mode will Have you looked at the source to kvm_getprocs(3)? struct kinfo_proc * kvm_getprocs(kd, op, arg, cnt) [...] { [...] if (ISALIVE(kd)) { size = 0; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = op; mib[3] = arg; temp_op = op & ~KERN_PROC_INC_THREAD; st = sysctl(mib, temp_op == KERN_PROC_ALL || temp_op == KERN_PROC_PROC ? 3 : 4, NULL, &size, NULL, 0); [...] So, yes, ps isn't using sysctl directly, but kvm_getprocs is... And if you look at -current's ps(1): -a Display information about other users' processes as well as your own. This will skip any processes which do not have a control- ling terminal, unless the -x option is also specified. This can be disabled by setting the security.bsd.see_other_uids sysctl to zero. and security.bsd.see_other_uids defaults to 1... -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."