Ubuntu 기반 Dockerfile이 있는데 최소한의 Debian 또는 Alpine 기반으로 변경하고 싶습니다. 문제는 사전 설치된 여러 시스템 실행 파일에 의존하지만 어떤 실행 파일을 사용하는지 모른다는 것입니다. 이제 Alpine 기반의 새로운 Dockerfule을 작성하려면 먼저 어떤 프로그램이 사용되고 있는지 알아낸 다음, Alpine에서 해당 프로그램을 제공하는 패키지 이름을 알아내야 합니다. Docker 컨테이너가 사용할 시스템 실행 파일을 간단하게 기록하는 쉬운 방법이 있습니까? PATH에 있는 모든 항목을 새 디렉터리로 옮긴 다음 프록시 역할을 하는 bash 스크립트를 만들고 실행 파일 이름을 기록한 다음 실제 실행 파일을 호출하려고 합니다. 하지만 이것이 안전하고 신뢰할 수 있는 일일까요?
답변1
ftrace를 사용하여 이를 수행하고 exec에 대한 각 호출을 기록할 수 있습니다. Ubuntu에서는 유틸리티를 다운로드할 수 있습니다 trace-cmd
.
apt install trace-cmd
그런 다음 exec 이벤트를 찾으십시오. (이어야 합니다 . 작동하지 않는지 sched_process_exec
확인 하십시오.) trace-cmd list | grep exec
루트 권한으로 실행해야 합니다.
sudo trace-cmd record -e "sched_process_exec" your_program
trace-cmd report #to read the generated output
호출된 모든 실행 파일을 표시하는 스크립트를 테스트했습니다. 추가 정보가 필요한 경우 동일한 방법을 사용하여 더 많은 이벤트를 추적할 수 있습니다(모니터링 가능한 모든 이벤트가 다시 표시됨 trace-cmd list
).
더 나은 방법으로 실행 파일을 표시하려면 결과를 grep하고 고유한 값을 얻을 수 있습니다(이것이 출력에 적합한지 확인하세요. 내 버전이 약간 오래되었을 수 있습니다).
trace-cmd report | grep -Eo "filename=[^ ]+" | sort | uniq
노트 설명서에 따르면:
The trace-cmd(1) record command will set up the Ftrace Linux kernel tracer to record the specified plugins or events that happen while the command executes.
If no command is given, then it will record until the user hits Ctrl-C.
추적 프로그램은 프로그램 실행 중에 캡처된 모든 이벤트를 표시합니다. 즉, 호출 프로세스와 관련이 없더라도 모든 프로세스 실행이 기록됩니다. 잘못된 긍정을 방지하려면 이 작업을 수행할 때 시스템을 최대한 가볍게 만드십시오. 호출하는 프로세스의 경우(재귀적으로라도) 기본 프로세스가 종료되거나 그 동안 이상한 일이 발생하지 않는 한(실제로는 발생하지 않더라도) 안전을 유지해야 합니다.
답변2
먼저 어떤 프로그램이 사용되고 있는지 알아내야 합니다
프로세스 계정을 활성화할 수 있습니다. 데비안에서 패키지는 acct
.
apt install acct # Install the package
accton on # Enable accounting to /var/log/account/pacct
그런 다음 실행된 명령을 볼 수 있습니다.
lastcomm # All commands
lastcomm -u userid # Processes executed by {userid}
평소와 같이 accton
참조 lastcomm
문서가 있습니다( man accton
각각 man lastcomm
).