chkrootkit은 /var/tmp를 검색할 때 신호 13을 발생시킵니다.

chkrootkit은 /var/tmp를 검색할 때 신호 13을 발생시킵니다.

내 데비안 스퀴즈 서버의 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

편집하다

다음 스크립트를 어딘가에 저장하고 원하는 대로 이름을 지정한 다음 실행 가능하게 만들고 headchkrootkit에서 바꾸십시오.

#!/bin/sh
shift
test -f "$1" || exit 1
read line <$1 
echo "$line"

완전히 호환되지 않으므로 head여기에 게시한 chkrootkit 부분에만 사용하세요.

관련 정보