web-dev-qa-db-ja.com

ユーザーアカウントは自動的にdead.letterファイルでいっぱいになります

サーバー上に1つのユーザーアカウントがあり、約400のアカウントが自動的にいっぱいになります。ユーザーのホームディレクトリにあるdead.letterファイルは、アカウントがいっぱいになるまで自動的に大きくなります(1日あたり約10〜40 Mb)。ユーザーはMicrosoftOutlookを使用してメールを送受信しています。

これを引き起こしている可能性があるのは何ですか?

現在、ファイルを削除する緊急のcronジョブがありますが、 "実際の"ソリューションが必要です。

編集:サーバーのバージョンはRed Hat Enterprise Linux ES release 4 (Nahant Update 4)です

編集2:主にスパムのようで、メーラーの見出しが異なり(phpからOutlook Expressまで)、頻繁に表示されるヘッダーは[email protected]です。

更新:問題の原因となる可能性があるのはコントロールパネルであるため、専用サーバーを使用するホスティングプロバイダーにも問題を調査するように依頼しました。

2
jeroen

これは、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をエコーするため、スクリプトを強制終了できます。

編集:あなたのコメントによると、ファイルはあなたがそれを捕まえることができるのに十分長い間プロセスによって開かれたままにされていないようです。/var/log/messagesまたは別のログにエラーが生成されることを期待して、dead.letterファイルに不変フラグを設定することもできます。不変ファイルはrootでも変更できません。

次の手順を実行します:

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

次に、ルートでもう一度タッチしてみます。あなたはこれを得るでしょう:

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

これはあなたがそれを正しくしたことを確認します。

2
Yanick Girouard

記憶が正しければ、何年も前にcronスクリプトが壊れたことが原因である場合があったので、ユーザーcrontabを確認してください。

1
Sven