tcpdump의 -z 플래그를 사용하여 쉘 스크립트를 실행하려고 할 때 무엇이 잘못되었는지 알아내려고 노력 중입니다. 이 플래그를 사용하는 예는 많지 않은 것 같습니다. 매뉴얼 페이지에서는 gzip을 명령으로 사용하는 것을 강조하는데 이는 나에게 잘 작동합니다. tcpdump의 -z에 대한 매뉴얼 페이지는 다음과 같습니다.
-z postrotate-command
Used in conjunction with the -C or -G options, this will make tcpdump run " postrotate-command file " where file is the savefile being closed after each rotation. For example, specifying -z gzip or -z bzip2 will compress each savefile using gzip or bzip2.
Note that tcpdump will run the command in parallel to the capture, using the lowest priority so that this doesn't disturb the capture process.
And in case you would like to use a command that itself takes flags or different arguments, you can always write a shell script that will take the savefile name as the only argument, make the flags & arguments arrangements and execute the command that you want.
내 현재 쉘 스크립트는 매우 기본적입니다... 무엇이 잘못되었는지 알아내려고 노력하는 것과 같습니다.
test.sh - 권한 문제가 아닌지 확인하기 위해 파일은 777입니다.
#!/bin/sh
cp $1 $1.BAK
첫 시도:
tcpdump port 53 -i any -U -G 60 -z test.sh -Z root -w tcpdump_files/tcpdump_%M.pcap
...
compresss_savefile: execlp(test.sh, tcpdump_files/tcpdump_02.pcap) failed: No such file or directory.
이 파일을 실행하려면 tcpdump에 지시해야 할 것 같습니다:
tcpdump port 53 -i any -U -G 60 -z ./test.sh -Z root -w tcpdump_files/tcpdump_%M.pcap
...
compresss_savefile: execlp(./test.sh, tcpdump_files/tcpdump_02.pcap) failed: Permission denied.
아마도 스크립트를 완전히 정규화했을까요? 아니요..
tcpdump port 53 -i any -U -G 60 -z /home/me/test.sh -Z root -w tcpdump_files/tcpdump_%M.pcap
...
compresss_savefile: execlp(/home/me/test.sh, tcpdump_files/tcpdump_02.pcap) failed: Permission denied.
-z 플래그의 매개변수와 백그라운드에서 실행되는 execlp의 작동 방식을 오해하고 있는 것 같습니다. 나는 또한 이것을 시도했지만 -z '/bin/sh, test.sh'
No such file or dir 오류가 발생합니다.
답변1
해결책을 찾았습니다:tcpdump 포스트 스크립트 권한이 거부되었습니다.
결론적으로:
#if this says enforce then change it to complain
grep tcpdump /sys/kernel/security/apparmor/profiles
#change to complain
aa-complain /usr/sbin/tcpdump
내 경우에는 상자에 의류가 없습니다. 그러나 sudo apt install apparmor-utils
위 단계를 실행하고 따르면 권한 거부 문제가 해결되었습니다.