Solaris

為什麼 SMF 清單在 SmartOS 上導出時會失去配置數據?

  • October 28, 2012

我在 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>

這在導入時效果很好。我的非特權使用者被允許重新啟動、啟動和停止自己的伺服器程序(這是用於自動程式碼部署)。

但是,如果我導出 SMF 清單,此配置數據就消失了……我在該部分中看到的只是:

<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 添加了一項功能,該功能允許包含敏感資訊的屬性組,只有具有適當權限的使用者才能讀取這些資訊。想法是您可以將“read_authorization”屬性添加到屬性組,任何既沒有特權(基本上是根)也沒有擁有該屬性命名的授權之一的人將無法讀取任何屬性的值在群裡。這是在這個 commit下集成的,並且(至少)被 Sun ZFS 儲存產品用來儲存諸如 LDAP 密碼之類的東西。

作為這項工作的一部分,我們希望確保即使是可以讀取這些值的特權使用者也不會通過導出服務的狀態或創建 SMF 儲存庫的存檔而意外暴露它們。因此,我在 svccfg 中的導出和歸檔命令中添加了“-a”標誌,這將顯式導出所有屬性值,並更改預設值以排除任何受讀保護的內容。

不幸的是,這個限制沒有被正確應用;在這種情況下,我們只是拒絕導出帶有值的“正常”屬性組中除了少數幾個屬性之外的任何屬性。其餘的導出時沒有任何值,這就是您所看到的。不幸的是,在這裡使用 -a 選項將無濟於事,因為當我們到達相關點時,我們不再擁有知道您已經通過該點所需的上下文。甚至可以質疑是否需要此標誌來公開這些值:允許更改服務狀態的授權的身份確實是敏感的,並且對攻擊者很有用。毫無疑問,當我寫這篇文章時,這是我的想法,除非明確需要,否則限制其他人的觀點是合理的。但在之前的 S10 版本中,導出的 XML 和存檔包含它,所以這絕對是一個不兼容的更改。你對此感到不安是可以原諒的。但這裡真正的問題是,當所討論的屬性組是“一般”時,-a 不起作用。你怎麼是第一個打這個的人,我不知道。

你可以在它的頁面上關注這個問題,這裡。同時,您可以考慮通過在生成的 XML 中手動添加屬性值來解決它。請注意,如果需要,您也可以通過 svcprop(1) 讀取它們。你有我的歉意。感謝 Deirdre Straughan 讓我注意到這個問題。

引用自:https://serverfault.com/questions/440132