環境權限

環境權限(英文:Ambient Authority)是系統訪問控制研究中的術語。當主體(比如某個電腦程式或Linux上的某個用戶)指明它需要的客體(Object,比如某一文件)的名稱和它將要對該客體執行的動作(Operation,比如「複製」)便可以完成該動作的時候,我們稱該主體使用了環境權限。[1][2][3]

在「環境權限」的定義中:

  1. 客體的「名稱」指的是可被任何主體使用的某一客體的唯一標識符,這一「名稱」本身不包含它所指代的客體的權限信息。(舉例來說,有一客體名為「foo.txt」,主體「root」擁有權限「rwx」,名稱指的就是「foo.txt」,並不包含權限「rwx」);
  2. 一個由主體發起的動作「獲得許可(或稱「可以完成」)」指的是該主體能夠提出任何一種能夠完成該動作的請求。(舉例來說,主體「root」具有「foo.txt」的「r」權限,那麼當主體提出「r foo.txt」的時候能夠完成「r」的動作,我們說主體的「r」動作獲得了許可)


「環境權限」存在於「廣泛的可見空間(比如全局環境變量)」,也就是說任何主體都可以通過名稱請求它並完成動作。

下面是一個C程序通過open()程序調用來完成讀取文件的操作:

open(“filename”,O_RDONLY, 0)

在程序調用過程中,程序僅僅指明了目標文件的文件名,此文件名不包含任何的權限信息,也就是說C程序無法從此文件名中獲得權限信息。在這個語境中,權限信息存在於環境中,這也就是我們所說的「環境權限」。

問題

當環境權限被請求時,是否授予或拒絕權限取決於動作的全局屬性,比如作出動作的身份或角色(在Li/Unix語境下,這裏的身份即為「用戶」)。在使用環境權限的時候,權限的管理將獨立於原有的權限控制表英語Access-control list基於角色的權限控制英語Role-based_access_control等模式,因而正在使用環境權限的程序不會被傳統的權限控制手段限制。在這種情況下,系統的權限控制機制無法區分環境權限的使用者是誰,導致了代理混淆問題英語Confused deputy problem

下面的例子來自於 UC Barkely EECS學院 David Wagner教授的PLAS06課程[4]

# “cp” 必须运行在环境权限下,它可以访问任意用户能够访问的文件
$ cp foo.txt bar.txt
#“cat” 只需要它用得到的权限
$ cat < foo.txt > bar.txt

# 环境权限:即使你不需要,也会在调用时带来的权限

今天,因為UnixWindows系統都是在用戶啟動程序後直接賦予程序所有用戶擁有的權限,所以這兩種作業系統都在使用環境權限模式進行權限管理。這不僅可能賦予被執行程序多於所需的權限,還無法控制程序使用了何種、來源於何的權限。這種情形下,用戶只能祈望程序沒有使用過多權限。

解決方案

與環境權限相對應的是「基於能力的權限控制」[5],這一模式要求程序執行時像接收數據那樣接收並利用權限。權限授予機制在程序請求權限時審查並發放「權限」,以此賦予主體使用客體的「能力」,以便於避免代理混淆問題。

但是請注意,基於能力的權限管理系統與非環境權限授權系統並不是同義詞。

參考文獻

  1. ^ Miller, Mark S.; Yee, Ka-Ping; Shapiro, Jonathan. Capability Myths Demolished (PDF). 2003. 
  2. ^ Donnelley, Jed. cap-talk (郵件列表).  缺少或|title=為空 (幫助)
  3. ^ Tribble, Dean. e-lang (郵件列表).  缺少或|title=為空 (幫助)
  4. ^ Ambient authority ,David Wagner, UC Berkeley
  5. ^ A capability-based security approach to manage access control in the Internet of Things. Mathematical and Computer Modelling. 2013-09-01, 58 (5-6): 1189–1205 [2020-10-29]. ISSN 0895-7177. doi:10.1016/j.mcm.2013.02.006. (原始內容存檔於2020-11-03) (英語).