gpt4 book ai didi

c# - 模拟 UNIX 用户并更新环境变量

转载 作者:太空狗 更新时间:2023-10-29 12:18:48 26 4
gpt4 key购买 nike

我正在使用 mono 开发一项服务,该服务以特权用户身份启动,出于安全原因模拟非特权用户。该服务通常会模拟用户运行外部进程,然后再切换回来。但是外部进程需要用户特定的环境变量(如“$HOME”),这些变量不会被用户模拟更改。

这是我用来模拟用户的代码:

WindowsIdentity tmpIdentity = new WindowsIdentity(user);
using(WindowsImpersonationContext tmpContext = tmpIdentity.Impersonate()) {
//run process here
}

我还尝试在生成进程之前运行以下代码但没有影响:

Environment.SetEnvironmentVariable("HOME",Environment.GetFolderPath(Environment.SpecialFolder.Personal),EnvironmentVariableTarget.Machine);

Environment.GetFolderPath(Environment.SpecialFolder.Personal)在模拟之后/期间不会改变

有没有办法更新环境变量?

最佳答案

关键是环境变量是在进程调用期间为进程创建的。由于模拟只是通过切换用户来伪造另一个用户 Access Token ,环境变量不会受此更改的影响。因此 System.GetEnvironmentVariable(String) 方法将继续返回原始 环境变量。因此,更新环境变量是您必须自己做的事情。

这里可能有一些解决方法:

  • 模拟完成后,创建一个负责获取环境变量的新进程
  • 自己解析 OS 资源以获取值(registery、/etc/passwd 等)
  • 如果您确切知道将要模拟哪些用户,则可以使用配置文件

关于c# - 模拟 UNIX 用户并更新环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com