c++ - 在Linux C++中,如何读取指定用户的环境变量?

标签 c++ environment-variables sudo

我知道 getenv() 返回当前用户指定环境变量的值,但我的代码需要 root 权限,所以 getenv() 只会使用 sudo 环境变量。我还知道 SUDO_USER 告诉哪个用户正在调用 sudo,这是我想要用于 getenv() 的用户环境。

char* gnome_env_var = getenv("GDMSESSION"); //returns null as not found in sudo env
char* usr = getenv("SUDO_USER");

有没有办法获取登录用户的环境变量值,而不是 sudo 环境?

编辑 好的,所以我听到的是环境变量集对于每个进程都是唯一的,而不是用户,并且使用 sudo 调用具有 root 权限的进程调用 execve,它可以为该进程创建一组全新的环境变量。因此,换句话说,除了弄乱 sudoers 文件之外,还有没有办法在当前进程中找到调用进程的环境变量?

我特别需要 GDMSession 环境变量。

最佳答案

getenv 不会告诉您当前用户 的环境变量,而是当前进程。用户可以自由拥有任意数量的环境(并且可以创建进程),例如使用内置的 export shell。在每次调用 execve 时,调用程序可以自由地为执行的进程创建一个全新的环境。

因此,无法获取用户的环境变量,甚至无法获取执行 sudo 的进程的环境变量。 为什么你还是想要那个?

但是,您可以配置 sudo 以通过/etc/sudoers 中的keep_envreset_env 指令保留部分或全部环境变量。 .

关于c++ - 在Linux C++中,如何读取指定用户的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881058/

相关文章:

c++ - 使用 Sleep() 阻止我写入文件

c++ - 内存屏障作用域

c++ - 关于获取函数结果类型的各种方法

新终端窗口中的 Python sudo 无需传递密码

robotframework - 如何使用 Robotframework 执行 sudo 命令?

c++ - Windows 上互斥量、临界区等的成本

linux - linux不能用分号设置环境变量

python - 为什么 Heroku 在 Wagtail 中强制运行 dev.py?

python - 如何在 python 脚本中使用 Jenkins 环境变量

linux - 不会分配伪终端错误,因为标准输入不是终端 - sudo