我正在与msmtp一起使用gpg2
和awk
在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 MailrnrnThis 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}''
我完全不知道这里可能出了什么问题。此问题出现在操作系统升级之后。我也在.mstprc文件上运行了chmod 600。非常感谢您的帮助。
其他信息
- 我暂时尝试使用普通密码,它有效
- 我试图暂时授予.mstprc 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(1989191991-2019自由软件基金会。
gpg(GnuPG(2.2.19libgcrypt 1.8.5版权所有(C(2019自由软件基金会,股份有限公司
msmtp 1.8.6版平台:x86_64-pc-linux-gnuTLS/SSL库:GnuTLS
感谢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
移除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