发布网友 发布时间:2022-04-22 14:46
共1个回答
热心网友 时间:2023-06-27 15:20
RPL(Remote Initial Program Load:远程启动服务)是一种较早出现的无盘网络组建技术,这种启动方式的典型代表是早期以Windows NT Server 4.0为服务器操作系统组建而成的Windows 95无盘网络。
RPL:请求特权级RPL(Request Privilege Level)
RPL保存在选择子的最低两位。RPL说明的是进程对段访问的请求权限,意思是当前进程想要的请求权限。RPL的值由程序员自己来自由的设置,并不一定RPLgt;=CPL,但是当RPLlt;CPL时,实际起作用的就是CPL了,因为访问时的特权检查是判断:EPL=max(RPL,CPL)lt;=DPL是否成立,所以RPL可以看成是每次访问时的附加*,RPL=0时附加*最小,RPL=3时附加*最大。所以你不要想通过来随便设置一个rpl来访问一个比cpl更内层的段。
因为你不可能得到比自己更高的权限,你申请的权限一定要比你实际权限低才能通过CPU的审查,才能对你放行。所以实际上RPL的作用是程序员可以把自己的程序降级运行——有些时候为了更好的安全性,程序可以在适当的时机把自身降低权限(RPL设成更大的值)。
网上许多人都说在问rpl的作用,我也很晕。Intel的手册中对RPL的作用只是这样做的简短解释的:
The RPL can be used to insure that privileged code does not access a segment on behalf of an application program unless the program itself has access privileges for that segment.
后来找到了一些资料对这段话进行了扩充和举例,我才明白一些:
对于特权级高的进程RPL是作用是防止自己不小心访问到一些资料段。比方说,如果进程A的CPL=0,它知道它的委托进程B的DPL=3,也知道数据段C的DPL=2,而这数据段是不能让CPLgt;2的进程访问的。
那么如果你是进程A的程序员根本不需要RPL的帮助,也不会试图让进程A访问数据段C的数据, 因为这样做只会浪费时间。当然如果你一定要访问数据段C的数据然后把数据传给委托进程B,这就是你的选择,你真的可以这样做,但后果自负。只是有时候要访问的数据段我们不知道它的DPL是怎么,也不知道能不能让进程B访问,其中的一个解决方法就是把委托进程B的DPL以RPL的方法告诉数据段C让它决定接受或不接受。(我想应该是通过程序把B的DPL装入到A的选择子中,然后再由A去访问数据段C)
下面形象的例子在一定程度上帮助我理解了RPL的作用,所以也粘过来。
例子1:
中国*分为6级国家*1、2、*3、*4、*5、乡长6,假设我是当前进程,级别(CPL=2),我去聊城市(DPL=4)考察(呵呵),我用*的级别(RPL=3 这样也能吓死他们:-))去访问,可以吧,如果我用*的级别,人家就不理咱了(你看看电视上的微服私访,呵呵),明白了吧!
为什么采用RPL,是考虑到安全的问题,就好像你明明对一个文件用有写权限,为什么用只读打开它呢,还不是为了安全!
事实上RPL跟段本身的特权级DPL和当前特权级CPL没有什么关系,因为RPL的值在成功转跳后并不赋给转跳后的CS.RPL.