Вопрос или проблема
В /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
. Эта ошибка возникает из-за того, что программа не имеет достаточных разрешений для записи в указанный лог-файл. Рассмотрим основные причины возникновения этой проблемы и возможные решения.
Причины проблемы
-
Недостаточные права доступа к директории/файлу:
Права доступа к директории/var/log/msmtp
и файлуmsmtp.log
могут не позволять утилите msmtp записывать логи. По умолчанию, если директория или файл принадлежат пользователюroot
, то другие пользователи, включаяmsmtp
, не смогут к ним получить доступ. -
Ограничения AppArmor:
Если вы используете систему безопасности AppArmor, возможно, профиль msmtp настроен таким образом, что запрет на запись в определенные директории присутствует. В этом случае системные ограничения могут блокировать доступ к файлам логирования. -
Неправильная путь к лог-файлу:
Убедитесь, что путь к лог-файлу указан правильно в конфигурационном файле 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, что, в свою очередь, значительно улучшит работу вашей системы электронной почты.