OpenBMC: User Management
前言
此系列文是參考OpenBMC官方Youtube頻道的學習筆記,
相關投影片可以由OpenBMC GitHub的wiki頁面取得。
具備知識
這邊假設聽眾具備基礎的BMC(包含IPMI、Redfish等)知識。
其中D-Bus在OpenBMC是重要的IPC溝通方式,也需要有點基本認識。
User Management設計概念
OpenBMC希望設計一個通用的使用者管理,而非以往大多以IPMI為中心的”Interface Specific”作法,即:任何服務(WebUI、Redfish等)都與IPMI共用使用者。
為了達到此目的,OpenBMC將User Management獨立為單一的daemon,並建立通用的D-Bus API提供操作,
且只有一個API可以去取得local或remote的使用者資訊。
另外,考量易用性與安全性,OpenBMC使用PAM modules而非單純的D-Bus API來進行驗證(登入)與修改密碼的操作。
OpenBMC也支援RMCP+登入。
總之,在設計概念上,基本的username、group以及privileges都是由這個通用的使用者管理來進行維護,
其餘的設定則交由各個應用程式自行維護。
預設的Groups與Privilege Roles
這邊有幾個預設的groups:ssh、ipmi、redfish、web。
若要讓使用者使用這些功能就必須將user加入這些群組。
此外還有一些預設的privilege roles:
架構概念圖
主要使用者管理由Common User Manager(Phosphor-user-manager)負責,其他應用程式(如:Web Service / Redfish、IPMI等)則透過D-Bus的API呼叫來取得或建立使用者。
應用程式可以透過監控D-Bus上的”interfacesAdded”、”interfacesRemoved”、與”PropertiesChanged”這幾個signal來cache使用者資訊。
主要元件
整個User Management包含兩個主要的元件:
1. Phosphor-user-manager
Unix風格的使用者管理器,所謂Unix風格就是利用OS提供的操作(例如:adduser、deluser等)進行使用者管理,其使用者資訊的設定檔會被儲存於目錄/etc/password與/etc/shadow中。
支援LDAP的配置以及privilege映射。
相關的D-Bus interface定義在位置:/xyz/openbmc_project/user
(註:問答有提到目前的D-Bus API實作不穩定,所以如果要透過API實作自己的management則需自行承擔風險)
這邊簡單介紹phosphor-user-manage的interface:
預設配置:no lockout, minlenght(8), no timeout, rememberOldPassword(0)
2. Stacked PAM
主要用來管理使用者密碼,使用者的登入(驗證)與密碼修改的操作都會透過Stacked PAM進行。
其中,remote(LDAP) user會呼叫pam_autoenticate()與pam_chauthtok()兩個API來進行驗證與修改密碼的操作。
密碼使用one-way hash(SHA512),不過由於IPMI使用設定不同,因此在IPMI group中的使用者密碼會另外加密保存(Cipher:AES-128-CBC, Digest-SHA256 whth HMAC)。
在Stacked PAM中有三個主要的modules:
pam_tally2.so
主要用來handle登入失敗的狀況。pam_unix.so
主要用來進行local user的驗證。nss_pam_ldap.so
如果loacal的驗證失敗,則會嘗試LDAP的登入,
此module就是用來處理remote的驗證。
問:有沒有API提供設定優先使用LDAP驗證,省去local驗證的時間?
答:的確如果有相同使用者名稱分別在LDAP與local的狀況下會有這個需求,
不過目前沒有API可以設定,但可以透過configuration設定。
在更新密碼的操作則會包含下列流程:
- 使用pam_chauthtok()來設定或修改密碼。
- pam_cracklib會檢查密碼長度是否符合要求。
- pam_pwhistory檢查密碼歷史紀錄是否符合。
- pam_unit會計算加密(SHA)的密碼。
- 如果user屬於ipmi group,此時會在pam_ipmisave處理;
若原先不屬於ipmi group,經過設定之後增加進入ipmi group時也會在這邊進行處理。
設定檔
Authentication PAM Configuration: /etc/pam.d/common-auth
這個檔案可以改變auth的順序
Password Update PAM Configuration: /etc/pam.d/common-password
驗證流程
整個流程如下圖所示(不包含IPMI)
支援的方法
整理驗證與介面之間的支援度,參考下表:
其他補充
在local.conf.sample設定檔中可以設定預設密碼