5

我正在使用gpg2awk与 msmtp 一起在 emacs 中发送电子邮件。这是我.msmtprc文件的相关部分

account gmail
host smtp.gmail.com
from myusername@gmail.com
auth on
port 465
user myusername@gmail.com
passwordeval gpg2 -q --for-your-eyes-only --no-tty -d ~/.authinfo.gpg | awk '/machine smtp.gmail.com login myusername@gmail.com/ {print $NF}'

这就是我的 .authinfo.gpg 文件的样子

machine smtp.gmail.com login myusername@gmail.com port 465 password myverysecretpassword
machine imap.gmail.com login myusername@gmail.com port 993 password myverysecretpassword

出于某种原因,上述 passwordeval 字段中的命令在终端中运行良好,即它输出密码,但是当我使用 msmtp 运行它时

echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug --from=default -t myusername@gmail.com

awk 返回权限错误。

loaded user configuration file /home/myusername/.msmtprc
falling back to default account
sh: 1: awk: Permission denied
msmtp: cannot read output of 'gpg2 -q --for-your-eyes-only --no-tty -d ~/.authinfo.gpg | awk '/machine smtp.gmail.com login myusername@gmail.com/ {print $NF}''

我完全不知道这里可能出了什么问题。此问题在操作系统升级后出现。我也在 .msmtprc 文件上运行了 chmod 600 。任何帮助是极大的赞赏。

其他信息

  • 我曾尝试暂时使用纯密码并且它有效
  • 我试图暂时授予 .msmtprc 777 权限,但没有成功
  • 我已经尝试重新安装msmtp,但它没有工作
  • 我尝试使用sed而不是,awk我得到一个相同的权限错误(对于 sed)。
  • 这个其他帖子可能是相关的?这有点暗示 .msmtprc 所有者可能是相关的。就我而言,我是文件的所有者。

使用的版本

GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0) 版权所有 (C) 1989, 1991-2019 自由软件基金会。

gpg (GnuPG) 2.2.19 libgcrypt 1.8.5 版权所有 (C) 2019 Free Software Foundation, Inc.

msmtp 版本 1.8.6 平台:x86_64-pc-linux-gnu TLS/SSL 库:GnuTLS

4

2 回答 2

6

感谢 marlam 的建议,我发现这个问题是由于对 msmtp 的 AppArmor 配置文件过于严格。我被引导假设我的新操作系统版本在使用 msmtp 方面更加严格(我猜是好事)。不幸的是,这经常发生在 Debian 和 Ubuntu 上,这让许多用户感到困惑。我用来解决它的命令是

sudo ln -s /etc/apparmor.d/usr.bin.msmtp /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.msmtp 
于 2020-07-16T09:10:41.097 回答
-1

移除 AppArmor 保护是一种解决方案。增加 AppArmor 配置文件以包含awk是一个更好的解决方案。

/etc/apparmor.d/usr.bin.msmtp添加以下行:

*** usr.bin.msmtp.old   2022-01-13 08:22:33.301883304 +0100
--- usr.bin.msmtp       2022-01-13 08:23:41.550280850 +0100
***************
*** 50,55 ****
--- 50,57 ----
      /tmp/            rw,
      owner /tmp/*     rw,
  
+     /usr/bin/awk         PUx,
      /usr/bin/secret-tool PUx,
      /usr/bin/gpg{,2}     PUx,
      /usr/bin/pass        PUx,

使该helpers部分看起来像这样:

  # secret helpers
  /{,usr/}bin/bash Cx -> helpers,
  /{,usr/}bin/dash Cx -> helpers,
  profile helpers {
    #include <abstractions/base>
    /{,usr/}bin/bash mr,
    /{,usr/}bin/dash mr,
    /tmp/            rw,
    owner /tmp/*     rw,

    /usr/bin/awk         PUx,
    /usr/bin/secret-tool PUx,
    /usr/bin/gpg{,2}     PUx,
    /usr/bin/pass        PUx,
    /usr/bin/head        PUx,
    /usr/bin/keyring     PUx,
    /{,usr/}bin/cat      PUx,
  }

之后运行

# Mind the small r (reload), do not use capital R (remove)
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.msmtp 
于 2022-01-13T07:27:26.857 回答