Chkrootkit
chkrootkit 在搜尋 /var/tmp 時拋出 Signal 13
在我的 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 完成。