2011-12-03 | #1 |
高级会员
注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望:
50
现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
关于mudlib安全性的考虑
发信人: windeye (风眼), 信区: Mud_Builder 标 题: 关于mudlib安全性的考虑 发信站: 逸仙时空 Yat-sen Channel (Sat Oct 17 18:21:53 1998), 站内信件 ******* 等级安全 ******* 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必须解锁才能执行特定命令) |
|