实验探索六大登录权利所对应的注册表键值(一)
本文是登录权利探秘系列的第一部分,其他两个部分位于:
第二部分:http://blogs.itecn.net/ahpeng/archive/2005/06/27/350.aspx
第三部分:http://blogs.itecn.net/ahpeng/archive/2005/06/27/351.aspx
本文作者:盆盆
适用场合:Windows 2000/XP工作组环境
技术难度:Level 300
版权声明:保留所有权利(若需转载、或登载本文,请发电子邮件至pen.aihua AT gmail.com)
内容导读:本文用实验分析帐户的登录权利(Logon Right)所对应的注册表键值,并根据实验结论利用远程注册表来帮助解决诸如“拒绝本地登录”等疑难杂症。
术语概述
登录权利定义了用户帐户是否能够从键盘(控制台)、网络、远程桌面登录系统(仅限于Windows XP),或者是否能够作为服务和批处理作业登录系统,每种登录方法对应一对登录权利(拒绝登录和允许登录)。在默认情况,Windows XP/2000并没有给任何管理员组的成员帐户“显式”地分配登录权利,例如Admin和Peter都是管理员帐户,Windows并没有给Admin和Peter帐户分配任何登录权利,但是这两个帐户显然可以进行本地登录,这是因为Windows默认给Administrators组、Everyone组等帐户分配了相应的登录权利。
Windows XP一共有五对不同的登录权利(Windows 2000有四对登录权利),但是本文只讨论其中三对(六个)登录权利。代表这些登录权利的显示名称和字符常量如表1所示。
|
显示名称 |
字符常量 |
|
“拒绝”登录权利 |
|
拒绝本地登录 |
SeDenyInteractiveLogonRight |
|
拒绝从网络访问这台计算机 |
SeDenyNetworkLogonRight |
|
通过终端服务拒绝登录(Win XP) |
SeRemoteInteractiveLogonRight |
|
“允许”登录权利 |
|
在本地登录 |
SeInteractiveLogonRight |
|
从网络访问此计算机 |
SeNetworkLogonRight |
|
通过终端服务允许登录(Win XP) |
SeDenyRemoteInteractiveLogonRight |
表1
提示 有关登录权利的更详细信息,可以到微软官方网站参考Windows XP Professional Resource Kit在线文档:
http://www.microsoft.com/resources/documentation/Windows/XP/all/reskit/en-us/Default.asp?url=/resources/documentation/Windows/XP/all/reskit/en-us/prnd_urs_wyxu.asp
实验步骤
和登录权利用户权利(包括和特权)有关的配置信息保存在HKLM\SECURITY注册表项里,对应%systemroot%\system32\config\security注册表配置单元文件。本部分将介绍如何利用实验分析六个登录权利所对应的注册表键值。
◆工具软件
本实验需要用到三个工具软件。借助Ntrights命令来更改某个帐户的登录权利设置,然后用Regmon工具来实时监测注册表的访问情况,以了解不同的登录权利所对应的注册表键值。
(1)Regmon(必须):实时监测注册表的访问情况
http://www.sysinternals.com/Utilities/Regmon.html
(2)Ntrights(必须):设置帐户的登录权利,Windows 2003 Resource Kit Tools
http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd
(3)ShowPriv(可选):显示包含特定权利的用户帐户,Windows 2003 Resource Kit Tools
http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd
◆实验约定
如果没有做特别提示,本文所述的Windows XP一律指Windows XP Professional Service Pack 2,本文所述的Windows 2000一律是指Windows 2000 Professional Service Pack 4。
为了方便描述,这里假设以Windows XP 计算机的管理员帐户Peter为例,通过赋予该帐户不同的登录权利,来了解注册表相应键值的对应变化。
◆注意事项
(1)设置注册表权限
默认情况下,管理员组成员没有访问HKLM\SECURITY的权限,为了能够监测HKLM\SECURITY键值的变化,需要赋予管理员访问该注册表项的权限。
(2)查看帐户的登录权利
实验分为六个步骤,每个步骤分别将一个登录权利赋予Peter帐户,然后查看相应的注册表键值变化。
为了确保各个步骤的实验结果不会互相干扰,每个步骤完成后需要将Peter帐户的登录权利恢复到默认设置。这里我们需要借助一个工具确认Peter帐户是否已经恢复到默认的登录权利设置。
遗憾的是,搜索了半天,也没有找到一个可以显示用户帐户的登录权利的命令行工具,whoami命令只能显示当前帐户的特权(Privilege),而不是登录权利。所以这里借助ShowPriv命令工具制作一个简陋的批处理文件ShowUserPriv.bat,来变相实现这个功能,该批处理的内容如下(请不要输入#号以后的注释):
ShowPriv SeDenyInteractiveLogonRight |find /i "%1" #查看是否具有“拒绝本地登录”的权利
ShowPriv SeDenyNetworkLogonRight |find /i "%1" #查看是否具有“拒绝从网络访问这台计算机”的权利
ShowPriv SeInteractiveLogonRight |find /i "%1" #查看是否具有“在本地登录”的权利
ShowPriv SeNetworkLogonRight |find /i "%1" #查看是否具有“从网络访问此计算机”的权利
要了解某个帐户的登录权利,直接将批处理文件拖曳到命令提示符下,然后在右侧加上要查询的帐户名称,例如可以是:
"C:\ShowUserPriv.bat" UserName
这里的UserName要用该帐户的名称代替,命令结果类似如下所示:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\> ShowUserPriv.bat peter
C:\>ShowPriv SeDenyInteractiveLogonRight | find /i "peter"
TESTXPP\peter
C:\>ShowPriv SeDenyNetworkLogonRight | find /i "peter"
C:\>ShowPriv SeInteractiveLogonRight | find /i "peter"
C:\>ShowPriv SeNetworkLogonRight | find /i "peter"
从命令结果中可以看出,Peter帐户当前具有“拒绝本地登录”的权利,这个批处理文件比较“弱智”,所以希望Script Guy们能够提供更好的脚本。
Peter帐户的默认登录权利应该是空,也就是说命令结果应该如下所示:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\> ShowUserPriv.bat peter
C:\>ShowPriv SeDenyInteractiveLogonRight | find /i "peter"
C:\>ShowPriv SeDenyNetworkLogonRight | find /i "peter"
C:\>ShowPriv SeInteractiveLogonRight | find /i "peter"
C:\>ShowPriv SeNetworkLogonRight | find /i "peter"