환경 변수에 대한 변경 사항을 어떻게 모니터링합니까?

환경 변수에 대한 변경 사항을 어떻게 모니터링합니까?

재부팅 후에도 값이 /etc/environment에 설정된 값과 일치하지 않는 환경 변수가 있습니다. 결국 자동 실행된 .sh 스크립트가 이를 변경하는 것을 발견했지만 그 사건으로 인해 관심이 생겼습니다.

환경에 대한 모든 변경 사항을 모니터링(또는 기록 또는 사용 가능한 모든 것)할 수 있는 방법이 있습니까?

타임스탬프, 액세스된 변수, 값 집합, 사용자 책임, 사용 가능한 경우 사용되는 bash 스크립트 경로를 사용하는 것이 좋습니다. 모두 필수는 아니지만 많을수록 좋습니다.

참고로 저는 현재 Ubuntu14.04를 사용하고 있지만 다른 OS에 관한 답변은 매우 환영합니다.

건배

답변1

그건 어려울 것 같아요.

환경 변수는 모니터링할 수 있는 개체가 아닙니다. 프로그램 자체 메모리에 존재하며 프로세스가 자식에게 전달하는 텍스트 묶음일 뿐입니다. 따라서 감사하는 것은 거의 불가능합니다.입장시스템 수준에서. 기껏해야 strace프로세스 생성 중에 새 프로세스(특히 syscall)에 어떤 환경이 전달되는지 확인하는 데 사용할 수 있습니다 execve. 이는 충분히 일찍 환경을 연결할 수 있다고 가정하는 것입니다.

(그러나 strace는 무슨 일이 일어나는지 보여주지 않습니다.내부에프로세스. 따라서 bash를 추적해 보면 시작하는 내용과 앞으로 전달되는 내용만 볼 수 있지만 개별 /etc/profile.d 스크립트가 수행하는 작업은 볼 수 없습니다.)

이는 또한 bash 스크립트만이 변수에 영향을 미칠 수 있는 유일한 것이 아니라는 것을 의미합니다. 실제로 이들 중 다수는 PAM 모듈이나 로그인 프로그램 자체에 의해 설정됩니다. 특히, /etc/environment일반적으로 "pam_env" 모듈에서 읽습니다.

관련 정보