각각의 새로운 프로세스 PID를 출력하는 Linux 명령

각각의 새로운 프로세스 PID를 출력하는 Linux 명령

새 프로세스를 감시하는 Linux 명령이 있습니까?

내 목표는 새 명령이 호출되는 시기를 확인하고 gulp, 와 같은 명령줄을 실행한 다음 ps, 를 사용하여 필터링하는 것입니다 sed.

중요한 부분은 새로운 프로세스를 관찰하는 것입니다. 일단 완료되면 PID를 조회할 수 없기 때문입니다.

답변1

하위 시스템을 사용하여 auditd시스템에서 실행되는 명령을 기록할 수 있습니다. 커널에 연결되어 있으므로 실행되는 모든 것을 기록하는 것이 매우 안정적입니다.

내 예제는 Fedora Linux에 있으며 배포판에 따라 약간의 차이가 있을 수 있습니다. ( auditd하위 시스템은 매우 복잡하므로 이를 올바르게 수행하는 것이 까다로울 수 있습니다.)

먼저 다음을 사용하여 auditd가 이미 설치되어 실행 중인지 확인하세요.

$ systemctl status auditd.service

그러면 어떤 규칙이 로드되었는지 확인할 수 있습니다. 기본적으로 Fedora에서는 다음을 얻을 수 있습니다.

$ sudo auditctl -l
-a never,task

따라서 이 "작업" 목록(syscall을 억제함)을 제거하고 "execve"(명령을 실행하는 syscall)를 기록하는 목록을 추가해야 합니다.

$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve

이 작업이 완료되면 모든 명령이 감사 시스템에 기록됩니다.

그런 다음 명령을 사용하여 검색할 수 있습니다 ausearch. 예를 들어 "gulp"를 호출하는 모든 실행을 찾으려면 다음을 사용할 수 있습니다.

$ sudo ausearch -c gulp

출력은 상당히 장황할 것입니다. type=EXECVE 행에 집중하십시오. 인수는 다음과 같이 나열됩니다.a0="gulp" a1="first_argument" a2="second_argument" ...

인용된 문자열 대신 긴 일련의 숫자를 얻는 경우 -i이를 해석하는 데 를 사용하십시오.

시스템에서 실행되는 모든 명령을 기록하는 것은 비용이 많이 들고 많은 디스크 공간을 사용할 수 있습니다! 성능에도 영향을 미칠 가능성이 있습니다. 이러한 변경 사항을 실행 취소하려면 다음 명령을 사용하여 기본 규칙 세트를 다시 로드할 수 있습니다.

$ sudo augenrules --load

예를 들어 /usr/bin/gulp 실행만 기록하도록 로깅 규칙에 필터를 적용할 수도 있습니다.

$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve

그래서 어쩌면 이것은 과잉일 수도 있습니다... 하지만 가능한 한 신뢰할 수 있습니다. 나는 당신이 auditd하위 시스템을 통해 길을 찾을 수 있고 그것이 당신이 찾고 있는 정보를 제공할 수 있기를 바랍니다 !

관련 정보