Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
The message k1H6rBq7047195 sent from <info@salaried.com> to
<user@mydomain.ru>
contained Worm.SomeFool.P and has not been delivered.
uid=26(mailnull) gid=26(mailnull) groups=26(mailnull)
Распознавать уведомления ClamAV будем по признакам, которые в приведённом выше выводе выделены красным шрифтом (можно ограничиться и каким-то одним, но лучше перестраховаться). Интересующая нас информация об обнаруженном вирусе содержится в предпоследней строке. Ну и в самом конце выводится информация о том, что работа сценария идёт от имени пользователя mailnull, так что теперь можно ужесточить права на каталог /var/scripts/maildigest.
Вопросы доставки
Как видите, сообщение мы получаем в том виде, в каком оно будет в дальнейшем помещено в почтовый ящик пользователя. Обработать его проблем не составит – задействуем модуль rfc822, содержащий методы для разбора заголовков. А вот о чём придётся подумать, так это о том, как положить «транзитное» письмо в ящик пользователю. Можно, конечно, воспользоваться протоколом SMTP, но при наличии уже сформированного сообщения формировать его заново выглядит не очень разумным. К тому же есть риск зациклить обработку письма. Попробуем воспользоваться услугами локального агента доставки (LDA).
Хорошо бы просто отдавать сообщение на вход mail.local (LDA, используемый во FreeBSD по умолчанию). Здесь мы упираемся в то, что для выполнения своей работы mail.local должен запускаться с правами пользователя root.
Обойти это можно, установив на mail.local бит suid, однако поскольку такие права нужны нам для решения частной задачи, то более правильно будет создать копию агента доставки с нужными правами, а оригинальный файл не трогать:
# cd /usr/local/scripts/maildigest/
# cp /usr/libexec/mail.local mail.local.suid
# chmod 4555 mail.local.suid
Проведём ещё один эксперимент:
Листинг 2. Второй эксперимент
#!/usr/local/bin/python
import os
prefix_bin = '/usr/local/scripts/maildigest/'
prefix_var = '/var/scripts/maildigest/'
lda_command = prefix_bin + 'mail.local.suid admin'
mail = open(prefix_var + 'mail.txt', 'r').read()