
Ich habe eine Umgebungsvariable, deren Wert nicht mit dem von /etc/environment festgelegten Wert übereinstimmte, auch nicht nach dem Neustart. Irgendwann fand ich das automatisch ausgeführte .sh-Skript, das dies änderte, aber dieser Vorfall weckte mein Interesse.
Gibt es eine Möglichkeit, alle an der Umgebung vorgenommenen Änderungen zu überwachen (oder zu protokollieren oder was auch immer möglich ist)?
Vorzugsweise mit Zeitstempel, aufgerufener Variable, festgelegtem Wert, verantwortlichem Benutzer und Pfad zum verwendeten Bash-Skript, sofern verfügbar. Nicht alle Angaben sind obligatorisch, aber je mehr, desto besser.
Nebenbei bemerkt: Ich verwende derzeit Ubuntu 14.04, aber Antworten zu anderen Betriebssystemen sind sehr willkommen.
Prost
Antwort1
Das wäre schwierig.
Umgebungsvariablen sind keine überwachbaren Objekte – sie existieren im eigenen Speicher des Programms und sind nur eine Ansammlung von Text, den Prozesse an ihre untergeordneten Elemente weitergeben. Daher ist es nahezu unmöglich, ihreZugangauf Systemebene. Bestenfalls können Sie es verwenden, strace
um zu sehen, welche Umgebung während der Prozesserstellung an neue Prozesse übergeben wird (insbesondere der execve
Systemaufruf) – vorausgesetzt, Sie können es früh genug anhängen.
(Allerdings zeigt strace nicht, was passiertinnenein Prozess. Wenn Sie also versuchen, Bash zu verfolgen, sehen Sie nur, womit es beginnt und was es schließlich weitergibt, aber Sie sehen nicht, was einzelne /etc/profile.d-Skripte tun.)
Dies bedeutet auch, dass Bash-Skripte nicht das Einzige sind, was die Variablen beeinflussen kann. Viele von ihnen werden tatsächlich von PAM-Modulen oder vom Anmeldeprogramm selbst festgelegt. Insbesondere /etc/environment
wird normalerweise vom Modul „pam_env“ gelesen.