msmtp не может записать в /var/log/msmtp/msmtp.log

Вопрос или проблема

В /etc/msmtprc я добавил учетные данные для аккаунта gmail и также указал файл журнала для использования в /var/log/msmtp/msmtp.log

Я также создал папку и файл в /var/log/msmtp/msmtp.log

Когда я тестировал это с помощью: echo "Это тестовое электронное письмо с моего сервера с использованием msmtp!" | msmtp ******@gmail.com

Я получаю электронное письмо, но в терминале я также вижу сообщение об ошибке: msmtp: cannot log to /var/log/msmtp/msmtp.log: cannot open: Permission denied

Текущие права для /var/log/msmtp следующие:

drwxr-xr-x  2 root      root        4096 Jan 29 20:19 msmtp

Что я делаю не так? Какими должны быть права на файл журнала, чтобы msmtp мог записывать в файл?

У меня было такое же сообщение об ошибке, и в конечном итоге изменение прав, создание файла журнала и т. д. не помогло. Проблема в моем случае была вызвана AppArmor: в моей системе файл /etc/apparmor.d/usr.bin.msmtp только перечислял /var/log/msmtp как вакантный для записи в /var/log, так что решение может быть таким:

  • использовать /var/log/msmtp в качестве журнала в конфигурации, вместо /var/log/msmtp.log
  • изменить правила в профиле msmtp apparmor, чтобы разрешить добавление и блокировку нужного нам файла.

Я предпочитаю иметь свои журналы электронной почты в /var/log/mail.log, потому что это по умолчанию в /etc/rsyslog.d/50-default.conf, и я хотел избежать изменения конфигурации AppArmor, если это возможно. Для достижения этого я убрал строку logfile из /etc/msmtprc и добавил следующее:

# Журналы будут отображаться в /var/log/mail.log согласно правилам /etc/rsyslog.d/50-default.conf
syslog LOG_MAIL

После установки msmtp существует пользователь и группа msmtp. Если вы измените владельца файла журнала на msmtp и измените права на чтение/запись для пользователя и группы, ведение журнала будет работать.

groups msmtp
sudo touch /var/log/msmtp
sudo chown msmtp:msmtp /var/log/msmtp
sudo chmod 660 /var/log/msmtp

Я не тестировал это, но предполагаю, что это также работает для /var/log/msmtp/msmtp.log, если вы правильно установите права для папки.

На ноутбуке с Debian stable, у меня также была ошибка “доступ запрещен”. Я установил журнал в ~/var/msmtp.log. Это тоже было вызвано AppArmor. Чтобы исправить это, я нашел строки журнала в /etc/apparmor.d/usr.bin.msmtp:

  owner @{HOME}/.msmtp*.log wk,
  /var/log/msmtp            wk,

Я скопировал первую строку выше в usr.bin.msmtp в /etc/apparmor.d/local и отредактировал ее, чтобы указать на мое местоположение журнала:

  owner @{HOME}/var/msmtp*.log wk,

Я перезагрузил, потому что не потратил время на выяснение, как заставить AppArmor читать обновленные файлы. Теперь он ведет журнал правильно.

Я пробовал с 0640, но это не сработало, это работало только с 0770
(Я изменил владельца на пользователя msmtp + 0640, но это тоже не сработало)

# mkdir /var/log/msmtp
# chmod -R 0770 /var/log/msmtp
# [nano|vim] /etc/apparmor.d/usr.bin.msmtp
  owner /var/log/msmtp/msmtp.log wk,

# service apparmor restart
$ echo 'message test mail backup' | msmtp the.email

Запуская на Debian Bullseye,
я попытался собрать вместе различные решения, опубликованные здесь и в других местах, которые сами по себе являются
хорошей практикой и любая из них может решить проблему в некоторых обстоятельствах.
Я надеюсь, что с добавлением моего открытия каждый случай ошибки будет покрыт.

Сначала:
Добавьте пользователей в группу “mail”

sudo adduser nobody mail

Во-вторых:
Установите путь к журналу и конфигурационному файлу и права.

sudo touch /var/log/msmtp
sudo chown -R root:mail /var/log/msmtp
sudo chmod -R 660 /var/log/msmtp
sudo chown root:msmtp /etc/msmtprc
sudo chmod 640 /etc/msmtprc

Наконец:
Когда я посмотрел на свой конфигурационный файл /etc/msmtprc, я обнаружил, что указал путь к файлу журнала
неправильно:

#УСТАНОВИТЕ ПУТЬ К ФАЙЛУ ЖУРНАЛА
logfile /var/log/msmtp.log

После того, как это было исправлено на….

#УСТАНОВИТЕ ПУТЬ К ФАЙЛУ ЖУРНАЛА
logfile /var/log/msmtp

и протестировано

echo 'message test mail backup' | msmtp the.email

Сообщение об ошибке наконец исчезло.
К сожалению, msmtp отправлял электронные письма, чтобы сообщить мне о деградированном массиве RAID.

Ответ или решение

Проблема с записью логов msmtp в /var/log/msmtp/msmtp.log: решение

При использовании утилиты msmtp для отправки электронных писем, вы можете столкнуться с ошибкой: msmtp: cannot log to /var/log/msmtp/msmtp.log: cannot open: Permission denied. Эта ошибка возникает из-за того, что программа не имеет достаточных разрешений для записи в указанный лог-файл. Рассмотрим основные причины возникновения этой проблемы и возможные решения.

Причины проблемы

  1. Недостаточные права доступа к директории/файлу:
    Права доступа к директории /var/log/msmtp и файлу msmtp.log могут не позволять утилите msmtp записывать логи. По умолчанию, если директория или файл принадлежат пользователю root, то другие пользователи, включая msmtp, не смогут к ним получить доступ.

  2. Ограничения AppArmor:
    Если вы используете систему безопасности AppArmor, возможно, профиль msmtp настроен таким образом, что запрет на запись в определенные директории присутствует. В этом случае системные ограничения могут блокировать доступ к файлам логирования.

  3. Неправильная путь к лог-файлу:
    Убедитесь, что путь к лог-файлу указан правильно в конфигурационном файле msmtprc.

Шаги для решения проблемы

1. Установка правильных прав доступа

Необходимо установить соответствующие права доступа к директории и лог-файлу. Для этого выполните следующие команды:

sudo mkdir -p /var/log/msmtp
sudo touch /var/log/msmtp/msmtp.log
sudo chown -R msmtp:msmtp /var/log/msmtp
sudo chmod 770 /var/log/msmtp
sudo chown msmtp:msmtp /var/log/msmtp/msmtp.log
sudo chmod 660 /var/log/msmtp/msmtp.log

Убедитесь, что пользователь msmtp является владельцем директории и лог-файла. Это позволит утилите записывать данные без ошибок.

2. Проверка конфигурации AppArmor

Если предыдущие шаги не помогли, проверьте конфигурацию AppArmor. Необходимо убедиться, что профиль msmtp позволяет запись в указанную директорию.

Для этого откройте файл /etc/apparmor.d/usr.bin.msmtp и убедитесь, что там указаны соответствующие записи на запись:

/var/log/msmtp/ msmtp_log w,

Если строки недостаточно, вы можете внедрить их, а затем перезапустите службу AppArmor:

sudo service apparmor restart
3. Запись логов в системный лог

Как альтернатива записи в отдельный лог-файл, вы можете перенаправить логи msmtp в системный лог, используя rsyslog. Для этого уберите строку с указанием logfile из конфигурации и добавьте следующее:

syslog LOG_MAIL

Этот метод помогает избежать проблем с правами доступа.

Заключение

Для успешной работы msmtp и того, чтобы избежать ошибок при записи логов, необходимо правильно настроить права доступа к директориям и файлам. Обязательно проверяйте настройки безопасности, такие как AppArmor, если вы используете его. В конечном счете, следуя вышеуказанным инструкциям, вы сможете исправить ошибку записи логов и добиться корректной работы утилиты msmtp, что, в свою очередь, значительно улучшит работу вашей системы электронной почты.

Оцените материал
Добавить комментарий

Капча загружается...