ES2 MUD LIB :: 東方故事二(ES2) 天朝帝國 mudlib 瀏覽展示
/doc/mudlib/daemon/securityd
□ daemon: /adm/daemons/securityd.c
這個 daemon 掌管所有對檔案「讀」跟「寫」的同意權﹐所採用的邏輯
很簡單﹕
「當你要對一個目錄作讀或寫的動作時﹐如果有人說可以﹐而且沒有人
反對﹐那麼就可以﹐否則甭想。」
什麼意思呢﹖這代表所有讀寫動作必須經過兩段檢查﹕首先﹐這個檔案
必須存在於一個允許你存取的目錄﹐或這個目錄的子目錄中﹐程式的作法是
首先檢查這個檔案所在的目錄 ﹐看看是否在「允許存許(trusted)」的名單
中有你的名字﹐如果沒有﹐或這個目錄根本沒有允許存取名單﹐那麼就檢查
這個目錄所在的目錄﹐..... 直到根目錄為止。
如果在某一階層目錄的允許存許名單發現了你的名字﹐先別太高興﹐這
只是「有人說可以」而已﹐還要再檢查有沒有人說不可以﹐換句話說﹐這個
檔案不能是一個存在於禁止你存取的目錄﹐或這個目錄的子目錄中的檔案﹐
程式的作法和前面很類似﹐先檢查這個檔案所在的目錄﹐看看是否「禁止存
取(exclude)」的名單中有你的名字﹐如果沒有 ﹐或這個目錄根本沒有禁止
存取名單﹐那麼就檢查上一層的目錄﹐..... 直到根目錄為止。
如果一直到根目錄為止﹐所有的禁止存取名單中都沒有你的名字﹐那麼
恭喜你﹐這表示「沒有人說不可以」﹐你可以存取這個檔案。
在理想的情況下﹐是應該記錄所有巫師的存取資料的﹐但是我們很快會
發現這樣做是很愚蠢的﹐因為很多目錄的允許存取名單或禁止存取名單往往
會有一模一樣的內容﹐這表示大部分人可以被歸類成幾個擁有相同存取權的
群體(group)﹐ 因此前面的敘述中﹐「名字」一詞可以被代換成「名字或所
屬群體」。
群體的劃分可以很簡單﹐也可以很複雜﹐我們採用簡單的方式﹕如果在
「巫師狀態表(wiz_status)」中有你的名字﹐那麼你就是屬於表中所定義的
群體﹐否則﹐我們用 MudOS 所提供的 efun 將使用者劃分成 (wizard)、
(player)、(object) 三個群體。你是否注意到群體的名稱都加上一個括號
﹐目的是為了防止有人取的名字和群體一樣而造成混亂。
了解了上面所說的概念之後﹐其他的細節建議你直接去看原始碼比較快
﹐這個 security 系統很單純﹐也很容易了解﹐如果你發現什麼漏洞﹐應該
也不難改進。
(Elon@ES2 11-27-94)
(Annihilator@ES2 12-13-94)