SYSTEM ARCHITECTURE COUNCIL
                          Platform Software ARC
                    ---------------------------------
PSARC Regular Meeting time: Wednesdays 10:00-1:00pm in MPK17-3507.

                          05-06-2009 MEETING MINUTES
============================================================================
Send CORRECTIONS, additions, deletions to psarc-coord at sun.com.
Minutes are archived in sac.Eng:/sac/export/sac/Minutes/PSARC.

Co-Chair(s):
        James Carlson:          Yes
        Tim Marsland:           Yes

ATTENDEES - Members: (6 active members)
        Kais Belgaied:          Yes
        Mark Carlson:           no
        Garrett D'Amore:        Yes
        Richard Matthews:       Yes
        Darren Moffat:          Yes  (on sabbatical)
        Sebastien Roy:          Yes
        Glenn Skinner:          Yes
        Bill Sommerfeld:        no  (on sabbatical)
        Gary Winiger:           Yes  (on sabbatical)

STAFF -
        Asa Romberger (PM):     Yes

ATTENDEES - Interns:
        Frank Che               no
        David Chieu             no
        Charles Debardeleben:   no
        Peter Dennis:           no
        James Falkner:          no (on sabbatical)
        Daniel Hain:            no
        Michael Haines:         no
        Alan Hargreaves:        no
        Phil Harman:            no
        Cecilia Hu:             no
        Wyllys Ingersoll:       no
        Alec Muffett:           no (on sabbatical)
        Darren Reed:            no
        Dean Roehrich           Yes
        Ienup Sung:             no
        Phi Tran                no
        Brian Utterback:        no
        James Walker            Yes

        Mark Martin             Yes (external)
        Don Cragun              Yes
Guests:

-- GUESTS --
        Nick Williams

Not all names are captured. Please send email to Asa.Romberger at Sun.com, if
you attended the meeting and your name is missing from the list.

---------------------------------------------------------------------------

MEETING SUMMARY:
================

AGENDA

05/06/2009
    10:00-10:10 Open ARC Business  (use open dial in above)
    10:10-10:55 Open Inception: Credential Process Groups
                (CPGS) (2009/271)
                Submitter: Nicolas Williams
                Owner: Garrett D'Amore
                Exposure: open

---------------------------------------------------------------------------
Case Anchors: <br>
<A HREF="#case1">CASE 1 Credential Process Groups (CPGS) (2009/271)</A> <br>
===========================================================================

Fast Tracks:
============

approve 2009/245 (05/08/2009) open  FreeIPMI
        IPMITool is the architecture of record for OpenSolaris

extend  2009/256 (05/04/2009) open  snort
        Extend to 05/08/2009

approve 2009/266 (05/06/2009) open  Edgeport USB serial mode configuration
        Commitment level to Uncommitted

waiting 2009/270 (05/06/2009) open  beanshell
        waiting needs spec
        Need name resolution with upstream project
        Extend to 05/13/2009

let run 2009/275 (05/08/2009) open  Amendments to pconsole fast-track

approve 2009/276 (05/08/2009) open  FMA ereports for Intel 5100


Next Meeting:
=============
05/13/2009
    CANCELLED

5/20/2009
    10:00-10:10 Closed ARC Business  (use closed dial in above)
    10:15-10:25 Open ARC Business (use open dial in above)
    45 min      AVAILABLE


IAM
======
Name:           Credential Process Groups (CPGS)
Submitter:      Nicolas Williams
Owner:          Garrett D'Amore
Interest:       darren.moffat at sun.com, nicolas.williams at sun.com
Status:         inception scheduled 05/06/2009
Exposure:       open
Comment:

SUMMARY
=======
Today the Solaris NFS client can only associate cryptographic
credentials with all of each users' processes.  Other operating systems
can associate cryptographic credentials with users' login sessions,
which is desirable in some cases and trivially enables destruction of
cryptographic credentials when the last reference vanishes.

Our solution is based on grouping processes through cred_t, with an
extensible notion of process groups.  This solution is generic generic
and will enable solutions to other problems as described below.


ISSUES
======

 PSARC 2009/271:        Credential Process Groups (CPGS)
 Submitter:     Nicolas Williams
 Owner:         Garrett D'Amore

 Issues for inception (05/06/2009):

gw-0    A little more overview please.  A simple worked example.
        A number of claims of simplicity are made particularly WRT
        application transparency, audio, device tracking, type registration.
        Of the many possibilities, what is being implemented in this phase?
        What types are being delivered?
A       Needs more documentation

gw-1    20q-3   Don't forget to review the audit requirements for the new
        system calls.

gw-2    20q-9   I would think all the services would be distributed 
disabled.
        Any that are required for all system configurations would be enabled
        in the generic SMF profile.  Any that are required only when a
        subsystem is enabled, such as, krb5, would be enabled/disabled as
        part of that subsystem (kclient).  Any that are not required to be
        always enabled would have appropriate solaris.smf.manage.<service>
        authorizations which would be part of the Rights Profile that 
supports
        the feature enabling/configuration, such as, Kerberos Client 
Management.
gw-3    I found the security model details hard to follow from the 
materials.
        Please say more.  secret/private, register/unregister, what is
        per-zone / vs global zone, per type flag semantics.

gw-4    PAM service modules do not make decisions based on service name.
        Services may have separate PAM stacks to distinguish their policies.
        login types call PAM_ESTABLISH_CRED; su calls PAM_REINITIALIZE_CRED.

gw-4a   It would seem a model (and perhaps names) of ESTABLISH, 
REINITIALIZE,
        REFRESH, DELETE like pam_setcred() would be meaningful.

gw-5    Overview(s).  How are delayed execution jobs kerberos credentials
        affected?

gw-6    Overview "FGAP".  Can CPGs also apply to "FMAC" Security Contexts?

gw-7    Overview how do di_logindevperm_login()/logout() play into things.
        login types call di_logindevperm_login().  The logout reaper calls
        di_logindevperm_logout().

gw-8    cpg(1) output not an interface?

gw-9    cpg_change(2).  Why is CPG_ALL partial success semantics OK?
        Is it idempotent?

        Why is cpg_change_to() restricted to only one change? (or why
        doesn't atomic change all make sense?)

        Overloading proc_audit shouldn't be done.  If the audit
        subsystem is converted to use cpgs, then the use of proc_audit
        is appropriate, otherwise it is not.  What is the use of the
        *AUDIT* flags outside the audit subsystem?  If audit is not
        being converted as part of this project, the term *AUDIT*
        does not seem appropriate.  New flags can always be added (presuming
        enough bits ;-).

        See 4a for cpg_change() flag names.

        What is the default value of ncpgroups_max?

gww-99  Nits- see me offline for some typos and other materials nits.

jdc-1   If PAM (and login sessions) are the main CPG setting point,
        who sets the CPG for a cron job?  Or do cron jobs not have
        CPGs?  (If they don't, then how does AFS work with cron?)

jdc-2   What would happen to the interfaces defined if we needed a
        different CPG granularity?  (E.g., per-user rather than
        per-session.)  What does "emulation" mean here?

jdc-3   What privileges are required to create a CPG, set its
        contents, assign it to a process, or read the data back?
        (How do CPGs interact with LP?)

jdc-4   Where is the name space for cpg_type_reg defined?  How do we
        avoid conflicting uses?  Are there any naming conventions
        here?  (E.g., "com.sun.name..." or "SUNW,name...")

jdc-5   Are there new dtrace probes associated with CPGs?

jdc-6   Why would a CPG ID be secret?  Isn't it just a number?

jdc-7   CPG_F_LOGIN_W_SEAT and CPG_S_CHG_AT_LOGIN_W_SEAT feel like
        part of an extensible broader idea; a "class" of CPG.

jdc-8   Why is ncpgroups_max needed?  This sounds like a resource
        control, but is a retro /etc/system variable.

ram-1   Is any privledge required to create a CPG type? Are there limits 
on the
name length?

ram-2   Could a rogue process (assuming no special privledge required) 
claim all available
        types (ncpgroups_max)? Could some denial of service result?

ram-3   Nit: names _CONFIG_NCPGROUPS and ncpgroups_max don't seem to 
reflect the "number of
        types" nature of the limit.

ram-4   In PAGS.txt, you mention that an OpenAFS client in Solaris 
emulates PAGs. Should/
        would this be converted to use CPGs?

dik-1 Where the changes to /proc? You cannot modify "ptools" without
        having the properties available through /proc.

dik-2 How are the CPGs recorded in a core dump?

dik-3 How are the CPGs shown through pcred?  Does that work in a core dump?

dik-4 What happens when a user su(1)s to root and then starts a daemon?

dik-5   When this project is completed, which consumer will be putback with
        this?

boyd-1  I don't see any mention in the case materials of new fields for ps.
        Personally, I'd really like to see something like -o cpg

fiveash-1  - svc:/system/cpg/krb5:default registers the "krb5" CPG type and
        runs a daemon to kdestroy Kerberos V credentials when the last
        reference to a CPG vanishes.

        How does this interact with svc:/network/security/ktkt_warn?  
Seems to
        me that there should be one service tending to the needs of the krb5
        related ccache.  Perhaps the function of ktkt_warn can be folded 
into
        svc:/system/cpg/krb5?

hahn-1  What are the default registered CPG types on a newly booted
      system?  (Are there CPG types created by the kernel prior to the
      creation of init(1M)?)

      If the kernel does create such types, how do they participate in
      the "resource release at empty" operation?

hahn-2  Why 64-bit IDs, and not reuse of id_t and idtype_t?  (Unusual for
      a process collective.)

hahn-3  What is the complete list of system calls that cause a CPG to
      change its settings?  For instance, should setuid(2) or
      setppriv(2) calls also have CPG_F_* flags?

hahn-4  There's no new privilege needed for CPG type registration or
      removal?  What privilege is required?

hahn-5  Do you expect the behaviour of a cpg_type_unreg() call to be
      blocking--destroying all CPGs of that type--or merely allow those
      CPGs to linger until all processes have exited.  What happens to
      CPGs with door calls in the _unreg() case?

hahn-6  It would be helpful to see the Boomer example explained a bit, if
      any preliminary sketch is available.  (My feeling is that there's
      a lot of public mechanism for one consumer.)

hahn-7  Usually the zone/project/task/process resource controls need to be
      transferred in the attributes of the work unit of whatever
      subsystem is taking the request out of process context but, if
      you've worked out more about subsuming those attributes, I'd be
      interested in seeing the details.

hahn-8  Could the project team comment when they expect a new feature
      should introduce a CPG type, rather than a process privilege?  It
      might also be useful to understand how CPGs might be used to
      implement a concept like a security label, as in classic Trusted
      Solaris?  I suppose I'm looking for early advice about how to
      design using this feature.  (For instance, if the answer to 1/1'
      is "no", then does that imply kernel features must introduce
      privileges?)

edp-1   You repeatedly state that CPGs are associated with login sessions.
        Please define a login session in the CPG context and provide 
examples.

A login session is the set of processes running as the PAM_USER that
result from a successful attempt to login, whether on console, via ssh,
etc...  Two concurrent logins by the same user on the same host would be
two different login sessions -- they'd have different CPG IDs for the
various CPG types.

edp-2   You also mention that CPGs will help with obtaining credentials for
        cron jobs, which specifically don't have a login session (as i
        understand login sessions), so please explain how this works.

Yes, I did not flesh that out.  That was an indirect reference to a
problem in Solaris Kerberos where all processes running as a user must
share the same Kerberos credentials because the only way that the
Kerberos credentials can be found by the secure NFS client right now is
by referencing the euid of the process that's causing an NFS RPC.
Solaris Kerberos right now does nothing to reference count the Kerberos
credentials cache of a user, which causes a variety of problems.  The
cron angle is somewhat indirect, and really will require a way to make
Kerberos credentials available to cron for later use, so I should not
have mentioned cron except as a future beneficiary of this project.

edp-3   You mention that CPGs are bound to credentials (there seems to be a
        1:1 mapping), but in my gdm login session, different xterms have
        different cred_t pointers.  so will different xterms have different
        CPGs?  (once again, perhaps this confusion results from my lack of
        understanding of how "login sessions" are defined wrt CPGs.)

A process' cred_t changes when a setuid/setgid program is executed, even
if in the end (that is, after the app drops privs) that process' cred_t
ends up looking just like its parent.  CPG membership is inheritted
across all system calls that change a cred_t OTHER THAN cpg_change(2)
and cpg_change_to(2).  That is, CPG membership changes are always
explicit, though because most often only login apps/PAM modules will
call cpg_change(2) users will not have to take explicit steps w.r.t. CPG
membership.

(AFS users will often take explicit steps to change CPG membership, as
they do today with the pagsh(1) command -- see the manpage reference in
the AFS readme in the case materials.  But that's entirely optional.)

edp-4   group membership is represented in cred_t.  does this impact cred_t
        comparisons?  (ala crcmp()).

Yes, it does.  See the cpg_change manpage in the case materials,
specifically this:

     CPG_S_DISTINGUISH_CRED
         Processes with process credentials that differ only with
         respect to membership in CPGs whose semantics include
         this flag will be treated as having distinct process
         credentials by the kernel private function crcmp().

edp-5   why must CPGs IDs be unique (since boot)?

Because it will be useful for projects that want a cheap way to do
access control and revocation.  See my reply to Stephen Hahn on this
point.

edp-6   why isn't ps(1) being modified to display the CPGs ID?

Because I hadn't thought of it, or how to do it.  However last night I
thought of a way: add columns named cpgid-<type> and cpgudata-<type>
whose values will be CPG IDs and CPG user data for CPGs of the given
type.


THE NEXT STEP
=============

Inception review


Reply via email to