У меня есть одна учетная запись на сервере с примерно 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
.