O chkrootkit procura por arquivos PHP nos diretórios / tmp / e / var / tmp. Provavelmente, alguns arquivos lá acionam o bug. No meu caso, era um arquivo de teste com muitos bytes zero - excluir o arquivo resolveu o problema.
No meu servidor debian squeeze no log do chkrootkit, recebo muitos desses erros:
/usr/bin/find: Prozeß "head" wurde durch das Signal 13 abgebrochen.
/usr/bin/find: Prozeß "head" wurde durch das Signal 13 abgebrochen.
que significa
head terminated by signal 13
Uma pesquisa do Google dá muitos dos mesmos problemas, mas não há solução .
Ele vem dessas linhas em /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
quando eu entro diretamente como root:
/usr/bin/find /var/tmp -type f -exec head -1 {} \; | grep php 2> /dev/null;date
Eu recebo os mesmos erros. egrep
não faz diferença.
Aqui está uma implementação simples das ideias por trás da resposta de Alex abaixo. Eu comentei o código na linha 1241 do shell script chkrootkit principal e adicionei o código de substituição seguindo-o:
###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
Isso funciona e permite que o chkrootkit seja concluído.
O problema é que head
na saída fecha a stdout
, a primeira head
de saída funciona corretamente, mas qualquer outra gravação na stdout falha com SIGPIPE
.
Você pode querer usar uma abordagem diferente
head -q -n1 $(find /somedir/ -type f)|grep someword
editar
salve um script como o abaixo em algum lugar, nomeie-o como quiser, torne-o executável e substitua head
no chkrootkit.
#!/bin/sh
shift
test -f "$1" || exit 1
read line <$1
echo "$line"
Não é totalmente compatível com head
, portanto, use-o apenas por parte do chkrootkit que você postou aqui.
Tags chkrootkit