Накопились в хранилище зимбры несколько десятков гигов старых сообщений, которые почему-то не прибились при автоматической чистке почтовых ящиков.
Меня смутил их размер - самих файлов с сообщениями, поэтому решил посмотреть в общих чертах, что там внутри. Через штатный просмотрщик MC сообщения показываются нормально, но он не умеет парсить структуру SMTP, поэтому я такие сообщения скопировал в свой сетевой каталог, дабы глянуть их через Thunderbird.
Копировал с помощью rsync. Сразу удивило, что, несмотря на использование опции -z, ускорения передачи не было, словно копировались уже сжатые данные. Ну да ладно, это не критично.
Захожу в FAR-e из-под винды в этот каталог, открываю первый попавшийся файл и выпадаю в осадок: внутри просто мусор. Открываю этот же файл через MC на сервере, куда его скопировал - MC показывает нормальные внутренности письма.
Копирую файл на свой локальный диск - внутри мусор. Копирую этот "мусор" обратно на самбу - MC показывает всё как положено.
Уже начал подозревать, что умудрился каким-то непонятным образом поймать вирус-шифровальщик, причем очень хитрый, который шифрует файл не на диске, а при открытии, в реальном времени. На всякий случай тот же самый файл из того же самого каталога попробовал открыть на другой машине с другой ОС и другим пользователем. Мусор.
Скажу честно, я растерялся. Растерянности добавило и то, что среди нескольких файлов сообщений небольшого размера, где-то до 10К, часть читается нормально, а часть содержит всё тот же мусор.
Всё оказалось проще. Выяснилось, что большинство сообщений хранится в виде GZIP. MC-шный просмотрщик молча распаковывает эти архивы, благодаря чему я вижу их исходное состояние, а вот FAR под такую подлянку не заточен:
Вот что говорит file про эти сообщения:
А вот то же самое с ключиком -z ("попытаться проверить содержимое сжатых файлов")
Остался вопрос: как же мне посмотреть, эти сообщения, если часть из них сжатые, а часть - нет? Можно, конечно, натравить gunzip на все файлы в каталоге, и пусть себе выдает ошибки на несжатых, но это не труЪ.
Как говорил мой бывший начальник в отделе автоматизации: "мы называемся "отдел автоматизации", а значит наша задача - автоматизировать всё, что можно". Я не возражал тогда, не возражаю и сейчас, поэтому, убедившись что в однострочной команде это писать неудобно, слепил простенький скрипт, который переварил и обработал всю эту массу.
Меня смутил их размер - самих файлов с сообщениями, поэтому решил посмотреть в общих чертах, что там внутри. Через штатный просмотрщик MC сообщения показываются нормально, но он не умеет парсить структуру SMTP, поэтому я такие сообщения скопировал в свой сетевой каталог, дабы глянуть их через Thunderbird.
Копировал с помощью rsync. Сразу удивило, что, несмотря на использование опции -z, ускорения передачи не было, словно копировались уже сжатые данные. Ну да ладно, это не критично.
Захожу в FAR-e из-под винды в этот каталог, открываю первый попавшийся файл и выпадаю в осадок: внутри просто мусор. Открываю этот же файл через MC на сервере, куда его скопировал - MC показывает нормальные внутренности письма.
Копирую файл на свой локальный диск - внутри мусор. Копирую этот "мусор" обратно на самбу - MC показывает всё как положено.
Уже начал подозревать, что умудрился каким-то непонятным образом поймать вирус-шифровальщик, причем очень хитрый, который шифрует файл не на диске, а при открытии, в реальном времени. На всякий случай тот же самый файл из того же самого каталога попробовал открыть на другой машине с другой ОС и другим пользователем. Мусор.
Скажу честно, я растерялся. Растерянности добавило и то, что среди нескольких файлов сообщений небольшого размера, где-то до 10К, часть читается нормально, а часть содержит всё тот же мусор.
Всё оказалось проще. Выяснилось, что большинство сообщений хранится в виде GZIP. MC-шный просмотрщик молча распаковывает эти архивы, благодаря чему я вижу их исходное состояние, а вот FAR под такую подлянку не заточен:
Вот что говорит file про эти сообщения:
# file 1583-5345.msg
1583-5345.msg: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT)А вот то же самое с ключиком -z ("попытаться проверить содержимое сжатых файлов")
# file 1583-5345.msg -z
1583-5345.msg: smtp mail, ASCII text, with CRLF line terminators (gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT))Остался вопрос: как же мне посмотреть, эти сообщения, если часть из них сжатые, а часть - нет? Можно, конечно, натравить gunzip на все файлы в каталоге, и пусть себе выдает ошибки на несжатых, но это не труЪ.
Как говорил мой бывший начальник в отделе автоматизации: "мы называемся "отдел автоматизации", а значит наша задача - автоматизировать всё, что можно". Я не возражал тогда, не возражаю и сейчас, поэтому, убедившись что в однострочной команде это писать неудобно, слепил простенький скрипт, который переварил и обработал всю эту массу.
#!/bin/bash# В этих путях конечный слэш не указываем: привычка, чтобы потом не пришлось его# убирать где-нибудь в ходе выполненияINDIR=/путь/к/каталогу/с/исходными/файлами
OUTDIR=/куда/копировать/обработанные/файлы# Мне это необходимо - назначить права для доступа, если вам не нужно,# уберите chown в конце скрипта.
RIGHTS="пользователь:группа"# Проходим по всем сообщениям в каталоге. Обработка подкаталогов не предусмотрена.for a in $INDIR/*.msg; do # просто для красоты. Можно отключить для небольшого ускорения. echo $a # Имя файла без расширения используется в 3 местах, лучше использовать # переменную, а не дёргать basename трижды MESNAM=$(basename $a .msg) # Узнаём, что это за файл - gzip или нет? file "$a"|grep -q gzip>/dev/null # Это присвоение не обязательно, но я предпочитаю гарантированно сохранить # в переменной результат последней операции DO=$? # если grep -q нашел подстроку "gzip", тогда будет возвращён ноль if [[ $DO -eq 0 ]]
then # Распаковываем архив в нужное место, меняя расширение gunzip -dc $a>$OUTDIR/$MESNAM.eml
else # Не-архив просто копируем туда же cp $a $OUTDIR/$MESNAM.eml
fi # Если необходимо, назначаем соответствующие права chown "$RIGHTS" $OUTDIR/$MESNAM.eml
doneВот как-то так...


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