私のDebian Skizeサーバーの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
ㅏGoogle検索同じ質問がたくさん出てきましたが、解決策はありませんでした。
次の行から来ます/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部分にのみ使用してください。