1

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

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

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

Кстати, я сейчас использую Ubuntu14.04, но ответы, касающиеся разных ОС, очень приветствуются.

ура

1 ответ1

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .