如何授予本地用户帐户在 Windows 7 Professional 中添加其他本地用户的权限?重点是,能够创建新帐户的本地用户不能具有管理员权限。
我没有找到本地组策略来授予特定帐户创建用户的权限。因此,我尝试通过 PowerShell 脚本创建用户:
$user = Read-Host "Please enter username"
$objOu = [ADSI]"WinNT://$env:computername"
$objUser = $objOu.Create("User", $user)
$objUser.setPassword("DefaultS3cr3t")
$objUser.setInfo()
$objUser.description = "Simple User"
$objUser.passwordExpired = 1
$objUser.setInfo()
$group = [ADSI]"WinNT://$env:computername/Users,group"
$group.Add("WinNT://$user,user")
当我以管理权限运行此脚本时,它可以按预期工作。
为了赋予普通用户执行此脚本的权限,同时不泄露管理员密码,我尝试使用如下所述的“托管代理”: http://powershell.com/cs/blogs/tobias/archive/2010/10/28/regular-users-running-admin-scripts-safe.aspx
问题是,该任务是在后台执行的(因为它是以未登录的用户身份执行的),所以无法输入用户名。
使用“SecureString”来保存密码不是一个选择,因为普通用户可以提取管理员密码。
有没有办法授予普通用户创建其他普通用户的权限,而不授予完全管理权限?
答案1
为了添加本地帐户,您使用的帐户需要在该本地计算机上拥有管理权限。因此,遗憾的是,它不能委托给普通(甚至是 PowerUser)帐户。即使您使用了 Active Directory,您仍然必须授予对象本地管理权限。
答案2
我得出的结论是,使用两阶段 powershell 脚本解决了我的问题。我编写了一个服务脚本,该脚本由 windows 任务计划程序以完全管理权限启动,如下链接所述: http://powershell.com/cs/blogs/tobias/archive/2010/10/28/regular-users-running-admin-scripts-safe.aspx
然后,服务任务打开一个命名管道并侦听客户端连接。管道由其 ACL 保护,因此只有创建用户和应该能够创建本地用户的本地用户帐户才能读取/写入它。我开发了一个简单的明文协议来列出和添加用户。服务脚本负责添加用户,而前端仅负责列出用户并调用“添加”命令。
这两个脚本都通过限制文件系统权限得到进一步保护,以防止修改。