为什么在SmartOS上导出时SMF会丢失configuration数据?

我正在Joyent的Base64 1.8.1 SmartOS映像上运行SMF(服务器pipe理工​​具)下的服务器进程。

对于那些没有SmartOS的人来说,这是IllumOS与KVM的云分发。 但本质上它就像Solaris一样从OpenSolarisinheritance而来。 所以,即使您没有使用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> 

这在导入时效果很好。 我的非特权用户被允许重新启动,启动和停止自己的服务器进程(这是用于自动化代码部署)。

但是,如果我导出SMF清单,这个configuration数据就不存在了…我在该部分看到的是这样的:

 <property_group name='general' type='framework'> <property name='action_authorization' type='astring'/> <property name='value_authorization' type='astring'/> </property_group> 

有人知道这是为什么吗? 我的语法错了,还是我简单地使用SMF不正确?

    因为svccfg(1M)坏了,我就把它弄坏了。

    早在2007年,我向SMF添加了一项function,允许包含敏感信息的属性组只能由具有适当权限的用户阅读。 这个想法是,你可以给属性组添加一个“read_authorization”属性,任何一个既没有特权的(基本上是root)也不拥有这个属性所指定的授权的人将无法读取任何属性的值在组中。 这是在此提交下集成的,(至less)被Sun ZFS存储产品用来存储LDAP密码之类的东西。

    作为这项工作的一部分,我们希望确保甚至可以读取这些值的特权用户不会意外地通过导出服务状态或创buildSMF存储库的存档来公开它们。 所以我在svccfg的export和archive命令中添加了'-a'标志,它将显式地导出所有的属性值,并且改变默认值以排除任何被读保护的值。

    不幸的是,这个限制没有被正确应用。 在这种情况下,我们只是简单地拒绝导出“一般”属性组中具有值的几个属性。 其余的是没有任何价值的导出,这是你所看到的。 不幸的是,使用-a选项在这里没有帮助,因为当我们达到相关的时候,我们不再需要知道你已经通过了这个环境。 甚至可以质疑这个标志是否需要公开这些值:允许改变服务状态的授权的身份确实是敏感的,并且对于攻击者是有用的。 当我写这篇文章的时候,毫无疑问是在我的脑海中,除非明确的需要,否则从别人的观点来看,这是合理的。 但在之前的S10版本中,导出的XML和档案包含了它,所以这绝对是一个不兼容的变化。 你会因此而感到不安。 但是这里真正的问题是,当有问题的财产集团是“一般”的时候,这是行不通的。 你是如何成为第一个打这个我不知道的人。

    您可以在此处的页面中查看此问题 。 同时,您可以考虑通过在生成的XML中手动添加属性的值来解决此问题。 请注意,如果需要,您也可以通过svcprop(1)读取它们。 你有我的道歉。 感谢Deirdre Straughan提出这个问题。