Как отслеживать изменения, внесенные в переменные среды?

Как отслеживать изменения, внесенные в переменные среды?

У меня есть переменная окружения, значение которой не совпадает с установленным /etc/environment, даже после перезагрузки. В конце концов я обнаружил, что автоматически выполняемый скрипт .sh меняет ее, но этот инцидент меня заинтересовал.

Есть ли способ отслеживать (или регистрировать, или как-то еще) все изменения, вносимые в среду?

Предпочтительно с меткой времени, доступной переменной, установленным значением, ответственным пользователем и путем к используемому скрипту bash, если он доступен. Не все из них обязательны, но чем больше, тем лучше.

Кстати, в настоящее время я использую Ubuntu14.04, но ответы по другим ОС будут очень приветствоваться.

Ваше здоровье

решение1

Это было бы сложно.

Переменные окружения не являются контролируемыми объектами — они существуют в собственной памяти программ, и они просто набор текста, который процессы передают своим потомкам. Таким образом, практически невозможно провести аудит ихдоступна системном уровне. В лучшем случае вы могли бы использовать его straceдля просмотра того, какой env передается новым процессам во время создания процесса (в частности, execveсистемный вызов) – это при условии, что вы сможете присоединить его достаточно рано.

(Однако strace не покажет вам, что происходитвнутри(Так что если вы попробуете отследить bash, вы увидите только то, с чего он начинается, и то, что он в итоге передает дальше, но вы не увидите, что делают отдельные скрипты /etc/profile.d.)

Это также означает, что скрипты bash — не единственное, что может влиять на переменные. Многие из них на самом деле устанавливаются модулями PAM или самой программой входа. В частности, /etc/environmentобычно считывается модулем "pam_env".

Связанный контент