
再起動後も /etc/environment で設定された値と一致しない環境変数があります。最終的に、自動実行された .sh スクリプトが値を変更していることがわかりましたが、その出来事が私の興味を引いたのです。
環境に加えられたすべての変更を監視(またはログに記録、または利用可能なその他の方法)する方法はありますか?
タイムスタンプ、アクセスされた変数、設定された値、責任のあるユーザー、および使用可能な場合は使用された bash スクリプトへのパスを含めるのが望ましいです。すべてが必須ではありませんが、多いほど良いです。
ちなみに、私は現在Ubuntu14.04を使用していますが、他のOSに関する回答も大歓迎です。
乾杯
答え1
それは難しいでしょう。
環境変数は監視可能なオブジェクトではありません。プログラム自身のメモリ内に存在し、プロセスが子プロセスに渡すテキストの集まりにすぎません。そのため、環境変数を監査することはほぼ不可能です。アクセスシステム レベルで。せいぜい、strace
プロセス作成中 (具体的には syscall) に新しいプロセスに渡される env を確認するために使用できますexecve
。ただし、これは、十分に早い段階で接続できることが前提です。
(ただし、straceでは何が起こるかは表示されません内部プロセスです。したがって、bash をトレースしようとすると、それが何で始まり、何が最終的に渡されるかだけが表示されますが、個々の /etc/profile.d スクリプトが何を行うかは表示されません。
これは、変数に影響を与えるのは bash スクリプトだけではないことも意味します。変数の多くは、実際には PAM モジュールまたはログイン プログラム自体によって設定されます。特に、/etc/environment
通常は「pam_env」モジュールによって読み取られます。