Jak monitorować zmiany wprowadzone w zmiennych środowiskowych?

1

Mam zmienną środowiskową, której wartość nie zgadzała się z wartością ustawioną przez / etc / environment, nawet po ponownym uruchomieniu. W końcu znalazłem automatyczny skrypt .sh zmieniający go, ale ten incydent zainteresował mnie.

Czy istnieje sposób monitorowania (lub rejestrowania lub innych dostępnych) wszystkich zmian wprowadzanych w środowisku?

Najlepiej z datownikiem, dostępem do zmiennej, zestawem wartości, odpowiedzialnością użytkownika oraz ścieżką do skryptu bash, jeśli jest dostępny. Nie wszystkie są obowiązkowe, ale im więcej, tym lepiej.

Na marginesie używam obecnie Ubuntu14.04, ale odpowiedzi dotyczące różnych systemów operacyjnych są bardzo mile widziane.

Twoje zdrowie

bezout
źródło

Odpowiedzi:

1

To by było trudne.

Zmienne środowiskowe nie są obiektami możliwymi do monitorowania - istnieją we własnej pamięci programów i są tylko fragmentem tekstu, który procesy są przekazywane do ich dzieci. Dlatego prawie niemożliwe jest sprawdzenie ich dostępu na poziomie systemu. W najlepszym razie możesz użyć, straceaby sprawdzić, która env jest przekazywana do nowych procesów podczas tworzenia procesu (w szczególności execvesyscall) - przy założeniu, że możesz załączyć ją wystarczająco wcześnie.

(Jednak strace nie pokaże ci, co dzieje się w procesie. Więc jeśli spróbujesz śledzić bash, zobaczysz tylko, od czego się zaczyna i co kończy się przekazywaniem do przodu, ale nie zobaczysz, jaka osoba / etc Tak działają skrypty /profile.d).

Oznacza to również, że skrypty bash nie są jedyną rzeczą, która może wpływać na zmienne. Wiele z nich jest ustawianych przez moduły PAM lub przez sam program logowania. W szczególności /etc/environmentjest zwykle odczytywany przez moduł „pam_env”.

grawitacja
źródło
Dzięki. Wiedziałem, że skrypty bash są tylko jednym z wielu sposobów wpływania na te, tym bardziej, że miałem nadzieję znaleźć jakąś historię zmian.
bezout