从今天开始,每当我gpg2
在Mac(10.12.1)上使用(通过Homebrew安装)时,现在都会看到以下警告:
Warning: using insecure memory!
对于它的价值,我在两台不同的机器上都看到了相同的行为:Mac mini(2012年末)和MacBook Pro(2012年末),两者都运行10.12.1。
正如GnuPG常见问题解答所说:
GnuPG尝试锁定内存,以便其他进程都看不到它,并且不会将内存写入交换区。如果由于某种原因它不能执行此操作(例如,某些平台不支持这种内存锁定),则GnuPG会警告您它正在使用不安全的内存。
尽管使用安全内存几乎总是更好,但使用不安全内存不一定不是一件坏事。如果您拥有计算机,并且确信它没有恶意软件,则可以忽略此警告。
gpg2
自2016年9月12日以来一直没有改变过,这让我感到困惑。从那时起,我或多或少安装了2.0.30版,但是今天我才开始看到有关内存不安全的警告。即使gpg2
自2016年9月12日以来公式未更改,但我可以肯定地说的是,我在看到此警告之前在两台计算机上都做了这件事brew update && brew upgrade
。但是我什至不知道那会如何影响这一点。根据GnuPG常见问题解答的说法,这似乎与操作系统和内存锁定有更多关系。
...而且更奇怪的是,我还gpg1
从Homebrew(版本1.4.21)安装了该软件,当我使用它时不会警告内存不安全:
$ gpg1 --require-secmem
gpg: Go ahead and type your message ...
^C
gpg: Interrupt caught ... exiting
$ gpg2 --require-secmem
Warning: using insecure memory!
gpg: will not run with insecure memory due to --require-secmem
这两个二进制文件属于相同的所有者和组,并且具有相同的权限:
-r-xr-xr-x 1 adamliter admin 681932 Dec 10 18:06 /usr/local/Cellar/gnupg2/2.0.30_2/bin/gpg2
-r-xr-xr-x 1 adamliter admin 929352 Aug 17 09:21 /usr/local/Cellar/gnupg/1.4.21/bin/gpg1
我只是尝试gpg2
使用Homebrew 重新安装:既通过使用预编译的二进制文件,也通过构建表单源进行了安装,但这并没有任何改变。我仍然收到有关使用不安全内存的警告。
此外,即使使gpg2二进制具有翻转的setuid根位(作为建议,例如,此处)不原因的消息消失; 它仍然警告使用不安全的内存。
有谁知道会发生什么变化,使我今天突然开始看到此警告?当使用gpg2
二进制文件而不使用二进制文件时,为什么会看到它gpg1
呢?
其他可能相关的信息:
$ which gpg1
/usr/local/bin/gpg1
$ ls -al /usr/local/bin/gpg1
lrwxr-xr-x 1 adamliter admin 31 Aug 17 17:42 /usr/local/bin/gpg1 -> ../Cellar/gnupg/1.4.21/bin/gpg1
$ which gpg2
/usr/local/bin/gpg2
$ ls -al /usr/local/bin/gpg2
lrwxr-xr-x 1 adamliter admin 34 Dec 10 18:06 /usr/local/bin/gpg2 -> ../Cellar/gnupg2/2.0.30_2/bin/gpg2
更新资料
我认为发生这种情况的原因是由于的新版本libgcrypt
。我仍然不知道为什么会这样,但是我很确定这至少是问题的根本原因。该公式libgcrypt
是今天刚刚更新了1.7.4凸块; 这可以解释为什么我在一秒钟后在两台不同的电脑上看到这个brew update && brew upgrade
。它还将说明为什么它不会发生gpg1
,因为它gpg1
不依赖外部libgcrypt
密码库,而是使用其自己的集成密码库。
此外,我还gpg2
从MacGPG套件安装了该套件,该套件没有出现此问题,并且链接到另一个版本的libgcrypt
:
$ /usr/local/MacGPG2/bin/gpg2 --version
gpg (GnuPG/MacGPG2) 2.0.30
libgcrypt 1.6.6
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ gpg2 --version
gpg (GnuPG) 2.0.30
libgcrypt 1.7.4
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
因此,我猜测这可能是的维护者的错误报告libgcrypt
。我将发布到他们的邮件列表中,但是暂时将其保留在此处,以防其他人遇到相同的问题和/或其他人知道确切的原因。如果在向他们的邮件列表发送消息后得到确认,这是一个错误,我将投票关闭该问题。
gpg1
和的行为之间的差异gpg2
,以及(ii)测试此功能时我一直在监视计算机上的内存,并且有大量未使用的内存当我看到警告消息时。我认为我已经定位了问题的根源,但是我仍然不确定为什么会这样。将在一秒钟内更新问题。