(re-sending to the open alias)

I'm sponsoring the following fast track for Keith Wesolowski.
The case seeks binding for a Micro/Patch release (i.e. a Solaris Update).
The timer is set for March 30.  The case spec is below and a copy
is in the inception.materials/ directory.  Also found in the
materials directory are diffs to all relevant SMF man pages.

-Mike

--8<--

smf(5) enhancements for storage of sensitive properties
Keith M Wesolowski
14 March 2007

ident   "@(#)smf-case   1.6     07/03/21 SMI"

1. Description

   This case describes a set of modifications to svc.configd(1M) and
   related administrative tools to support storage of, and restriction of
   access to, sensitive application properties such as passwords.  This
   case seeks Micro/Patch Release binding.

2. Discussion

2.1. The read_authorization property

   Currently, creation, modification, and deletion of property groups
   and properties is permitted only to client processes with the full set
   of effective privileges.  In addition, processes with certain RBAC
   authorizations are permitted to change repository contents under certain
   circumstances.  Finally, smf permits the addition of arbitrary
   authorizations to perform these actions on a per-property group
   basis[0].  All properties in all property groups may be read by
   any process.  This case introduces read_authorization as an analogue
   to the existing value_authorization and modify_authorization properties.

2.1.1. Definition

   The read_authorization property may optionally be added to any
   property group of type application (SCF_GROUP_APPLICATION).  It is
   defined to be a string-valued property with zero or more values.  Each
   string value (if any) of this property will be interpreted as the name
   of an rbac(5) authorization defined in auth_attr(4).  A
   read_authorization property which is not string-valued will not be
   interpreted specially.

   Property groups of types framework, method, and dependency describe
   the state and configuration of the service or instance with respect to
   SMF itself.  Because properties in these groups have specific
   well-defined effects on the behaviour of SMF, any mechanism which may
   render any combination of these properties invisible may have complex
   side effects.  Because the schemas of these groups are already
   well-defined and none of the data they contain is sensitive, there is no
   reason to address the complex failure semantics associated with read
   access controls on these group types.  Therefore, this case reserves,
   but does not define, the behaviour of the 'read_authorization' property
   with respect to these group types.  Future enhancements such as
   templates[1] are expected to permit finer-grained control over the
   meaning of this and similar properties within a particular group.

2.1.2. svc.configd(1M) RPC changes

   Property create, modify, and delete semantics are not modified by
   this case, nor are create and delete semantics of property groups.  Read
   semantics are unchanged with respect to properties in property groups
   which do not contain a string-valued read_authorization property.  Those
   property groups which do contain this property, even if it has no values,
   are referred to herein as sensitive property groups (SPGs).  The
   behaviour observed by clients attempting to obtain the value(s) of a
   property in a SPG will be as follows:

   - If the requesting client would be permitted to modify the property,
     it will be permitted to read the value(s); otherwise,

   - If the requesting client has one or more of the authorizations
     named by the 'read_authorization' property in the same SPG, it will
     be permitted to read the value(s); otherwise,

   - The requesting client will not be permitted to read the value(s)
     and will receive the REP_PROTOCOL_FAIL_PERMISSION_DENIED error
     code.

   While the client cannot distinguish between failure due to
   locally-enforced policy and backend-enforced policy (in the networked
   repository case), this shortcoming also exists with respect to the
   existing add/modify/delete policies.  This case does not attempt to
   address this deficiency.

2.2. libscf(3LIB) changes

   libscf(3LIB), as originally defined[2] and updated[3] already
   provides an appropriate error code for use by clients when the contacted
   svc.configd(1M) denies permission to perform the requested operation.
   This case extends the use of that error code to the cases listed in
   2.1.2 above.

   The following functions will fail and set the libscf(3LIB) error
   value for the calling thread to SCF_ERROR_PERMISSION_DENIED if the
   contacted svc.configd(1M) returns an error code of
   REP_PROTOCOL_FAIL_PERMISSION_DENIED in response:

   scf_property_get_value
   scf_iter_next_value

2.3. svcprop(1) changes

   With respect to SPGs, svcprop(1)'s behaviour is modified as follows:

   - If a property or property group was explicitly specified with -p,
     and svc.configd(1M) denies access to the values of the specified
     property/ies, svcprop(1) will abort and, unless the '-q' option was
     provided, display an error message.

   - If no property or property group was specified, properties for
     which the user lacks appropriate authorization to read will be
     displayed as if they had zero values (the present behaviour is to
     display the empty string for the value of such properties).

2.4. svccfg(1M) changes

2.4.1. export changes, introduction of export -a

   'svccfg export' is modified to export the values of properties in
   SPGs as if they had no values, regardless of whether the user performing
   the operation has the required authorization.  This prevents accidental
   exposure of sensitive data in XML documents used for interchange
   purposes.

   To provide the ability to export documents containing the values of
   sensitive properties, we introduce the '-a' option to the export
   subcommand.  With this option, 'export' will export all properties in
   SPGs if the user has sufficient authorization to read them.  Otherwise,
   upon encountering a property which cannot be read due to access
   controls, the command terminates and displays an appropriate error
   message.

2.4.2. archive changes

   The purpose of the 'archive' subcommand is to dump the entire
   repository in a format "suitable for a relocatable repository
   backup"[4].  In the presence of SPGs, this effectively requires that the
   user executing the command have sufficient authorization to read all
   values of all properties, else the archive will be incomplete.
   Accordingly, this subcommand will fail and display an error message if a
   property value cannot be read.

2.5. auditing

   An AUE_smf_read_prop audit record will be generated when an attempt
   is made to read properties in SPGs.  This record will contain the FMRI
   of the property being read and the status (success or failure) of the
   attempt to read it, as well as the authorization used (if successful) or
   the most specific authorization that would have been required (if
   unsuccessful) to read the value.

3. Manual page changes

   Diffs to relevant manual pages are included in the case materials.  Modified
   man pages are:

   svcprop(1)
   svccfg(1M)
   scf_property_create(3SCF)
   scf_iter_create(3SCF)
   smf_security(5)

4. SMF policy changes

   This section details changes required to the 'Service Management
   Facility (SMF) usage' policy[5].

4.1. Guidance

   The third bulleted item in 'Guidance for Delivery of SMF Services'
   currently reads:

        # Services must provide service related RBAC authorizations, as
        # appropriate, by providing service specific values for the
        # action_authorization, modify_authorization and
        # value_authorization of property groups. See smf_security(5).
        # These authorizations must follow the form of
        # "solaris.smf.{manage, modify, value}." respectively. These
        # authorizations must be delivered into an appropriate Rights
        # profile, either new or existing.

   This guidance shall be altered to read:

        # Services must provide service related RBAC authorizations, as
        # appropriate, by providing service specific values for the
        | action_authorization, modify_authorization,
        | value_authorization, and read_authorization of property
        | groups. See smf_security(5).  These authorizations must follow
        | the form of
        | "solaris.smf.{manage, modify, value, read}.<token>,"
        # respectively.  These authorizations must be delivered into an
        # appropriate Rights profile, either new or existing.

4.2. Appendix B

   Appendix B currently reads:

        # It should be noted that configuration data residing in the SCF
        # repository is world-readable. Projects with configuration data
        # that is deemed sensitive in nature or that should remain
        # private from a security standpoint must consult with the ARC
        # to determine if the Service Configuration Facility is the
        # appropriate repository for their data.

   With the implementation of the changes specified above, this guidance
   is no longer correct.  It shall be amended to read as follows:

        # It should be noted that configuration data residing in the SCF
        | repository is world-readable by default. Projects with
        | configuration data that is deemed sensitive in nature or that
        | should remain private from a security standpoint must consult
        | with the ARC to determine if the Service Configuration
        | Facility is the appropriate repository for their data.  If so,
        | the property group(s) intended to contain sensitive data must
        | be defined in manifests with an appropriate read_authorization
        | property (see smf_security(5)), and no sensitive information
        | may be delivered in the manifest itself.

5. Interface table

5.1. Interfaces Exported

   Well-known property 'read_authorization'     Committed

   No case explicitly defines the commitment level of the well-known
   properties 'modify_authorization' and 'value_authorization'[6].  Given
   their semantics, their presence in smf_security(5), and the clear
   intent that they be introduced as Evolving, this case also clarifies
   them as follows:

   Well-known property 'modify_authorization'   Committed
   Well-known property 'value_authorization'    Committed

   The intent of this case is that 'read_authorization' be a peer of
   these existing well-known properties and therefore have the same
   commitment level.

5.2. Interfaces Imported

   None.

6. References

   [0] PSARC/2002/547 Greenline; see C.35, smf_security(5)
   [1] http://www.opensolaris.org/os/project/vpanels/templates/
   [2] PSARC/2002/547 Greenline; see C.10, scf_error(3SCF)
   [3] PSARC/2004/525 libscf(3LIB) updates
   [4] Ibid.; see C.6, svccfg(1M)
   [5] http://www.opensolaris.org/os/community/arc/policies/SMF-policy/
   [6] PSARC/2002/547 Greenline; see App. D

-- 
Mike Shapiro, Solaris Kernel Development. blogs.sun.com/mws/

Reply via email to