내 데비안 스퀴즈 서버의 chkrootkit 로그에 다음과 같은 오류가 많이 표시됩니다.
/usr/bin/find: Prozeß "head" wurde durch das Signal 13 abgebrochen.
/usr/bin/find: Prozeß "head" wurde durch das Signal 13 abgebrochen.
의미는
head terminated by signal 13
ㅏ구글 검색같은 질문이 많이 나왔지만 해결책은 없었습니다.
다음 줄에서 나옵니다 /usr/sbin/chkrootkit
.
if [ `echo abc | head -n 1` = "abc" ]; then
fileshead="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -exec head -n 1 {} \; | $egrep '#!.*php' 2> /dev/null`"
else
fileshead="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -exec head -1 {} \; | grep '#!.*php' 2> /dev/null`"
fi
루트로 직접 들어갈 때:
/usr/bin/find /var/tmp -type f -exec head -1 {} \; | grep php 2> /dev/null;date
같은 오류가 발생합니다. egrep
그에 비해 별 차이는 없습니다.
답변1
chkrootkit은 /tmp/ 및 /var/tmp 디렉토리에서 PHP 파일을 검색합니다. 대부분의 경우 일부 파일이 오류를 유발하고 있습니다. 제 경우에는 0바이트가 많이 포함된 테스트 파일이었습니다. 삭제하면 문제가 해결되었습니다.
답변2
다음은 Alex의 답변 뒤에 숨은 아이디어를 간단하게 구현한 것입니다. 기본 chkrootkit 쉘 스크립트의 1241행을 주석 처리하고 그 뒤에 대체 코드를 추가했습니다.
###if [ `echo abc | head -n 1` = "abc" ]; then
### fileshead="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -exec head -n 1 {} \; | $egrep '#!.*php' 2> /dev/null`"
###else
### fileshead="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -exec head -1 {} \; | grep '#!.*php' 2> /dev/null`"
###fi
SUFF=`date "+%m%d%H%M%S.%N"`
echo > /tmp/matches.$SUFF
for F in `${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -print`
do
read line <$F
match=`echo "$line" | grep '#!.*php' 2> /dev/null`
if [ -n "$match" ]
then
echo "$F : $match" >> /tmp/matches.$SUFF
fi
done
fileshead=`cat /tmp/matches.$SUFF`
rm -f /tmp/matches.$SUFF
이것이 작동하고 chkrootkit이 완료될 수 있게 해줍니다.
답변3
문제는 head
종료 시 stdout
첫 번째 head
출력은 제대로 작동하지만 stdout에 대한 다른 쓰기는 실패한다는 것입니다 SIGPIPE
.
다른 접근 방식을 사용하고 싶을 수도 있습니다.
head -q -n1 $(find /somedir/ -type f)|grep someword
편집하다
다음 스크립트를 어딘가에 저장하고 원하는 대로 이름을 지정한 다음 실행 가능하게 만들고 head
chkrootkit에서 바꾸십시오.
#!/bin/sh
shift
test -f "$1" || exit 1
read line <$1
echo "$line"
완전히 호환되지 않으므로 head
여기에 게시한 chkrootkit 부분에만 사용하세요.