当我运行 chkrootkit 时,有时会得到以下结果:
Searching for suspect PHP files...
/usr/bin/find: `/tmp/sess_nq0tiekcsl41jb93795gnrug54': No such file or directory
/usr/bin/find: `/tmp/sess_s904a26ph28gpspdh1bpke6fg6': No such file or directory
/usr/bin/find: `/tmp/sess_5efg9ic1bebo93q1c2c9d86qu3': No such file or directory
这种情况并不常见 - 也许 50 次扫描中只有 1 次会出现这种情况。
这是什么意思?
答案1
您正在查看的 chkrootkit 部分是这样的:
###
### Suspect PHP files
###
if [ "${QUIET}" != "t" ]; then
printn "Searching for suspect PHP files... "; fi
files="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -name '*.php' 2> /dev/null`"
fileshead="`${find} ${ROOTDIR}tmp ${ROOTDIR}var/tmp ${findargs} -type f -exec head -1 {} \; | grep php 2> /dev/null`"
if [ "${files}" = "" -a "${fileshead}" = "" ]; then
if [ "${QUIET}" != "t" ]; then echo "nothing found"; fi
else
echo "${files}"
echo "${fileshead}"
fi
find
导致错误的是第二条命令。问题在于,在find
命令查找文件和到达文件-exec
并运行head
文件之间存在竞争条件。在这两个时刻之间,另一个进程正在删除一些旧的、过期的 PHP 会话文件。
在基于 Debian 的发行版中,这通常是一个 cron 作业,在/etc/cron.d/php5
每小时的 9 分和 39 分运行。我不确定基于 RedHat 的发行版会做什么,当然,这是可定制的。PHP 有一个内置机制,可以在每次请求时以 1/1000 的概率(此概率也是可配置的)触发会话清理线程。
您所说的 1/50 的概率可能是由于删除旧 PHP 会话文件的机制略有不同所致。