模拟UNIX用户和更新环境变量

本文关键字:更新 环境变量 用户 UNIX 模拟 | 更新日期: 2023-09-27 18:17:31

我正在使用mono服务,它作为特权用户启动,并出于安全原因冒充非特权用户。该服务通常会模拟用户运行外部进程,然后再切换回来。但是外部进程需要特定于用户的环境变量(如"$HOME"),这些变量不能被User Impersonation更改。

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

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)在/之后,当Impersonation

是否有更新环境变量的方法?

模拟UNIX用户和更新环境变量

问题是在调用过程中为流程创建环境变量。由于模拟只是通过切换用户访问令牌来获取另一个用户,因此环境变量不会受到此更改的影响。因此,方法System.GetEnvironmentVariable(String)将继续返回原始环境变量。因此,您必须自己更新环境变量。

这里可能有一些方法:

  • 一旦被模拟,创建一个负责获取环境变量
  • 的新进程
  • 解析操作系统资源以获取自己的值(注册表,/etc/passwd等)
  • 如果您确切地知道哪些用户将被冒充,您可以使用配置文件