
我有一個環境變量,其值與 /etc/environment 設定的值不匹配,即使在重新啟動後也是如此。我最終發現自動執行的 .sh 腳本改變了它,但那件事引起了我的興趣。
有沒有辦法監視(或記錄,或任何可用的)對環境所做的所有更改?
最好包含時間戳記、存取的變數、值集、使用者負責以及可用時使用的 bash 腳本的路徑。並非所有這些都是強制性的,但越多越好。
順便說一句,我目前使用的是 Ubuntu14.04,但非常歡迎不同作業系統的答案。
乾杯
答案1
那會很困難。
環境變數不是可監視的物件 - 它們存在於程式自己的記憶體中,並且它們只是進程傳遞給子進程的一堆文字。因此幾乎不可能審計他們的使用權在系統層面。最好的情況是,您可以用來strace
查看在進程創建期間(特別是系統呼叫)將什麼 env 傳遞給新進程execve
- 假設您可以儘早將其附加。
(但是,strace 不會告訴你發生了什麼裡面一個過程。因此,如果您嘗試追蹤 bash,您只會看到它開頭的內容以及最終傳遞的內容,但您不會看到各個 /etc/profile.d 腳本的作用。
這也意味著 bash 腳本並不是唯一可以影響變數的東西。其中許多實際上是由 PAM 模組或登入程式本身設定的。特別是,/etc/environment
通常由“pam_env”模組讀取。