刷新当前用户配置文件

Posted

技术标签:

【中文标题】刷新当前用户配置文件【英文标题】:Refresh current user profile 【发布时间】:2011-08-11 09:18:02 【问题描述】:

... 我想通过 c# 工具授予用户临时管理员权限。因此,我将用户添加到管理员用户组(在特权服务帐户下运行的后台服务执行此工作)。但是,更改仅在不方便的新会话(注销/重新登录之后)中生效。有没有办法刷新当前的用户资料?

我尝试了几种方法:

通过 .net Process.Start 将 LoadUserProfile 属性设置为 true。 下一次尝试是通过 LoadUserProfile Win32 Api 函数。 另一种方法是使用 .net Impersonation 来模拟用户

所有这些尝试都无法识别权限更改。在我看来,有一个缓存的用户配置文件包含旧权限并且随时重新加载。

加载新配置文件的唯一方法是 runas 命令,但是我们不希望用户玩弄命令行,应该可以从 .net 执行此操作

如果有其他选择会很好吗?也许有一个工具可以做到这一点?


好的,我重新登录用户,然后将新令牌与例如CreateProcessAsUser 使用新令牌运行新进程。有没有办法为当前的 windows 环境分配新的令牌,因此用户在 windows 中执行的所有操作都使用这个新的令牌?否则我可以使用 lsrunas 等其他工具在新上下文中打开进程并避免 winapi 调用。

从我们的角度来看,我们信任用户(这是他的私人笔记本),他可以安装他想要的软件(暂时),但我们使用我们的工具记录每次安装。我们正在后台使用本地管理员帐户运行一项服务,该服务管理组分配和系统文档。

【问题讨论】:

【参考方案1】:

登录到 Windows 时会创建一个安全令牌,其中会解析所有组成员身份(包括嵌套成员身份)。令牌包含用户所属的 SID(安全标识符)列表。第一个 SID 是用户自己的 ID,然后包括任何组和角色(例如交互式登录、每个人等)。这意味着每次访问控制完成时都不必针对用户数据库(可能是 Active Directory 服务器)查找组成员身份。而是根据令牌检查对象(例如文件)的 ACL(访问控制列表)。

要刷新组成员身份,您需要创建一个新令牌。您可以注销然后按照您的描述重新登录,或者您必须使用LogonUser 为同一用户再次登录。但是,普通用户无法访问该功能。

我认为这一切都归结为寻找另一种设计。从安全角度来看,从管理员组动态添加和删除用户看起来很奇怪。有没有其他方法可以让用户访问所需的资源?您可以在 LocalSystem 帐户下运行的 Windows 服务中执行实际工作吗?

【讨论】:

这似乎也有点冒险,如果你的服务挂了或者有人想办法颠覆它会怎样;您刚刚提供了一种让用户提升绕过 UAT 或正常安全方法的方法。 在本地系统权限下运行的任何服务都存在风险。服务接口的开发当然需要考虑到安全性。

以上是关于刷新当前用户配置文件的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL API 获取当前用户配置文件 + 获取特定 id 用户配置文件

在当前用户配置文件上创建文件夹和文件,从管理员配置文件

使用 FOS 用户包编辑用户配置文件

CentOS8安装并配置 VNC Server

单击 TableViewCell 以打开当前用户的配置文件视图

组策略 之 域中登陆域用户自动添加到管理员组