Назад | Перейти на главную страницу

Учетная запись пользователя автоматически заполняется файлом dead.letter

У меня есть одна учетная запись на сервере с примерно 400 учетными записями, которые заполняются автоматически. Файл dead.letter в домашнем каталоге пользователя автоматически увеличивается до заполнения учетной записи (примерно 10-40 МБ в день). Пользователь использует Microsoft Outlook для отправки и получения почты.

Что может быть причиной этого и как этого избежать?

Прямо сейчас у меня есть экстренное задание cron для удаления файла, но я бы хотел "настоящий" решение.

Редактировать: Версия сервера Red Hat Enterprise Linux ES release 4 (Nahant Update 4)

Изменить 2: Это похоже на спам, и я вижу разные заголовки почтовых программ (от php до Outlook Express), и часто появляется заголовок USER_NAME@vsap.no.loop

Обновить: Я попросил хостинг-провайдера, где я использую этот выделенный сервер, также изучить проблему, так как это их панель управления, которая может быть причиной проблемы.

Есть ли у этого пользователя дерево веб-материалов, обслуживаемое веб-сервером этой системы?

Проверьте их дерево содержимого на предмет CGI или чего-то, что обрабатывает отправку GET / POST. Я предполагаю, что у них установлено какое-то стандартное веб-программное обеспечение - инструмент для верстки страниц или что-то вроде WordPress. Некоторые сторонние организации используют некоторую дыру в безопасности в этом веб-программном обеспечении, чтобы попытаться отправить почту из этой системы. Их эксплойт работает некорректно, или, по крайней мере, не всегда, поэтому некоторая / вся исходящая почта дает сбой; локальный агент транспорта почты помещает почту в dead.letter пользователя.

Я здесь на грани ... но я бы сначала посмотрел именно здесь.

Вот сценарий, который вы можете запустить для файла 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

Потом попробуйте еще раз прикоснуться к нему рутом. Вы получите это:

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

Это подтверждает, что вы все сделали правильно.

Если я правильно помню, у меня был случай, когда это было вызвано сломанным скриптом cron много лет назад, поэтому проверьте пользователей crontab.