smf_security - 服务管理工具的安全行为
服务管理工具 smf(7) 的配置子系统需要修改服务配置的权限。可使用 usermod 命令将下面所述的 rbac(7) 授权和配置文件关联到用户来向用户授予特权。有关更多信息,请参见 usermod(8) 手册页。
以下授权用于处理服务和服务实例。
有权添加、删除或修改服务、服务实例或其属性以及读取受保护的属性值。
smf(7) 配置子系统将属性与每个服务和服务实例相关联。相关属性将进行分组。组可以表示执行方法、凭证信息、应用程序数据或重启程序状态。创建或修改属性组的能力可能会导致 smf(7) 组件执行可能需要系统权限的操作。相应地,框架也需要处理属性组的适当权限。
每个属性组都有与其用途相对应的类型。核心属性组类型有 method、dependency、application 和 framework。也可以引入其他属性组类型,但前提是它们必须符合 smf(7) 中的扩展命名约定。不过,以下基本授权仅适用于核心属性组类型:
有权更改值或者创建、删除或修改 method 类型的属性组。
有权更改值或者创建、删除或修改 dependency 类型的属性组。
有权更改值、读取受保护的值以及创建、删除或修改 application 类型的属性组。
有权更改值或者创建、删除或修改 framework 类型的属性组。
有权添加、删除或修改服务、服务实例或其属性以及读取受保护的属性值。
属性组特定的授权可以由包含在该属性组中的属性来指定。
授权允许在属性组中添加、删除或修改属性以及从受保护的属性组检索属性值。
通常使用 solaris.smf.value.<service> 授权授予修改特定服务的配置的授权。
通常使用同一授权(因为使用它授予写入权限)授予读取受保护属性组的授权,以便仅允许获得写入受保护配置值授权的用户可以读取它们。
上述授权属性仅当具有 astring 类型时才能使用。如果实例属性组没有其中任一属性,但实例的服务具有与该属性同名的属性组,则将使用该属性的值。
通常,任何用户无需显式授权即可读取系统信息库中的所有属性值。非 framework 类型的属性组可用于存储其值需要保护的属性。除非具有适当的授权,否则不能公开这些属性组。通过字符串值的 read_authorization 属性存在与否来指示属性组的受保护状态。如果此属性存在,只能按照属性组授权中的说明来检索属性组中的所有属性值。
如果管理域所使用的策略禁止备份被视为敏感的数据,应从其备份中排除 SMF 系统信息库数据库。面临这样的策略时,非受保护的属性值可以使用 svccfg(8) 归档命令进行备份,以创建没有受保护的属性值的系统信息库的归档。
对服务实例执行的某些操作可能会导致服务中断或停用。这些操作需要授权才能确保任何拒绝服务操作都是有意的管理操作。此类操作包含执行 refresh 或 restart 方法的请求或将服务实例置于维护或其他非运行状态的请求。以下授权允许请求此类操作:
通常使用 solaris.smf.manage.<service> 授权授予启用、禁用、重新启动、刷新或管理特定服务的授权。
此外,general/action_authorization 属性还可以指定允许对该服务实例请求服务操作的其他授权。需要 solaris.smf.manage 授权才能修改此属性。
包含了两个权限配置文件,它们可以提供用于处理典型 smf(7) 操作的分组授权。
服务管理员可以通过任意方式处理系统信息库中的任何服务。服务管理员与 solaris.smf.manage 和 solaris.smf.modify 授权相对应。
要使用 pkg 命令添加或删除其服务清单文件中包含服务清单的软件包,至少需要服务管理配置文件。
服务操作员能够在系统上启用或禁用任何服务实例以及请求执行其 restart 或 refresh 方法。服务操作员与 solaris.smf.manage 和 solaris.smf.modify.framework 授权相对应。
站点可根据需要定义其他权限配置文件。
远程系统信息库服务器可能会由于附加权限检查而拒绝修改尝试。请参见“附注”部分。
通过将以下行添加到 /etc/user_attr 可允许用户 "johndoe" 以非 root 用户身份对 system/cron 服务执行重新启动、启用、禁用或其他状态修改操作。
usermod -A +solaris.smf.manage.cron示例 2 允许用户以非 root 用户身份修改任意服务上的任意属性以及修改 system/cron 服务。
通过将以下行添加到 /etc/user_attr 可允许用户 "janedoe" 以非 root 用户身份修改任意服务上的任意属性,以及对 system/cron 服务执行重新启动、启用、禁用或其他状态修改操作。
usermod -A +auths=solaris.smf.modify,solaris.smf.manage.cron janedoe
auths(1)、profiles(1)、prof_attr(5)、user_attr(5)、rbac(7)、smf(7)、svccfg(8)、 usermod(8)
smf(7) 的现有版本不支持远程系统信息库。
当服务配置为以 root 身份但以不同于 limit_privileges 的权限启动时,所生成的进程可识别权限。这可能会出乎开发者的意料,他们本以为 seteuid(<非零 UID>) 能够将权限降为基本或更低的级别。