Windows 版 (精华区)

发信人: moonvalley (月光·我抬头看见你), 信区: Windows
标  题: NT网域用户帐号的远程管理
发信站: 哈工大紫丁香 (2001年02月13日19:36:05 星期二), 站内信件

湖南医科大学 殷俊华 
中国地质大学 李光强 
---- 1. 前言 

---- Windows NT是一个多任务、多用户的网络操作系统,是构建在域、组、帐号
模式上的网络管理体制。在NT构建的局域网中,一般由一台主域控制器(NT 
Server)负责集中管理NT网域帐号,较之以往传统工作组独立式目录数据服务,
NT网域采用了共享用户数据库的管理形式,从而解决了用户数据库各项繁索的维护
操作,管理员可以在主域控制器上统一管理。 

---- 由于NT网域帐号是基于共享用户数据库的管理方式,网络管理员可以在网域
内的任一工作站上使用超级用户(Administrator帐号)登录,远程维护帐号。但
这种远程管理也仅仅局限于本域工作站而言。本文中,笔者实现了基于TCP/IP协议
的远程帐号管理,解决了NT网域帐号只能在本域中远程维护的弊端。 

---- 2. 网域用户帐号数据结构 

---- 在主域控制器上有一Security Accounts Management(SAM)数据库,用于存放
被授权访问NT系统的用户、组和计算机帐户的基本数据。SAM在域的控制程序间被
共享。NT的SAM的最大空间为40MB,每个用户的帐号属性需要1KB,每个计算机帐户
需要0.5KB,每个组帐户需要4KB。NT网域用户帐号数据结构如表1所示,表中数据
类型为Visual Basic的数据类型。在实际NT网域管理工作中,经常使用的是用户名
(Name)、全称(FullName)、 



---- 描述(Comment)、密码(Password)、用户不得更改密码(NoChangePwd)、密码
永久有效(NoExpirePwd)、帐号暂时禁用(AccDisabled)、帐号有效期限等几个属性
。如图1为NT Server中管理用户帐号的界面。 

---- 表1 NT网域用户帐号参数表 

参  数                数据类型              备  注
UserID                  Long               用户ID号
Name                   String              用户名
FullName               String              用户全称
Comment                String              帐号描述
Password               String              口令
PasswordAge           String               距离口令最近修改时间
Privilege          Long     用户级别0-来访客人1-一般用户;2-管理员
Flags                  Long            帐号标志
NoChangePwd        Boolean        是否允许用户更改口令
NoExpirePwd        Boolean           口令是否过期
PasswordExpired        Boolean           口令过期时间
AccDisabled        Boolean           帐号是否禁用
AccLocked          Boolean           帐号是否锁定
AcctExpires        Date   帐号是否过期:
如果为空,则永久有效;如果为日期,则为过期时间。
BadPwCount         Long         登录错误口令次数
ScriptPath         String            启动脚本路径
AuthFlags          Long            权限标识
UserComment        String              用户描述
Parms                  String   
Workstations           String             登录工作站
LastLogon          Date          最后登站时间
LastLogoff         Date          最后注销时间
MaxStorage         Long 
UnitsPerWeek           Long 
LogonHours         Byte         用户登录小时数
NumLogons          Long 
LogonServer        String   
CountryCode        Long 
CodePage           Long 
PrimaryGroupID         Long              属组
Profile            String              配置文件
HomeDir            String               主目录
HomeDirDrive           String          主目录所在驱动器
   

---- 3. NT网域用户帐号远程管理系统的体系结构 
---- 远程管理NT网域用户帐号的分层次体系结构如图2所示,该系统分为两个部分
,一个是客户端用户管理接口程序,另一个是服务器端的代理程序。客户端用户接
口程序主要是为网络远程管理提供的接口界面,管理员通过此界面输入参数及指令
,接口程序将输入的参数及指令通过TCP层传送给服务器,服务器TCP层将参数及指
令上传代理程序,最后由代理程序根据接收的指令来维护NT网域用户帐号(如图3
) 



---- NT帐号远程管理系统体系结构的另一个重要内容就是应用协议的编制。此系
统应用协议笔者称之为远程帐号管理协议RAMP(Remote Account Management 
Protocol),RAMP协议数据单元主要包括两个字段:控制信息和数据信息。 

控制信息(3B)    数  据  信  息(可变长度)
RAMP协议数据单元结构
控制信息字段占3B,如表2所示:
           RAMP控制信息
      功能  控制信息字段
      添加帐号  ADD
      帐号信息  ACT
      删除帐号  DEL
      修改帐号  MDF
      组 信 息  GRP
      请    求  RQT
      证    实  RSP
    
---- 在用户帐号管理中经常使用的帐号参数有Name、FullName、Comment、
Password、NoChangePwd、NoExpirePwd、PasswordExpired 、AccDisabled、
AccLocked、AcctExpires、Privilege、PrimaryGroupID等12个,所以RAMP协议数
据单元数据信息字段设计为: 
---- 1) 当控制信息为"ADD"或"MDF"时, 

数据信息(623B)=Name(20B)+FullName(256B)
+Comment(256B)+Password(10B)+
NoChangePwd(5B)+NoExpirePwd(5B)+AccDisabled(5B)+
AccLocked(5B)+AcctExpires(20B)+Privilege(1B)+
PrimaryGroupID(20)+ PasswordExpired(20B)。

---- 2) 当控制信息为"ACT"时,若NT服务器中的用户帐号信息尚未发送完,则数
据信息同1);否则数据信息为"END",告诉客户端帐号信息已全部发出。 
---- 3) 当控制信息为"DEL"时,数据信息(20B)=Name(20B)。 

---- 4) 当控制信息为"GRP"时,若NT服务器中的组帐号信息尚未发送完,则数据
信息(20B)=组名;否则数据信息为"END",告诉客户端组信息已全部发出。 

---- 5) 当控制信息为"RSP"时,数据信息(6B)=控制信息(3B)+证实信息(2B) 当
执行成功时,证实信息="OK";否则为"NO"。 

---- 6)当控制信息为"RQT"时,数据信息为"ACT",表示向服务器请求帐号信息;
若为"GRP",表示向服务器请求组信息。 

----4. 主机间会话控制 

---- 本系统使用VB中的WinSock控件,以实现客户机(C)与NT服务器(S)的连接
。在S端创建WinSock控件SvrWsk,使用程序1打开服务端口。 

   程序1    打开服务端口
   SvrWsk.Protocol=sckTCPProtocol  '使用TCP/IP协议
   SvrWsk.RemotePort=0             
   SvrWsk.LocalPort=2000           '设定服务端口2000
   SvrWsk.Listen                   '打开服务端口


---- 在C端创建WinSock控件CltWsk,用程序2与服务器端建立连接。 
   程序2    与服务端口连接
   CltWsk.Protocol=sckTCPProtocol  '使用TCP/IP协议
   CltWsk.RemotePort=2000          '设定远程服务端口
   CltWsk.RemoteHost="xxxxxxx"     '设定服务器主机名或IP地址
   CltWsk.Connect                  '建立连接

---- 在连接建立以后,管理员在C端就可以远程维护S上的用户帐户。当C要修改S
上用户帐号信息时(主机会话过程如图5所示),C首先向S发出请求"RQTACT",S收
到请求后,向C发"ACT"数据。C收到"ACT"包,读取数据字段信息,若不是"END",
上交应用程序;若是"END",数据不上交应用程序,接着向S发出"RQTGRP"请求。S
接到请求后,向C发送NT网域组帐号信息,C依照接收"ACT"数据,来接收"GRP"数据
。在接收完用户帐号信息和组帐号信息后,C应用程序显示用户帐号信息(如图6)
。管理员在C上修改参数,然后将修改过的用户帐号信息加上"MDF"控制信息发送S
,S收到"MDF"数据后,读取数据信息提交给代理程序,由代理程序负责修改用户帐
号。S在正确修改用户帐号信息后,向C发"RSPMDFOK",表明修改成功,否则发
"RSPMDFNO ",表明未正确修改。 




---- 5. 服务器代理程序 

---- 在服务器上主要使用了IADsUser对象来完成代理任务的。IADsUser对象的属
性数据中包括了所有的NT网域用户帐号属性,如图7所示。 

    Name                   用户名称
    Description            帐号描述
    FullName               用户全称
    AccountDisabled        帐号是否禁用
    AccountExpirationDate  帐号期限
    IsAccountLocked        帐号是否被锁定
    PasswordExpirationDate 口令期限
    Groups                 用户所在组
    ChangePassword         帐号口令是否能被用户修改
                      …   …

---- 图7 IADsUser 对象部分属性 
---- IADsUser对象中还设计了一些对象方法,程序员可以很方便地使用这些方法
对用户帐号属性进行读、写、删除等操作。 

---- 1)读取用户帐号"Administrator"信息的程序3: 

    程序3  读取"Administrator"帐号信息
    Dim usr As IADsUser        '定义用户对象变量
    Dim cont As IADsContainer   '定义容器对象变量
    Set cont = GetObject("WinNT://" & NTDomain)  
         '连接NT网域,NTDomain用户可自定义
    Set usr = cont.GetObject("user", "Administrator")
         '读取Administrator帐号信息

    2)新建一用户帐号"NewUser"程序4:
              程序4   新建"NewUser"
    Dim usr As IADsUser        '定义用户对象变量
    Dim cont As IADsContainer  '定义容器对象变量
    Set cont = GetObject("WinNT://" & NTDomain)  
         '连接NT网域,NTDomain用户可自定义
    Set usr = cont.Create("user", "NewUser")
         '建立用户"NewUser"
    usr.FullName="XXXXXXXXX"
    usr.Description="XXXXXXXXXXX"
    usr.Put "PasswordExpired",Clng(0) 
         '设置口令是否过期,0为过期;1-为不过期
    usr.AccountExpirationDate = CDate("01/01/1981")
         '设置帐号过期时间
           … …  '设置其他属性
           usr.SetInfo   '写入SAM

    3)删除用户"NewUser"程序5:
         程序5  删除用户"NewUser"
    Dim usr As IADsUser        '定义用户对象变量
    Dim cont As IADsContainer   '定义容器对象变量
    Set cont = GetObject("WinNT://" & NTDomain)  
         '连接NT网域,NTDomain用户可自定义
    Set usr = cont.Delete("user", "NewUser")
         '删除用户"NewUser"

---- 如果要修改一个用户帐号信息,要先读取帐号信息,然后再重新设置各属性
,最后写入SAM即可,这里不再赘述。当服务器端代理程序执行成功后,即向客户
机端发送"OK"表明执行完毕。 
---- 6. 结束语 

---- 笔者在VB6.0的开发平台上基于TCP/IP协议设计完成的NT网域用户帐号远程管
理系统,为远程管理NT域用户帐号提供了方便,但由于是初步尝试,所以本系统还
有一些不成熟的地方,如安全性要求不够、协议编制尚不够完善、会话控制有待改
进等,也希望广大读者能给予建议和指导。 
    免 费 订 阅  
实用技巧分类
 
Office应用 
CAD 
C、C++ 
数据库应用 
Delphi  
Internet应用 
Java 
Notes应用 
操作系统应用 
PowerBuilder 
VB 
Visual Foxpro 
其他类 
上周 排行榜 
如 何 投 稿 ? 

 

在日常的工作生活中,我们对计算机软硬件技术的应用开发肯定有许多的心得体会
,拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的;小的点点滴
滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二字,知他人所不知,
这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人在
这里都有所收获... 



  中国惠普
  3Com中国
  Motorola中国
  联想科技
  CA中国
  Cabletron
  Sony在中国

 
--
+ ┈ 2001年·更快更精彩 ┈                                -→ @ 电子商务版  
  +  ┌─┘      ┌─┘┌─│┌┌│┌┌│┌─┘┌─│┌─┘┌─┘━━━─ - -
+    ┌┘        │    │  │││││││ ┌┘ ┌┌┘│    ┌┘━━━─ - -  
 + + ──┘──┘──┘──┘┘┘┘┘┘┘──┘┘─┘──┘──┘━━─- - - 
 ┼────────────────────────────━━●●●━— — 

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: ugserver.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.884毫秒