用户帐户自动被 dead.letter 文件填满

用户帐户自动被 dead.letter 文件填满

我在服务器上有一个用户帐户,该服务器上大约有 400 个帐户,并且帐户容量正在自动填满。用户主目录中的 dead.letter 文件会自动增长,直到帐户已满(每天大约 10 - 40 Mb)。用户正在使用 Microsoft Outlook 发送和接收邮件。

什么原因造成这种情况?我该如何避免它发生?

现在我有一个紧急的 cron 作业来删除该文件,但是我想“真实的”解决方案。

编辑:服务器版本是Red Hat Enterprise Linux ES release 4 (Nahant Update 4)

编辑2:它似乎主要是垃圾邮件,我看到不同的邮件标题(从 php 到 Outlook Express),并且经常出现的标题是[email protected]

更新:我已经要求使用该专用服务器的托管提供商也调查该问题,因为他们的控制面板可能是导致问题的原因。

答案1

该用户是否拥有由该系统的 Web 服务器提供的 Web 内容树?

检查其内容树中是否有 CGI 或处理 GET/POST 提交的内容。我猜他们安装了一些标准的 Web 软件——页面布局工具或类似 WordPress 的东西。一些第三方正在利用该 Web 软件中的一些安全漏洞尝试从此系统发送邮件。他们的漏洞无法正常工作,或者至少并非总是如此,因此部分/所有外发邮件都失败了;本地邮件传输代理正在将邮件放入用户的 dead.letter 中。

我在这里处于困境之中...但这是我首先要考虑的地方。

答案2

这是一个您可以针对 dead.letter 文件运行的脚本,也许可以捕获创建该文件的进程。

#! /bin/bash

if [ $# -eq 0 ]; then
        echo "Syntax: $(basename $0) <file_to_watch>"
        exit 1
fi

FILE_TO_WATCH=$1
LOGFILE=/var/tmp/$(basename $0).$(date +"%Y-%m-%d").log
SLEEP_DELAY=5

if [ ! -e $LOGFILE ]; then
        echo -e "DATE                   COMMAND     PID      USER   FD      TYPE     DEVICE SIZE/OFF       NODE NAME" > $LOGFILE
fi

echo "Starting lsof tail job with PID $$"
echo "lsof output will be appended to $LOGFILE"

while true; do
        if [ -e $FILE_TO_WATCH ]; then
                lsof $FILE_TO_WATCH | sed 1d | sed -e "s/^/$(date +"%Y-%d-%m %H:%M:%S    ")/" >> $LOGFILE 2>/dev/null
                sleep $SLEEP_DELAY
        fi
done

例如,您可以随意更改变量以使延迟更加激进。如果您想将其作为后台作业启动,只需像这样调用它:

nohup script.sh /path/to/dead.letter &

为方便您终止它,该脚本将回显它使用的 PID。

编辑:根据您的评论,文件似乎没有被进程保持打开状态足够长的时间,因此您无法捕获它。您可以尝试的另一件事是在 dead.letter 文件上设置不可变标志,希望它会在 /var/log/messages 或其他日志中生成错误。即使是 root 也无法更改不可变文件。

按着这些次序:

# rm -f dead.letter
# touch dead.letter
# chattr +i dead.letter
# lsattr dead.letter
----i---------- dead.letter

然后尝试用 root 再次触摸它。您将得到以下信息:

touch: cannot touch `dead.letter': Permission denied

这证明你做对了。

答案3

如果我没记错的话,很多年前我遇到过一个由损坏的 cron 脚本引起的这种情况,因此请检查用户crontab

相关内容