
ES2 mudlib - FF extension v0.6c 函式說明書

程式: /adm/daemons/securityd.c

主要相關檔案:

	/adm/obj/master.c
	/adm/daemons/logind.c
	/adm/simul_efun/object.c
	/adm/simul_efun/overrides.c
	/adm/simul_efun/wizard.c
	/adm/etc/wizlist
	/obj/login.c
	/obj/user.c

說明:

	此物件主控所有的安全措施, 其基礎是 uid 及 euid.
	當然, 讀寫權限的問題都出在巫師身上. 所使用的變數說明如下:

	private mapping wiz_status

		create() 會讀取 /adm/etc/wizlist, 將各巫師的權限資料
		存入此變數

	private string *wiz_levels

		系統所區分的所有巫師等級, 注意, 順序必須按權限由低往高排.

	private mapping exclude_write

		寫入檢查的第一步, 哪些目錄禁止哪些權限的使用者寫入.

	private mapping trusted_write

		寫入檢查的第二步, 哪些目錄容許哪些權限的使用者寫入.

	private mapping exclude_read

		讀取檢查的第一步, 哪些目錄禁止哪些權限的使用者讀取.

	private mapping trusted_read

		讀取檢查的第二步, 哪些目錄容許哪些權限的使用者讀取.

	注意, 目前並沒有限制讀取權限. 但是完整的 security 必然要包括
	讀取權限的限制, 尤其是 /data/login/ 和 /u/ 以防止私人密碼及資
	料被其他人讀取.

	但是, 此 securityd.c 移植自 ES2 v1.2b, 目前整合的程度相當差.
	你可以啟動讀取限制, 然後開始想辦法 debug...*grin

string *query_wizlist()

	傳回巫師名單.

string get_status( mixed ob )

	傳回 ob 的權限等級字串, 以 (admin), (arch) ...等等字串表示.

int get_wiz_level( object ob )

	傳回物件 ob 的權限等級數字. 數字越高, 權限越高.

int set_status( mixed ob, string status )

	僅由 /cmds/arch/promote.c 呼叫. 判斷 ob 是否可以設定為 status
	等級的權限. 如果可以, 則改寫 /adm/etc/wizlist 內容.

int valid_write( string file, mixed user, string func )

	driver 寫入檔案時, 會呼叫 /adm/obj/master.c 的 valid_write(),
	valid_write() 再呼叫此函式判斷 user 呼叫的函式 func 是否有權
	力寫入檔案 file.

	首先判斷一些已知的特定情形, 再檢查 exclude_write 條件, 最後
	檢查 trusted_write 條件.
	
int valid_read( string file, mixed user, string func )

	原理同上.
	目前此函式運作有問題. 想使用讀取權限限制的人請自行 debug.

int valid_seteuid( object ob, string uid )

	driver 設定 euid 時, 會呼叫 /adm/obj/master.c 的 valid_seteuid(),
	valid_seteuid() 再呼叫此函式判斷物件 ob 的 euid 是否可以設為 uid.

Spock of The Final Frontier	98.Oct.2.
