如何监视环境变量的改变?

如何监视环境变量的改变?

我有一个环境变量,其值与 /etc/environment 设置的值不匹配,即使在重启后也是如此。我最终发现自动执行的 .sh 脚本改变了它,但这件事引起了我的兴趣。

有没有办法监控(或记录,或任何可用的方法)对环境所做的所有更改?

最好包含时间戳、访问的变量、设置的值、负责的用户以及可用的 bash 脚本路径。并非全部都是必需的,但越多越好。

顺便说一句,我目前正在使用 Ubuntu14.04,但非常欢迎有关不同操作系统的回答。

干杯

答案1

那会很困难。

环境变量不是可监视的对象——它们存在于程序自己的内存中,它们只是进程传递给子进程的一堆文本。因此,几乎不可能审计它们的使用权在系统级别。最好的情况下,您可以使用strace它来查看在进程创建(特别是系统调用)期间传递给新进程的环境execve- 前提是您可以尽早附加它。

(但是,strace 不会告诉你发生了什么里面一个进程。因此,如果您尝试跟踪 bash,您只会看到它以什么开始,以及它最终传递了什么,但您看不到单个 /etc/profile.d 脚本做了什么。)

这也意味着 bash 脚本并不是唯一可以影响变量的东西。事实上,许多变量都是由 PAM 模块或登录程序本身设置的。特别是,/etc/environment通常由“pam_env”模块读取。

相关内容