我知道 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_env
和reset_env
指令保留部分或全部环境变量。 .
关于c++ - 在Linux C++中,如何读取指定用户的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881058/