Chkrootkit

chkrootkit 在搜尋 /var/tmp 時拋出 Signal 13

  • November 4, 2016

在我的 chkrootkit 日誌中的 debian 擠壓伺服器上,我收到大量這些錯誤:

/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

當我直接以root身份輸入時:

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

我得到同樣的錯誤。egrep相反沒有區別。

chkrootkit 在 /tmp/ 和 /var/tmp 目錄中搜尋 PHP 文件。最有可能的是,那裡的某些文件會觸發該錯誤。就我而言,這是一個包含大量零字節的測試文件——刪除該文件解決了這個問題。

這是下面亞歷克斯答案背後的想法的簡單實現。我在主 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 完成。

引用自:https://unix.stackexchange.com/questions/86866