環境変数に加えられた変更を監視するにはどうすればよいですか?

環境変数に加えられた変更を監視するにはどうすればよいですか?

再起動後も /etc/environment で設定された値と一致しない環境変数があります。最終的に、自動実行された .sh スクリプトが値を変更していることがわかりましたが、その出来事が私の興味を引いたのです。

環境に加えられたすべての変更を監視(またはログに記録、または利用可能なその他の方法)する方法はありますか?

タイムスタンプ、アクセスされた変数、設定された値、責任のあるユーザー、および使用可能な場合は使用された bash スクリプトへのパスを含めるのが望ましいです。すべてが必須ではありませんが、多いほど良いです。

ちなみに、私は現在Ubuntu14.04を使用していますが、他のOSに関する回答も大歓迎です。

乾杯

答え1

それは難しいでしょう。

環境変数は監視可能なオブジェクトではありません。プログラム自身のメモリ内に存在し、プロセスが子プロセスに渡すテキストの集まりにすぎません。そのため、環境変数を監査することはほぼ不可能です。アクセスシステム レベルで。せいぜい、straceプロセス作成中 (具体的には syscall) に新しいプロセスに渡される env を確認するために使用できますexecve。ただし、これは、十分に早い段階で接続できることが前提です。

(ただし、straceでは何が起こるかは表示されません内部プロセスです。したがって、bash をトレースしようとすると、それが何で始まり、何が最終的に渡されるかだけが表示されますが、個々の /etc/profile.d スクリプトが何を行うかは表示されません。

これは、変数に影響を与えるのは bash スクリプトだけではないことも意味します。変数の多くは、実際には PAM モジュールまたはログイン プログラム自体によって設定されます。特に、/etc/environment通常は「pam_env」モジュールによって読み取られます。

関連情報