chkrootkit 在搜索 /var/tmp 时抛出信号 13

chkrootkit 在搜索 /var/tmp 时抛出信号 13

在我的 debian squeeze 服务器上,我在 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

A谷歌搜索给出了很多相同的问题,但没有解决方案。

它来自以下几行/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

当我直接以 root 身份进入时:

/usr/bin/find /var/tmp -type f -exec head -1 {} \; | grep php 2> /dev/null;date

我得到同样的错误。egrep相反没有什么区别。

答案1

chkrootkit 在 /tmp/ 和 /var/tmp 目录中搜索 PHP 文件。最有可能的是,那里的某些文件触发了该错误。就我而言,这是一个包含大量零字节的测试文件 - 删除该文件解决了问题。

答案2

以下是 Alex 答案背后的想法的简单实现。我注释掉了主 chkrootkit shell 脚本第 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输出正常工作,但对标准输出的任何其他写入都会失败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 部分使用它。

相关内容