*******
等级安全
*******
1.使用author_file来表示object的等级,也就是object等级只与其目录有关系(?)
2.不对this_player()做等级验证(user->save()的例子)
3.对previous_object_list(previous_object(-1))做等级检查,取除this_player()
外最低等级为previous_object的等级,再和this_object做等级检验。
********
安全检查
********
涉及安全方面的包括read,write,exec,destruct,clone
(update = destruce + create)
某些object不允许被低等级者(比如/u目录)destruct和clone(见函数等级检查)
权限控制分为读权,写权,(函数)执行权,destruct权和create权。
**********
读权的控制
**********
读权是基本权限。但读权的控制有可能导致player因其等级低而无法读取
他的data(因此在安全检查时要忽略this_player())。另外要防止的情形是
低级wiz通过写自己目录下的程序来读写高级别文件(因此安全检查是对所有
previous_object的list而不仅仅是previous_object)。
基本上大部分程序是可读的,但/data/user,/data/login目录例外,player
的数据和passwd应该是低中级wiz不可见的。
**********
写权的控制
**********
写权是最重要的安全权限,在现行mudlib里对它的控制不够严密。
对写权的控制体现为:
低级wiz只能通过roommaker写自己的workrom等
中级wiz可使用edit,但只能编辑自己目录下的区域(也就是可以通过限制
他目录下的文件的权限来实现权限控制,即写权控制执行权)
高级wiz可编辑/d,/std,/obj目录
天神级可编辑/adm和/data目录
(实际级别可以再细分)
对写权的控制还有一种特例:
类似edemote,可允许低级wiz通过命令修改一些文件(如emoted.o),
这些文件是供高级别程序读取的(如emoted.c)。这种修改不涉及函数体
的修改,而且容易跟踪,还是比较安全的。
************************
执行权--函数中的等级检查
************************
某些涉及修改玩家属性的函数(如set,add,delete,skill_improve等)
将在执行前检查previous_object_list和this_object()
等级排列为:
wiz(把wiz等级排在比player还低是为了允许qc程序改变wiz属性而不能改变player)
player(即object级)地图 ,obj , npc....等
std(标准级)feature,skills等
master(系统级)daemons,user data及对user data进行操作的文件
adm(最高安全级)甚至连天神都不能修改的文件:主要是一些日志文件
各等级之间的读,写,执行关系待最后确定。
************************
update权(destruct+create)
************************
destruct的权限可在函数执行中控制
至于object的生成,可在master的valid_object里控制
可避免较低级别wiz通过程序生成某些受控制的object(特别是宝物)
******************
一些涉及安全的efun
******************
如exec,ed等都必须禁止valid_override
*****************
命令级的安全控制
*****************
可考虑加入第二密码命令passlock
除login password之外还有一个第二密码passwd2
某些命令,如suicide,kill,abandon等,以及所有wiz命令必须通过passunlock
解锁才能执行。假如不希望别人使用你的机器时用你的mud窗口,可运行passlock
加锁。
第二密码可以用比较灵活的方式:例如是一个8位数字,passunlock时随机询问
其中三个数位数字的和,差,积等......若回答错误则会踢出系统。
当login时自动执行passlock(也就是每次login必须解锁才能执行特定命令)
尊重作者 转载请注明出处52mud.com