运行 通过 msmtp 时 Awk 权限被拒绝
Awk permission denied when run through msmtp
我正在使用 gpg2
和 awk
与 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 returns 权限错误。
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}''
我完全不知道这里可能出了什么问题。 OS 升级后出现此问题。我在 .msmtprc 文件中也有 运行 chmod 600。非常感谢任何帮助。
其他信息
- 我试过暂时使用纯密码,而且有效
- 我试过暂时给 .msmtprc 777 权限,但没有成功
- 我已经尝试重新安装
msmtp
但没有成功
- 我尝试使用
sed
而不是 awk
,但我得到了相同的权限错误(针对 sed)。
- 这另一个 post 可能相关?这有点暗示 .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
感谢 marlam 的建议,我发现这个问题是由于对 msmtp 的 AppArmor 配置文件过于严格。我被引导假设我的新 OS 版本在 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
我正在使用 gpg2
和 awk
与 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 returns 权限错误。
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}''
我完全不知道这里可能出了什么问题。 OS 升级后出现此问题。我在 .msmtprc 文件中也有 运行 chmod 600。非常感谢任何帮助。
其他信息
- 我试过暂时使用纯密码,而且有效
- 我试过暂时给 .msmtprc 777 权限,但没有成功
- 我已经尝试重新安装
msmtp
但没有成功 - 我尝试使用
sed
而不是awk
,但我得到了相同的权限错误(针对 sed)。 - 这另一个 post 可能相关?这有点暗示 .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
感谢 marlam 的建议,我发现这个问题是由于对 msmtp 的 AppArmor 配置文件过于严格。我被引导假设我的新 OS 版本在 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