環境權限
環境權限(英文:Ambient Authority)是系統訪問控制研究中的術語。當主體(比如某個電腦程式或Linux上的某個用戶)指明它需要的客體(Object,比如某一文件)的名稱和它將要對該客體執行的動作(Operation,比如「複製」)便可以完成該動作的時候,我們稱該主體使用了環境權限。[1][2][3]
在「環境權限」的定義中:
- 客體的「名稱」指的是可被任何主體使用的某一客體的唯一標識符,這一「名稱」本身不包含它所指代的客體的權限信息。(舉例來說,有一客體名為「foo.txt」,主體「root」擁有權限「rwx」,名稱指的就是「foo.txt」,並不包含權限「rwx」);
- 一個由主體發起的動作「獲得許可(或稱「可以完成」)」指的是該主體能夠提出任何一種能夠完成該動作的請求。(舉例來說,主體「root」具有「foo.txt」的「r」權限,那麼當主體提出「r foo.txt」的時候能夠完成「r」的動作,我們說主體的「r」動作獲得了許可)
「環境權限」存在於「廣泛的可見空間(比如全局環境變量)」,也就是說任何主體都可以通過名稱請求它並完成動作。
下面是一個C程序通過open()程序調用來完成讀取文件的操作:
open(“filename”,O_RDONLY, 0)
在程序調用過程中,程序僅僅指明了目標文件的文件名,此文件名不包含任何的權限信息,也就是說C程序無法從此文件名中獲得權限信息。在這個語境中,權限信息存在於環境中,這也就是我們所說的「環境權限」。
問題
編輯當環境權限被請求時,是否授予或拒絕權限取決於動作的全局屬性,比如作出動作的身份或角色(在Li/Unix語境下,這裡的身份即為「用戶」)。在使用環境權限的時候,權限的管理將獨立於原有的權限控制表或基於角色的權限控制等模式,因而正在使用環境權限的程序不會被傳統的權限控制手段限制。在這種情況下,系統的權限控制機制無法區分環境權限的使用者是誰,導致了代理混淆問題
下面的例子來自於 UC Barkely EECS學院 David Wagner教授的PLAS06課程[4]:
# “cp” 必须运行在环境权限下,它可以访问任意用户能够访问的文件
$ cp foo.txt bar.txt
#“cat” 只需要它用得到的权限
$ cat < foo.txt > bar.txt
# 环境权限:即使你不需要,也会在调用时带来的权限
今天,因為Unix和Windows系統都是在用戶啟動程序後直接賦予程序所有用戶擁有的權限,所以這兩種作業系統都在使用環境權限模式進行權限管理。這不僅可能賦予被執行程序多於所需的權限,還無法控制程序使用了何種、來源於何的權限。這種情形下,用戶只能祈望程序沒有使用過多權限。
解決方案
編輯與環境權限相對應的是「基於能力的權限控制」[5],這一模式要求程序執行時像接收數據那樣接收並利用權限。權限授予機制在程序請求權限時審查並發放「權限」,以此賦予主體使用客體的「能力」,以便於避免代理混淆問題。
但是請注意,基於能力的權限管理系統與非環境權限授權系統並不是同義詞。
參考文獻
編輯- ^ Miller, Mark S.; Yee, Ka-Ping; Shapiro, Jonathan. Capability Myths Demolished (PDF). 2003.
- ^ Donnelley, Jed. cap-talk (郵件列表). 缺少或
|title=
為空 (幫助) - ^
Tribble, Dean. e-lang (郵件列表). 缺少或
|title=
為空 (幫助) - ^ Ambient authority ,David Wagner, UC Berkeley
- ^ 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) (英語).