| Solaris |
|
|
Copyright 1991-2007, Sun Microsystems, Inc
This policy positions the Service Management Facility (see PSARC/2002/547 Greenline), smf(5), as the primary infrastructure for service management and primary repository for system and service configuration within Solaris.
| Owner | SAC |
|---|---|
| Sponsor | Rich Green |
| Author | Tasha Westmore |
| Changes | smf-discuss |
| Authority | SAC |
| Policy Version | V1-1.6 |
| Status | Approved 2006/06/28 |
| Last Reviewed | 28 June 2006 |
| Effective | Solaris 10 and later |
All software that traditionally resides within or modifies system startup and initialization is impacted and must adhere to the guidelines and requirements of this policy.
The purpose of this policy is to promote the Service Management Facility (see PSARC/2002/547 Greenline), smf(5), as the primary infrastructure for service management and primary repository for system and service configuration within Solaris.
New and existing services delivered into SMF participate in and benefit from:
SMF removes the developer's dependency upon error prone /etc/rc?.d scripts and file-based system and service configurations within Solaris.
This policy provides guidance to Solaris developers, programs, and projects regarding:
With the introduction of the Service Management Facility (SMF), smf(5), this policy requires that there must be no new files or modifications to the following locations:
Programs or projects providing a service or long-running application must participate in SMF by delivering services either in the form of a manifest (/lib/svc/manifest directory hierarchy) or programatically.
Integration of new or additional non-Private plain-text files within /etc/ hierarchy is no longer needed and is not allowed.
This policy defines a "legacy" service as a long-running software object currently reliant upon the traditional start-up mechanisms (i.e., /etc/init.d, rc scripts, etc) and integrated prior to the introduction of SMF but have not presently migrated.
Legacy services and their configuration files must transition to SMF prior to any additional or subsequent modifications to the service being approved. Projects dealing with legacy services must consult with the ARC as a part of the review process to determine next steps and appropriate timelines for conversion.
Projects intending to integrate new system or service configuration files (which traditionally reside within the /etc/* directory hierarchy) into Solaris must use the Service Configuration Facility (SCF), libscf(3LIB), as their repository for system configuration. Projects impacted by Appendicies A and B, must consult with the ARC to determine if this aspect of the policy is applicable.
Projects integrating new services within Solaris are required to participate in SMF and deliver an SMF service manifest representing their service.
Please contact smf-discuss@opensolaris.org for clarity with regard to the guidance provided within the policy or requests for review of your service manifest materials.
Projects that have:
It should be noted that configuration data residing in the SCF repository is world-readable by default. Projects with configuration data that is deemed protected 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 protected data must be defined in manifests with an appropriate read_authorization property (see smf_security(5)), and no protected information may be delivered in the manifest itself.
Use of this facilty to store secrets in the clear without additional practices does not implement all of the recommendations of the existing Best Practice for password storage. While this may be no worse than existing behavior in some cases, it is possible to do better; accordngly, applications using this facility should carefully review the Best Practice and apply relevant additional protections.
In addition, since SMF access control is applied at the property group level, applications must segregate non-public properties into separate read-protected property groups. To avoid the need to grant authorizations too widely, properties which do not need read protection should not be placed in read-protected property groups.
Applications creating read-protected property groups should set the read_authorization during initial install through the import of a service manifest. Service manifests delivered as part of the installation of a software package must not permit operation using placeholder sensitive values; services dependent on these values must behave in a safe manner (typically by denying access) until the sensitive value is appropriately initialized for real.
In the event that read-protected property groups are created by other means (for instance, to store per-service-instance data for a dynamically changing set of service instances), the read_authorization property must be set before any sensitive data is stored to ensure there is no window of time where the sensitive values are unprotected.
Under most circumstances, service manifests should specify their service instances as "disabled". This decouples the policy of whether to start a service from the installation/creation of the service, allowing administrative control of the services offered by the system.
Service profiles are used to enable Solaris-bundled services. (See "profile application" in smf_bootstrap(5).) Which services are enabled or disabled may be further customized by administrators through profiles. Services which must be started in order for initial profile application to complete must be enabled in the service manifest.
Any project delivering a service instance as "enabled" in the manifest must consult with the ARC for guidance.
Network services in Solaris need to be designed to comply with the Network Install Time Security policy at http://sac.sfbay.sun.com/swg/Security/Policy/NITS.html. The following guidelines establish Solaris conventions for services to comply with this policy.
The manifest for a simple network service called myservice might look like this:
<service_bundle type='manifest' name='myservice'> <service name='network/myservice' type='service' version='1'> <create_default_instance enabled='false'> <exec_method type='method' name='start' exec='/lib/svc/method/myservice' timeout_seconds='10' /> <exec_method type='method' name='stop' exec=':kill' timeout_seconds='10' /> <exec_method type='method' name='refresh' exec=':kill -HUP' timeout_seconds='10' /> <property_group name='general' type='framework'> <propval name='action_authorization' type='astring' value='solaris.smf.manage.myservice' /> <!~-- If the authorization is intended to cover permanent enable/disable as well as temporary, add the following ~--> <propval name='value_authorization' type='astring' value='solaris.smf.manage.myservice' /> </property_group> <property_group name='config' type='application'> <!~-- other application properties ~--> <propval name='local_only' type='boolean' value='false' /> <propval name='value_authorization' type='astring' value='solaris.smf.value.myservice' /> </property_group> <template> <common_name> <loctext xml:lang='C'> my network service </loctext> </common_name> <documentation> <manpage title='myservice' section='1M' manpath='/usr/share/man' /> </documentation> </template> </instance> <stability value='Unstable' /> </service> </service_bundle>
SMF manifests should be placed under /lib/svc/manifest to take advantage of early manifest import. /var/svc/manifest is supported for backward compatibility, but its use is now discouraged. At some point in the future, support for placing manifests in /var/svc/manifest may be withdrawn.
| Case | Type | Name | Comment |
|---|
| PSARC/2002/547 | OnePager | Greenline | |
| PSARC/2007/177 | FastTrack | SMF Sensitive Properties | |
| PSARC/2008/350 | FastTrack | SMF Templates | |
| PSARC/2010/013 | FastTrack | Early Manifest Import |
| Document | Description |
|---|---|
| libscf.3LIB | service configuration facility library |
| rbac.5 | role based access control |
| smf.5 | service management facility |
| smf_method.5 | SMF conventions for methods |
| smf_restarter.5 | SMF conventions for restarters |
| smf_template.5 | SMF template definition and conventions |
| smf_security.5 | SMF security behavior |
| smf_bootstrap.5 | SMF boot, packaging, and compatability behavior |
| svc.configd.1M | SMF repository daemon |
| svc.startd.1M | SMF master restarter |
| svcs.1 | report status of services |
| svcadm.1M | manipulate service instances |
| svccfg.1M | import, export, and modify service configurations |
| svcprop.1M | retrieve service configuration properties |
| privileges.5 | process privilege model |
| Version | Date | By | Description |
|---|---|---|---|
| 1.6 | 10/04/08 | lianep | Changes for PSARC/2010/013. |
| 1.5 | 08/10/23 | lianep | Updates from PSARC 2007/177 and 2008/350. |
| 1.4 | 07/12/05 | plocher | Made references into URL links that reference OS.o |
| 1.3 | 07/07/19 | gww | Add words for permanent enable/disable authorization |
| 1.2 | 07/02/09 | lianep | Updates from PSARC 2007/084. |
| 1.1 | 06/07/25 | plocher | date and time created 06/07/25 10:57:52 by plocher |
Terms of Use
|
Privacy
|
Trademarks
|
Copyright Policy
|
Site Guidelines
|
Site Map
|
Help
Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.
© 2012, Oracle Corporation and/or its affiliates.