Sco*_*ott 10 solaris opensolaris smf illumos smartos
我在 Joyent 的 Base64 1.8.1 SmartOS 映像上的 SMF(服务器管理工具)下运行服务器进程。
对于那些不熟悉 SmartOS 的人,它是 IllumOS 和 KVM 的基于云的发行版。但本质上它就像 Solaris 并且继承自 OpenSolaris。因此,即使您没有使用过 SmartOS,我也希望能在 ServerFault 上利用一些 Solaris 知识。
我的问题是我希望允许非特权用户重新启动他们拥有的服务。我已经通过使用 RBAC 以及向/etc/security/auth_attr我的用户添加授权并将该授权与我的用户相关联来确定如何做到这一点。
然后,我将以下内容添加到服务的 SMF 清单中:
<property_group name='general' type='framework'>
<!-- Allow to be restarted-->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.my-server-process' />
<!-- Allow to be started and stopped -->
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.my-server-process' />
</property_group>
Run Code Online (Sandbox Code Playgroud)
这在导入时效果很好。我的非特权用户可以重新启动、启动和停止自己的服务器进程(这是用于自动代码部署)。
但是,如果我导出 SMF 清单,此配置数据就会消失……我在该部分中看到的只是:
<property_group name='general' type='framework'>
<property name='action_authorization' type='astring'/>
<property name='value_authorization' type='astring'/>
</property_group>
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?是我的语法错误,还是我只是错误地使用了 SMF?
小智 16
因为 svccfg(1M) 坏了,我也坏了。
早在 2007 年,我就向 SMF 添加了一项功能,允许属性组包含敏感信息,只有具有适当权限的用户才能读取。这个想法是你可以向一个属性组添加一个“read_authorization”属性,任何既没有特权(基本上是 root)也没有拥有该属性命名的授权之一的人将无法读取任何属性的值在组中。这是在此提交下集成的,并且(至少)Sun ZFS 存储产品使用它来存储诸如 LDAP 密码之类的内容。
作为这项工作的一部分,我们希望确保即使是可以读取这些值的特权用户也不会因导出服务状态或创建 SMF 存储库的存档而意外暴露它们。因此,我在 svccfg 中的导出和存档命令中添加了“-a”标志,该标志将显式导出所有属性值,并更改默认值以排除任何受读保护的值。
不幸的是,这个限制没有被正确应用;在这种情况下,我们只是拒绝导出带有值的“常规”属性组中选择的少数属性。其余的在没有任何值的情况下导出,这就是您所看到的。不幸的是,在这里使用 -a 选项无济于事,因为当我们到达相关点时,我们不再拥有知道您已经通过了所需的上下文。甚至可以质疑是否应该要求此标志来公开这些值:允许更改服务状态的授权的身份确实很敏感,并且对攻击者很有用。毫无疑问,当我写这篇文章时,这是我的想法,除非明确要求,否则从其他人的角度限制它是合理的。但是在之前的 S10 版本中,导出的 XML 和存档包含它,所以这绝对是一个不兼容的更改。你对此感到不安是可以原谅的。但这里真正的问题是,当所讨论的属性组是“通用”时,-a 不起作用。我不知道你是第一个遇到这个问题的人。
你可以在它的页面上关注这个问题,这里。同时,您可以考虑通过在生成的 XML 中手动添加属性值来解决这个问题。请注意,如果需要,您也可以通过 svcprop(1) 读取它们。你有我的歉意。感谢 Deirdre Straughan 提请我注意这个问题。
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |