有没有办法(当以管理员身份登录或作为管理员组的成员登录时)伪装成非特权用户?尤其是在 AD 环境中。
例如,在 Unix 世界中,我可以执行以下操作(以 root 身份):
# whoami
root
# su johnsmith
johnsmith> whoami
johnsmith
johnsmith> exit
# exit
我需要在用户帐户上测试/配置某些内容,并且我不想知道他们的密码或必须重置它。
编辑:
runas
不会削减它。理想情况下,我的整个桌面将成为用户等,而不仅仅是在 cmd 窗口中。
我很确定如果没有该用户的凭据,就没有支持以其他用户身份运行的方式。这是一种不可否认的措施。有人不能说:“我没有做”,因为要么是他们做的,要么是有证书的人做的。第二次,他们必须向对方提供凭据。
通常,在以其他用户身份登录时,我需要做的事情是使用远程协助基本上 RDP 进入会话,并让他们授予我控制权。然后我在他们看的时候做任何事情(大概,无论如何)。
其他任何事情通常都可以使用 GPO/脚本来完成。
我注意到很多其他人提到 runas 命令的变体以及您需要如何知道用户密码,这是真的,但我认为没有人安静地回答这个问题。“想要整个桌面将成为用户的等等,而不仅仅是在一个 cmd 窗口中”。这是我的做法:
注意:我将把这个第一个命令提示符称为 CP1,以便稍后消除混淆。
在您的管理员帐户下,打开命令提示符
对于本地帐户
对于域帐户
或者我喜欢的方式
注意:将打开一个新的命令提示符(CP2),这是您尝试登录的用户。
打开 CP1 并输入:
打开 CP2 并输入:
根据计算机的不同,如果用户以前从未登录过,它可能会为用户创建一个配置文件。您可以通过保持命令提示符窗口打开以供以后使用来节省自己的麻烦。
当你完成你的工作时,只需反过来做同样的事情。
在 CP2 类型中:
打开 CP1 并输入:
您现在应该回到原来的管理员帐户。您可以通过点击 Windows 键并查找当前用户面板进行快速检查。
希望这有帮助。
Windows 中没有内置机制来执行此操作。可以做到,但是你必须编写一些东西来做你想做的事情,而且你可能不得不使用未记录的 API。
这里的海报之一,grawity,通过调用 CreateProcessAsUser() 正确,但您需要首先使用未记录的本机 API zwCreateToken 创建一个令牌。如果你杀死了 Explorer 并使用 CreateProcessAsUser() 启动了一个新的 Explorer 实例,我相当肯定你会得到你想要的。
Microsoft 不会让您想做的事情变得容易,因为这不是他们希望您使用 NT 的方式。如果您需要以用户身份登录以解决他们的问题,在大多数情况下,您会以次优方式进行处理。
您可以在不以用户身份登录的情况下更改用户的注册表(通过附加他们的注册表配置单元并以这种方式进行操作)。您可以在不以用户身份登录的情况下更改其用户配置文件中的文件。如果您需要“以用户身份”“设置电子邮件”或其他此类活动,您应该编写脚本或利用内置功能(组策略管理模板、首选项等)为您完成繁琐的工作。
如果您必须这样做,请查看代码项目上的 RunAsEx。该代码应该让您对需要做什么有一个相当好的了解。我还没有尝试过这个程序,但它看起来一切都以正确的方式进行。
您可以在 Windows XP 及更高版本上使用以下命令:
命令行选项在此处可用。
如果不知道用户密码,这将不起作用。由于安全标识符的加载方式,我不相信 Windows 中有一种方法可以在没有密码的情况下在用户帐户下进行操作。
(只是猜测。)如果您的帐户有
SeCreateTokenPrivilege
,您可以编写一个小程序来创建一个使用CreateProcessAsUser()
或类似功能的进程...(但默认情况下甚至管理员都没有权限。)尽管我对本网站上提到的一些 sudo 解决方案没有个人经验,但我强烈推荐由优秀的Aaron Margosis开始的非管理员。当您推出有限的用户时,这是一个巨大的帮助。我主要是跳了一些东西,因为其他人都在说使用 Runas。但是,我认为大多数或所有这些所谓的 sudo for windows 更多地处理提升而不是在没有密码的情况下充当另一个用户。
http://live.sysinternals.com上的Process Explorer procexp.exe以受限用户身份运行(在文件菜单上),这将允许您使用当前凭据运行程序,但您的 ACL 被剥离为正常的用户(非管理员)用户。不是你想要的,但对测试很有用。