
Eu tenho uma variável de ambiente cujo valor não corresponde ao definido por/etc/environment, mesmo após a reinicialização. Acabei encontrando o script .sh executado automaticamente alterando-o, mas esse incidente me interessou.
Existe uma maneira de monitorar (ou registrar, ou o que estiver disponível) todas as alterações feitas no ambiente?
De preferência com carimbo de data/hora, variável acessada, conjunto de valores, usuário responsável e caminho para o script bash usado quando disponível. Nem todos são obrigatórios, mas quanto mais, melhor.
Por outro lado, estou usando atualmente o Ubuntu14.04, mas respostas sobre diferentes sistemas operacionais são muito bem-vindas.
Saúde
Responder1
Isso seria difícil.
Variáveis de ambiente não são objetos monitoráveis – elas existem na própria memória dos programas e são apenas um monte de texto que os processos passam para seus filhos. Portanto, é quase impossível auditar seusacessoem nível de sistema. Na melhor das hipóteses, você poderia usar strace
para ver qual ambiente é passado para novos processos durante a criação do processo (especificamente o execve
syscall) - presumindo que você consiga anexá-lo com antecedência suficiente.
(No entanto, strace não mostrará o que acontecedentroum processo. Portanto, se você tentar rastrear o bash, verá apenas com o que ele começa e o que acaba sendo transmitido, mas não verá o que os scripts /etc/profile.d individuais fazem.)
Isso também significa que os scripts bash não são a única coisa que pode afetar as variáveis. Muitos deles são, na verdade, configurados por módulos PAM ou pelo próprio programa de login. Em particular, /etc/environment
geralmente é lido pelo módulo "pam_env".