![如何监视环境变量的改变?](https://linux22.com/image/1482718/%E5%A6%82%E4%BD%95%E7%9B%91%E8%A7%86%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%9A%84%E6%94%B9%E5%8F%98%EF%BC%9F.png)
我有一个环境变量,其值与 /etc/environment 设置的值不匹配,即使在重启后也是如此。我最终发现自动执行的 .sh 脚本改变了它,但这件事引起了我的兴趣。
有没有办法监控(或记录,或任何可用的方法)对环境所做的所有更改?
最好包含时间戳、访问的变量、设置的值、负责的用户以及可用的 bash 脚本路径。并非全部都是必需的,但越多越好。
顺便说一句,我目前正在使用 Ubuntu14.04,但非常欢迎有关不同操作系统的回答。
干杯
答案1
那会很困难。
环境变量不是可监视的对象——它们存在于程序自己的内存中,它们只是进程传递给子进程的一堆文本。因此,几乎不可能审计它们的使用权在系统级别。最好的情况下,您可以使用strace
它来查看在进程创建(特别是系统调用)期间传递给新进程的环境execve
- 前提是您可以尽早附加它。
(但是,strace 不会告诉你发生了什么里面一个进程。因此,如果您尝试跟踪 bash,您只会看到它以什么开始,以及它最终传递了什么,但您看不到单个 /etc/profile.d 脚本做了什么。)
这也意味着 bash 脚本并不是唯一可以影响变量的东西。事实上,许多变量都是由 PAM 模块或登录程序本身设置的。特别是,/etc/environment
通常由“pam_env”模块读取。