cyberden

Rescue your own privacy right now!

上一章,我们初步提到了 GNU/Linux ,从这一章开始,我们将开始讲解什么是GNU/Linux,以及如何安装并使用它,在安装并使用 GNU/Linux 之前,先让我们了解一下GNU/Linux到底是什么。

首先,先了解一下 GNU 和 Linux 分别是什么。

展开全文

简单说来,GNU 是理查德·斯托曼等自由软件运动的发起者于20世纪八十年代开始研制的自由的操作系统。Linux 是林纳斯·托瓦兹(LinusTorvalds)于二十世纪九十年代与许多程序员共同开发的操作系统内核。

以上叙述可以看出,GNU 与 Linux 是两个工程,那么它们又是如何结合到一起去的呢?九十年代时,GNU 操作系统的基本架构已经开发完毕,仅仅差一个内核,而 GNU 的开发者们开发的内核——hurd 由于其开发难度超出了设想导致不能实际使用,但这个时候林纳斯·托瓦兹等程序员开发了 Linux 内核并在开发完毕后的第二年使它成为了自由软件,于是 GNU 结合 Linux 内核成为了 GNU 的一个发行版本即 GNU/Linux。①

GNU 操作系统与 Linux 内核的结合是自由软件运动历史上的大事。它表明自由软件运动有了自己独立的操作系统,从而可以将大量自由软件整合起来并且能更大地发挥它们的作用,进而大大促进自由软件运动的发展。

以上便是 GNU/Linux 的历史。

顺便说一句,有很多人将 GNU/Linux 仅仅称作 Linux,这背后体现的其实是资本家对于自由软件思想的抵触,他们无法接受自由软件思想,他们妄图通过抹杀 GNU 让用户忘记 GNU/Linux 是自由软件运动的产物。②

GNU/Linux 的历史想必大家已经有所了解了那么我们接下来讲讲,GNU/Linux 的基本概念。

一切皆是文件。一切皆是文件,这是什么意思,相信每一个看到这句话的读者一定有些不明所以,不过,其实它很好理解,简单来说,在 *nix(或称“类unix”)操作系统中,不但程序配置用人类可读的文本储存于典型文件中,就连磁盘分区、通信接口,甚至网络套接字都“表现为文件”,以类似典型文件的方式去访问。用文本文件保存程序配置的好处是便于管理与控制计算机,因为进行配置就是在编辑文件。而后者的实质是用读写文件的操作统一抽象任意输入输出操作,这种统一可以大大拓展应用程序的适用范围。但同时用户如果缺乏运用 *nix 系统的知识或者因为失误进行了误操作,将会危害计算机,因此 GNU/Linux 系统下存在严格的权限隔离机制。

权限隔离。GNU/Linux 系统的权限隔离体现为不同账户对同一(广义)文件的访问权限的区别。*nix 系统中任何权限主体(用户和组)对任何文件系统对象均有读、写、执行三种访问权限。*nix 系统中普遍存在 root 账户,又称超级用户,它有权更改文件系统中的任何文件和目录的访问权限,故可以通过修改操作系统上的文件进而控制住计算机;而非 root 的普通账户就是通常情况下用来启动操作系统的账户,其权限只是 root 账户权限的子集,只能更改属于自己的文件和目录的权限。每个普通用户被(root 用户)创建时都会分配一个/home/<用户名>(被称为该用户的“主目录”或“家目录”)归其所有。因此使用它仅可以自由支配自己的主目录下的文件,甚至不可以下载安装软件(因为普通用户没有主目录以外范围的写权限)。通过这种分明的权限隔离,普通用户就无法对自己的主目录以外的文件进行编辑修改(有的甚至还不能读取),这样可以保证多用户并存的时候,不会因为乱动别人的文件而互相干扰,这体现了其多用户操作系统的特点。

GNU/Linux 的软件依赖关系。GNU/Linux 下的软件能合理处理软件依赖关系。什么叫软件依赖关系呢?一个软件往往能运行需要其对应的运行环境,比如a软件要运行,它可能需要b软件作为其运行环境,这时如果c软件要运行也需要b软件,那么就可以说a和c都依赖b,b与a和c形成依赖关系。这在 Windows 下处理得并不好,比方说,还是a软件依赖b软件,c软件也可以依赖b软件,但是c软件的软件包里又包含了b,这样就会浪费空间,原因就是 Windows 没有统一的包管理器;但在 GNU/Linux 下由于存在统一的包管理器,软件依赖关系处理良好,往往b就是b,不会多出个和b功能重复的软件,这样可以减少相同功能程序的存在,节约磁盘空间。

目录树。GNU/Linux 对于文件系统的划分方法不同于 Windows 下那种C、D、E盘的模糊分法,它是通过目录树组建起文件系统的。首先一切目录都挂载在 / ,根目录下,而根目录下的每个目录都有它的作用。例如,/home 存储各个用户的家目录,个人帐户的文件都存储在这里,这也是未取得 root 密码的用户所唯一能修改的文件的存储地; /etc ,用于存储程序所需的全局配置文件,如 sudo 的配置文件 sudoers 就存储在这里。而子目录下又会包含二级子目录,如 /home 用户家目录下包含的具体的用户目录。这样就构成了目录树。③

命令行。GNU/Linux下许多软件都需要通过命令行界面的形式使用,GNU/Linux 的命令行强大无比,可以进行网络通信可以压缩可以写文章可以编程,总之基本涵盖了计算机使用的方方面面。在命令行界面里,我们通过输入字符命令来进行操作,这虽然一开始会比较难,但是随着熟练程度的加深,你会渐渐发现很多时候命令行的效率要高于图形界面。④

以上就是在安装前,关于 GNU/Linux 的基础知识,那么使用 GNU/Linux,除了它是自由软件安全性较高以外,还有什么好处呢?

笔者根据以上特点总结了以下三点:

  1. GNU/Linux 下一切皆是文件,这和 Windows 这种充斥着注册表和设备专用工具的系统不同,可以更加方便地管理系统和电脑。

  2. GNU/Linux 下用目录树安排磁盘,可以更有效率地利用资源,做到井井有条。

  3. GNU/Linux 下命令行界面强大无比,可以节约很多图形化所需的时间并实现自动化,提高效率。

注释:

①GNUlibc 至少可以对接三种内核、hurd、linux、还有 freebsd 的内核,从而分别构成 GNU/Hurd、GNU/Linux 和 GNU/kFreeBSD,其中 GNU/Hurd 前面提过因为技术不成熟,GNU/kFreeBSD 因为支持的硬件少且用户体验和 GNU/Linux 相差不大,因而使用的人数非常少。

②这也和“开源”运动有一定关系,至于开源软件和自由软件的区别以后会提到。

③目录树的知识具体会在接下来几章详细讲解。

④Windows 也有它的命令行终端 cmd,但是很不好用。

一、配置 dsncrypt-proxy 本身

1.打开 dnscrypt-proxy 的配置文件样本 /usr/share/doc/dnscrypt-proxy/example/example-dnscrypt-proxy.toml,按照它编写实际起作用的配置文件 /etc/dnscrypt-proxy/dnscrypt-proxy.toml

展开全文

建议添加的配置有:

dnscrypt_servers = true

require_dnssec = true

dnscrypt_ephemeral_keys = true

fallback_resolver = '8.8.8.8:53'

ignore_system_dns = true

配置文件中原有的listen_addresses = []建议空置,server_names = ['cloudflare']一行建议注释掉(在这一行的开头位置加上“#”),以上建议添加的配置项可写在原有的listen_addresses = []server_names = ['cloudflare'] 下方。

2.重新启动 dnscrypt-proxy:# systemctl restart dnscrypt-proxy,通过查看# journalctl -u dnscrypt-proxy的输出确认 dnscrypt-proxy 能够正常工作,否则请检查其配置文件。

  1. 安装 resolvconf ( # apt install resolvconf ),使 dns 解析器仅向 dnscrypt-proxy 所监听的 127.0.2.1:53 请求域名解析。

二、配置 dhcp(过时

注意:此部分内容均过时,不再作为配置步骤,仅保留作为参考。isc-dhcp-client (dhclient) 即将淘汰,且随着 dnscrypt-proxy 软件本体功能的完善。原本需要借助 dhclient 实现的使 dns 解析器仅向 dnscrypt-proxy 所监听的 127.0.2.1:53 请求域名解析的功能,仅在安装了 resolvconf 和 dnscrypt-proxy 就已实现,现无需安装和配置 dhclient 。

0.安装 isc-dhcp-client ( # apt install isc-dhcp-client );

提示:Network Manager 和 wicd 都是网络管理器,用途相同,基本不会同时出现在同一个系统环境中。

用户使用 Network Manager 的情况下的配置方法

1.向 /etc/NetworkManager/conf.d/15-dhcp.conf 写入如下内容(使 Network Manager 通过 dhclient 获取 dns 服务器相关信息,而非自行获取):

[main]

dhcp=dhclient

2.向 /etc/dhcp/dhclient.conf 添加选项

prepend domain-name-servers 127.0.2.1;

注意:“;”不可省略且必须为英文标准写法

3.重新启动 Network Manager (# systemctl restart NetworkManager

用户使用 wicd 的情况下的配置方法

向 wicd 的 dhcp 客户端配置模板 /etc/wicd/dhclient.conf.template 中加入选项

prepend domain-name-servers 127.0.2.1;”

提示:wicd 不使用 /etc/dhcp/dhclient.conf,而是基于模板临时生成配置文件

重新启动 wicd (# systemctl restart wicd),如果 /etc/resolv.conf 中除nameserver 127.0.2.1外没有其他 dns 服务器项目,则说明配置成功。

三、利用 dnscrypt-proxy 提供的本地 DNS over HTTPS 服务器

dnscrypt-proxy 可以加密 dns 请求本身,但 tls 协议仍然有一丝缺憾:由同一台服务器同时为多个域名提供服务是很常见的事情,但因为不同的域名会使用不同的 tls 证书,就需要一个机制 (SNI)在 tls 会话完全建立之前就让服务器知道客户端要访问哪个域名,因此按照标准 SNI 是明文传输的,由此暴露了客户端想要访问的域名。而后 cloudflare 等厂商开始提出对 SNI 字段加密的 ESNI/ECH 草案标准。firefox 支持这个标准,但仅可在 firefox 通过 DNS Over HTTPS 获取域名时方能起用。过去 dnscrypt-proxy 在本地表现为一个标准的明文 DNS,因此 firefox 通过它获取域名时不能启用 ESNI/ECH;而最近的 dnscrypt-proxy (自 2.0.34 版始)增加了在本地表现为 DNS Over HTTPS 服务器的功能,使得 firefox 配合 dnscrypt-proxy 使用时仍然可以启用 ESNI/ECH (只要服务器支持)进一步提高私密性。

1.生成所需的 localhost.pem 数字证书文件。

为 dnscrypt-proxy 生成一个用于 doh 服务的 localhost.pem 并让该文件能被 dnscrypt-proxy 利用。首先需要保证以下操作均在在用户目录下进行。

提示:可以找一个用户目录下容易记住的子目录进行操作。

调用命令:

$ openssl req -x509 -nodes -newkey rsa:2048 -days 5000 -sha256 -keyout localhost.pem -out localhost.pem

生成一个 localhost.pem 文件,然后弹出一些要求,这些要求均可以选择默认,回车即可。该命令能让生成的 localhost.pem 文件导出到当前所在的目录。

使用 root 权限将该文件复制到 /etc/dnscrypt-proxy 目录下,并配置所需的所有者和用户读写权限:

# cp localhost.pem /etc/dnscrypt-proxy

# chown root:root /etc/dnscrypt-proxy/localhost.pem

# chmod 644 /etc/dnscrypt-proxy/localhost.pem

2.在 dnscyrpt-proxy 的配置文件 ( /etc/dnscrypt-proxy/dnscrypt-proxy.toml )中添加如下内容:

doh_servers = true

[local_doh]

listen_addresses = ['127.0.0.1:3000']

path = "/dns-query"

cert_file = "localhost.pem"

cert\_key\_file = "localhost.pem"

以上内容是 dnscrypt-proxy 的 doh 的相关配置内容,其中 [local_doh] 需要与其他内容保持一定的空行,与 [local_doh] 有关的项目都需要放在 [local_doh] 下,项目和项目之间不空行。 [local_doh] 和其他章节都包含哪些内容,可参考配置参考文件( /usr/share/doc/dnscrypt-proxy/examples/example-dnscrypt-proxy.toml )。

注意:doh_servers = true 不是 [local_doh] 下的项目,不能放在 [local_doh] 下。

然后输入# systemctl restart dnscrypt-proxy重启 dnscrypt-proxy 。稍等几分钟待 dnscrypt-proxy 完全启动后,输入# journalctl -u dnscrypt-proxy查看 dnscrypt-proxy 是否能正常运行。如果不能正常运行,请检查上述操作过程中是否存在问题。

3.配置 firefox 浏览器的 doh 服务。在 firefox 浏览器的地址输入框内键入about:config,选择“确认风险并继续”后,在“搜索首选项名称”框内键入trr,然后,

  • network.trr.custom_urinetwork.trr.uri的值改为https://127.0.0.1:3000/dns-query
  • network.trr.mode的值改为23
  • network.dns.echconfig.enabled的值改为true
  • network.dns.use_https_rr_as_altsvc的值改为true
  • network.security.esni.enabled的值改为true

之后重启 firefox 浏览器。

4.重启后,在地址框键入https://localhost:3000/dns-query,并将此“站”使用的证书添加为例外,方可正常使用 dnscrypt-proxy 提供的 DNS Over HTTPS 服务器以获取域名。

提示:也可参考英文教程:https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Local-DoH 。这个 wiki 遗漏了一步:因为证书是自己随便生成的自签名证书,所以最后需要用 firefox 手动访问一下https://localhost:3000/dns-query并将此“站”使用的证书添加为例外,方可正常使用 dnscrypt-proxy 提供的 DNS Over HTTPS 服务器以获取域名(该步骤已在上述教程中描述)。

详细配置方法可参考此文

成功抵御住 DNS 污染后便可访问https://duckduckgo.com/,以及一系列仅受到 DNS 污染的网站。

四、配置匿名 dns 中继(Anonymized DNS Relay)

DNS 加密可以防止中间人记录和篡改 DNS 流量,但是用户和 DNS 解析器之间的通信行为依然能被第三方监视到,DNS 解析器也能获知用户的真实 IP。为了将通信 IP 匿名化,需要配置匿名 DNS 中继(Anonymized DNS Relay)。就像 tor 网络通过中继节点那样,匿名 DNS 解析器中继直接联系 DNS 解析器,而用户直接联系匿名 DNS 中继,匿名 DNS 中继虽然知道用户的真实 IP ,但是不知道用户的具体要求的 DNS 解析请求,只负责转发用户的加密 DNS 请求;真实的 DNS 解析器依然负责解析用户的 DNS 解析请求,但与它们直接通信的是匿名 DNS 中继,并不知道用户的真实 IP。dnscrypt-proxy 可以通过软件配置来让用户实现匿名 dns 中继功能。

将 anonymized dns 的有关配置内容:

[anonymized_dns]
  routes = [ { server_name='*', via=['*'] } ]

插入 dnscyrpt-proxy 的配置文件/etc/dnscrypt-proxy/dnscrypt-proxy.toml(置于全局配置与[local_doh]之间即可)。

然后修改配置文件中的[sources],将其替换为:

[sources]
  [sources.'public-resolvers']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md', 'https://ipv6.download.dnscrypt.info/resolvers-list/v3/public-resolvers.md', 'https://download.dnscrypt.net/resolvers-list/v3/public-resolvers.md']
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''

  [sources.'relays']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/relays.md', 'https://download.dnscrypt.info/resolvers-list/v3/relays.md', 'https://ipv6.download.dnscrypt.info/resolvers-list/v3/relays.md', 'https://download.dnscrypt.net/resolvers-list/v3/relays.md']
  cache_file = '/var/cache/dnscrypt-proxy/relays.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''

以保证能和中继节点正常通信。

最后,重新启动 dnscrypt-proxy:# systemctl restart dnscrypt-proxy,通过查看# journalctl -u dnscrypt-proxy的输出确认 dnscrypt-proxy 能够正常工作,否则请检查其配置文件。

提示:本节可参考https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Anonymized-DNS

由于在 Debian 中已经预置了专门的 sudo 组,普通用户想通过 sudo 使用 root 权限,只需要让自己成为 sudo 组的成员即可:

展开全文

首先在终端模拟器中切换到 root 用户:

$ su -l root

正确输入 root 用户口令后,即切换到 root 用户。

提示:绝大多数在终端下接受口令的程序都对口令没有任何回显,输入的口令不显示位数,这是正常现象。

切换到 root 用户后,输入并运行命令:

# usermod -aG sudo <要添加到 sudo 组的用户名>

注意:某一用户加入新组后需要重启计算机才能生效。

重启电脑后,建议检验一下 sudo 是否配置正常,可利用 sudo 命令输入一段需要调用 root 权限的命令,看看该命令是否能正常运行,如$ sudo apt update

MAC 地址(英語:Media Access Control Address),也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),在同一局域网内(如同一 WI-FI 网络内)大都能够通过每张网卡对应的唯一 MAC 地址来追踪你的设备。固定的 MAC 地址能被轻易地追踪到,所以应该定时进行更换,随机的 MAC 地址是一个好的选择。由于 MAC 地址一般只在局域网内使用,因此随机的 MAC 地址也不大会产生冲突。

展开全文

在 Debian 里,用户可以通过配置 NetworkManager 实现随机生成设备 MAC 地址。

调用命令# nano /etc/NetworkManager/conf.d/00-macrandomize.conf ,在 /etc/NetworkManager/conf.d/目录下创建一个名为 00-macrandomize.conf的文件。

00-macrandomize.conf 中写入:

[connection]

wifi.cloned-mac-address=random

保存退出后,重启 NetworkManager

# systemctl restart NetworkManager

最后,可以通过$ ip link命令查看 MAC 地址,如果两次连接同一局域网(可通过重启网络管理器、开启飞行模式等等多种方式实现局域网重连)所得的 MAC 地址不同,就算配置成功。

在 GNU/Linux 上所需软件可以:

  1. 通过集成的软件包管理系统直接从发行版的软件仓库自动下载安装,只需提供包名;
  2. 若软件仓库尚未收录,则可在安装开发依赖后,下载软件的源代码并编译、安装到系统中(建议安装到/usr/local以避免干扰软件包管理系统控制的/usr);
  3. 手动下载来源不明的二进制软件包后,调用低层软件包管理器安装(一般是使用私有操作系统的时期养成的坏习惯,极不推荐)。

展开全文

apt 是 debian GNU/Linux 的软件管理器,debian 的软件包获取、安装、卸载主要由它来完成。apt 的主要使用方法,可在终端内输入运行 $ apt –-help 查看。

提示:新立得软件管理器(软件包名synaptic)是 apt 的一个图形界面前端,用户如果还不熟悉终端模拟器下 apt 的操作命令,可暂且使用新立得软件管理器(软件包名synaptic)更新软件源,升级安装下载软件包。但软件源的基础配置工作仍然应当使用终端模拟器下的命令完成。

修改 apt 的软件源

Debian 以及其他 GNU/Linux 发行版本的软件安装都需要从限定的软件源中获得软件包,不同的软件源之间自由度可能不同,例如 Debian 将依赖私有库运行的自由软件收录进了 contrib 源中,将私有软件收录进了 non-free 源中,而其主源 main 则收录完全自由的软件。一般情况下,contrib 源和 non-free 源默认不开启,为了软件自由和信息安全,用户应尽可能不使用来自 contrib 源和 non-free 源的软件包。

不同的软件源之间的第二个不同是镜像站的不同。全世界范围内有很多自由软件的镜像站,例如在国内有多所高校和其他机构存在这种镜像站,如清华大学的镜像站 https://mirrors.tuna.tsinghua.edu.cn/debian ,中国科学技术大学的镜像站 https://mirrors.ustc.edu.cn/debian/ 和兰州大学的镜像站 https://mirror.lzu.edu.cn/debian/ ,此外尽管阿里巴巴、网易等互联网巨头也提供镜像站服务,但不推荐使用它们的镜像站。国内的镜像站中仅各个大学提供的是可靠的。

除了软件包自由度、软件包直接来自的镜像站的不同外,软件包本身版本差异也构成了软件源差异。Debian 软件源在软件版本上可分为稳定版(往往用某一稳定版自身的代号作为标记,如 debian 10 的代号(buster),测试版(testing),不稳定版(unstable)。

以上所述知识点在 apt 的软件源配置文件sources.list中有着明确的表现。

例如,在sources.list中一条软件源配置信息往往写成如下的格式:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main

其中,https://mirrors.tuna.tsinghua.edu.cn/debian/ 代表着该软件源是清华大学镜像站的软件源,testing 意味着该软件源是测试版软件源,main 则代表着它是 Debian 的主源而不是 contrib 源或 non-free 源。

Debian 稳定版的软件源往往不会有大的变化,Debian 10 的软件源不会自然而然地升级到 Debian 11,这就意味着 Debian 稳定版更新频率非常低且软件源更新所能带来的软件升级较小,仅当某一稳定版上的部分软件存在恶性 bug 或软件依赖关系存在问题时才会及时得到修复。但 Debian 提供提供测试版的安装映像文件,使用测试版的安装映像文件安装好的系统默认是测试版的源,而为了保证相关软件包较新,这些映像文件也会每周更新。可访问https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/下载不完整但体积比较小的 cd 映像文件,此时必须保持网络全程通畅才能完成安装操作;或者从https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/下载完整但体积较大的映像文件,此时选择全程离线安装或保持网络在线安装均可。请根据自身的网络条件自行选择。

为了更好地使用测试版的 Debian 软件源,降低因软件升级导致系统故障的可能性,我们需要严格设置软件源文件,软件源文件sources.list位于 /etc/apt (即 apt 的配置文件目录)。

1.调用命令# nano /etc/apt/sources.list编辑sources.list

例如,某份sources.list的内容:

#deb cdrom:[Debian GNU/Linux testing Bullseye - Official Snapshot amd64 DVD Binary-1 20201005-03:30]/ bullseye contrib main
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main
#deb https://security.debian.org/debian-security bullseye-security main contrib
#deb-src https://security.debian.org/debian-security bullseye-security main contrib
#deb http://deb.debian.org/debian/ bookworm-updates contrib
#deb http://deb.debian.org/debian/ bookworm-proposed-updates contrib

其中,# 开头的行并不作为配置信息参与程序运行,仅供编辑者查看,实际上是注释。那些开头没有 # 的行才是真正的配置内容。使用完整的 DVD 映像安装好 Debian GNU/Linux 后, deb cdrom:[Debian GNU/Linux testing _Bullseye_ - Official Snapshot amd64 DVD Binary-1 20201005-03:30]/ bullseye contrib main等 cdrom 本地软件源是启用的,我们需要首先将它们注释掉(在相关行的开头加 # )。

如果

deb https://security.debian.org/debian-security bullseye-security main contrib 
deb-src https://security.debian.org/debian-security bullseye-security main contrib

这类安全更新软件源未被注释,也应该注释掉,它们的存在有可能会影响到软件源的正常更新。

于是实际发挥作用的,就只剩下了

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 

等测试版的软件源。

观察 Debian 软件包迭代的顺序(不稳定版的软件包经过测试成为测试版软件包,测试版软件包再继续测试,最终成为稳定版软件包),我们不难发现不稳定版软件源是测试版软件源的上游。如果某不稳定版源的软件包未能及时进入测试版软件源,用户又恰巧在此时升级了软件,Debian 系统将很有可能受软件依赖关系冲突的影响而故障;同时,用户升级测试版软件时也可能出现某些软件的升级速度快于和它具有依赖关系的软件,如果在这种情况下升级,很有可能会造成依赖关系破损。因此,使用测试版软件源的同时也应该将不稳定版软件源和稳定版软件源也加到系统软件源中。

sources.list文件中添加不稳定版和稳定版的软件源:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ unstable main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ unstable main

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stable main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stable main

注意:同一镜像站的测试版软件源和不稳定版软件源应当同时列入sources.list中,因为不同镜像站之间在收录软件包的时候可能存在时间差,这就导致镜像站不同的不稳定版和测试版软件源软件源之间包的衔接可能存在问题。而案例里提供的所有软件源都来自于清华大学的镜像站。

保存退出进行接下来的操作。

2.不稳定版软件源更新速度最快,快于测试版软件源,但它“不稳定”,不应该作为最主要的软件源。为了让软件包主要来自测试版软件源而不是不稳定版,我们还需要设置软件源的优先级。

我们需要在/etc/apt/preferences.d目录下创建一个prioritize-testing# nano /etc/apt/preferences.d/prioritize-testing),并在文件中写入以下内容:

Package: * 
Pin: release a=unstable 
Pin-Priority: 800

Package: * 
Pin: release a=testing 
Pin-Priority: 900

保存退出。

该文件的配置信息可以保证测试版软件源的优先级高于不稳定版和稳定版。

提示:稳定版是测试版的下游软件源,本来就不新于 testing ,优先级天生就低,所以prioritize-testing中不必规定 stable 源的优先级。

为了让我们修改的配置生效,我们还需要主动使用 apt,调用 apt 的软件包列表更新命令

# apt update ,如果没有关于软件源的报错信息,在列表更新结束后就算完成了系统软件源的配置工作。

可以简单用于可移动存储。也可用于内置硬盘或分区。

展开全文

注意:在磁盘(分区)上部署块设备级加密前切记使用密码学级别的随机数据先行填充!如此一来在无法解密的情况下取证者便无法区分已用空间和可用空间,且在紧急时只要使用随机数据填充卷头以破坏主密钥便可安全地销毁数据。

1.进行准备工作。

进入系统安装向导,到配置磁盘步骤时,选“手动向导”。观察设备上已有的分区,不需要安装双系统的情况下,删除所有分区;如果安装双系统,则最好提前准备好空闲空间。

注意:请勿删除作为安装引导介质的u盘上的分区。

2.配置不加密的 boot 分区。

在空余空间在上面建立一个400MB左右的分区(ext4),用作boot 分区,挂载点为 /boot ,并设置挂载选项:user_xattrnodevnoexecnosuidrelatimenodiratime

提示:如果电脑上有固态硬盘可用,boot 分区应放在固态硬盘上并添加 discard 挂载选项。如 boot 分区内无 ext4 文件系统,则需要将其格式化为 ext4 文件系统。boot 分区不加密。

注意:在加密卷中的任何文件系统都不要开启 discard!开启 discard 会破坏加密卷的安全性!

3.建立加密物理卷。

建立一个大分区,设置用途为“加密物理卷”,密码句加密。之后返回分区主界面,点“配置加密卷”,应用已有的变化,选择刚生成的大分区,用作加密设备。详细配置加密选项,一般保持默认即可。此后,确认写入磁盘并配置加密卷。确认后再下一个界面选择“完成”。之后进入清除数据的过程,待数据抹除后,要求设置口令。为了达到较好的加密效果,口令不应设置过短。为了防止遗忘口令,可将口令先记在安全的地方。完成后,返回分区主界面,可以看到第一行#1 已经变成了刚创建的加密卷,点击进入该加密物理卷,在其中设置 lvm 物理卷。如果设备上有多个磁盘会被新系统使用,建议在每个磁盘上都建一个加密物理卷。

提示:如果这步操作正确,此时,加密卷将变成 /dev/mapper/xxx

4.在已建立的加密物理卷中建立加密的逻辑卷。

返回分区主界面,点“配置逻辑卷管理器”。进入后默认已经选中刚才设置好的 lvm 物理卷,此时需要在上面创建卷组,点击“创建卷组”,创建完毕后,进入刚创建的卷组,根据需要在其中添加逻辑卷,此处的“逻辑卷”用于替代磁盘分区。为了让系统能正常运行,至少需要建立三个逻辑卷对应三个系统分区:根目录分区( / )、家目录分区( /home )、交换分区(swap)。需要注意的是,逻辑卷不是分区,分区在物理上是连续的,但逻辑卷未必,物理卷内也不存在分区。此时建立的逻辑卷的功能就相当于无逻辑卷的情况下各分区的功能,此时为各逻辑卷分配的空间大小就是为各个用户所需目录的空间大小。各逻辑卷不必放在同一块硬盘上。有多块硬盘可用的情况下,家目录分区、交换分区可放在机械硬盘上,/boot 分区和根文件系统则可以放在固态硬盘上的逻辑卷中。分布在不同硬盘上的不同物理卷则存储在加密的 LUKS 之内。

加密物理卷的大部分空间都要给根目录分区和家目录分区。家目录主要存放用户可以随意修改的文件,用户自行准备的电子书、视频、音频等各种文件也会存在此处,建议分配较多空间给家目录分区。根目录则主要包含系统运行所必须的各种文件,也不应分配太小。所有可用于安装 GNU/Linux 系统空间的 10% 分给根目录分区,交换分区的大小可设为电脑内存容量的 1~1.5 倍。

建立好逻辑卷后,返回主页面,分别对创建出来的3个逻辑卷,配置分区用途、挂载选项以及挂载点等:(1)根目录分区的用途设置为 ext4 文件系统,挂载选项可选user_xattrnodiratime, relatime,挂载点为/;(2)家目录分区用途设置为 ext4 文件系统,挂载选项可选user_xattrnodiratimerelatimenodevnosuid,挂载点为 /home;(3)交换分区的用途设置为交换空间,无所谓挂载选项。交换分区无挂载点,也无可启动标志。完成所有物 理加密卷以及其下的所有卷组、逻辑卷的配置后,点击手动分区设置的主界面上的“完成分区并写入磁盘”,然后确认一下分区方案并确定,待读条完毕后,进行接下来的系统安装操作。

提示:每配置好一个分区可点击页面上的“分区设置完成”返回手动分区设置的主界面。

5.待系统安装流程完毕,引导程序提示可重启进入系统时,还要将tmpfs /media tmpfs nodev,size=1%,mode=0755 0 0写入目标系统的fstab中。

同时按住 ctrl 、alt 和 f3(f3以后的也可),进入其他的终端界面。先输入# chroot tagert,将当前用户环境的根目录改为即将完成安装的目标系统的根目录,接着输入#nano /etc/fstab,进入文件后,将tmpfs /media tmpfs nodev,size=1%,mode=0755 0 0写在fstab的文件底部。之后同时按住ctrlS键保存;再同时按住ctrlX键退出编辑。也可直接退出编辑并在退出前确认保存(软件会提示是否保存,按Y键 ,再按回车即可保存)。最后再同时住ctrlaltf2返回引导程序界面,之后根据提示重启进入系统。

提示:返回引导程序界面前,可以在当前界面中顺带完成随机 MAC 的配置,配置方法参考此文

至此,基于 luks 的 lvm 加密已经完成,应用全部操作。

初学者第一次使用 GNU/Linux 终端时,会看见这样一串文字 xxx@xxx:xxxx$ ,在它后面有光标闪烁,光标处可以输入命令,那这一串文字是什么含义呢?它们起到什么作用呢?

展开全文

光标之前的部分具有实际含义,它们被称为命令提示符,命令提示符号能提示使用者目前具体的用户环境。

命令提示符号的结构实际上是:

<user name>@<host name>:<working dir>$ 

@前为当前用户的用户名,@后的部分为 root 用户设置的主机名。

:后的内容为工作路径,即 shell 所在的当前目录。

$ 在终端里代表普通用户权限,普通用户只能修改自己用户目录里的文件,没有修改自己用户目录以外的文件的权力。# 代表 root 用户环境,root 用户能对当前的 GNU/Linux 做任何事情而不受限制。

提示:文本里的 # 用于行段注释和终端命令的 # 不是一回事。

GNU/Linux 操作系统中大部分命令(命令即可执行文件的名字名)在后面跟--help选项时能输出简要的帮助,man后面跟命令名给出该命令的详细手册。

注意:以下命令将只列出最基础的用法,详细用法请参考所需命令的详细手册。

展开全文

cd

“cd”的意思是“change directory”,即改变目录,输入$ cd (指定目录)用户将在终端下从当前目录跳转到指定目录。如 $ cd /etc/apt将使得用户在终端下跳转到/etc/apt目录。

一切无需调用 root 权限的命令的操作默认目录都是用户当前所在目录,如果不指定一个绝对路径(从根目录开始一直到所需目录、文件),路径将会以用户当前目录为起点(相对路径)。

如,前文提到的/etc/apt是绝对路径,而~/文档是相对路径。

cat

连接所有指定文件并将结果写到标准输出(默认直接输出到终端里),当指定文件仅有一个的时候,可以用来查看某文件的内容,如输入命令$ cat /etc/apt/sources.list,会在终端里输出/etc/apt/sources.list的内容。

当存在多个指定文件,将命令所写的顺序,将指定的多个文件拼接到一起输出。如有一个名为1.txt的文本文件里写有1,一个名为2.txt的文本文件里写有2,输入$ cat 1.txt 2.txt的输出结果为

1 2

grep

在每个<文件>中查找给定<模式>。 <模式>可以包括多个模式字符串(可以是文字),使用换行符进行分隔。

例如,输入

$grep 1 1.txt 

将在1.txt中抓取1,并输出在终端里。

nano

比较基础的终端下的文本编辑软件,以前文提到的1.txt为例,输入$ nano 1.txt将开始编辑1.txt,通过方向键移动光标到需要编辑的文字和行端。按住ctrl的同时按住O可修改文件名称并保存,按住ctrl的同时按住X可退出编辑。

find

在一个目录下查找文件(前提是执行者至少有读取该目录的权限)。无选项时会列出该目录下(所有子目录中)的所有文件,可用选项控制过滤条件或对每一个符合条件的文件执行命令,如输入:

$ find  /etc/apt

会显示/etc/apt下的所有当前用户可读取的目录、文件名称。

shred

用于完全破坏(粉碎)一个文件的内容,也可以由 root 用户对(代表)整个磁盘/分区(的文件)使用以破坏其内容。可以通过其选项控制破坏的模式或在破坏后删除文件。shred 本身不能递归处理目录中的文件,因此可配合 find 使用:

$ find <路径> -exec shred -u {} \;

——通过对该目录下(所有子目录中)的所有文件执行shred -u以粉碎后删除,之后可以删除该目录。

secure-delete软件包中的srm命令支持对目录递归粉碎。

apg

可用于生成随机但易于拼读的密码(口令),生成后如有必要可以选择用gpg加密保管(以构成一“密钥串”)。

pandoc

文档格式转换工具,常见用途为将 markdown 转换为 html,例如,在用当前目录下将一个名为xxx.md的 markdown 文本文件转换成 html 文件,输入

$ pandoc -f markdown -t html -o xxx.html  xxx.md

使用 GNU/Linux 的终端环境输入命令让系统执行时,用户会遇上很多特殊符号,它们往往具有实际含义,了解这些符号有助于学习使用 GNU/Linux 。

展开全文

(1) / 在一串目录路径里,最开端的(如果存在的话)代表根目录,之后的每一个 / 仅用来分割一级目录、二级目录、三级目录……以此类推。如/etc/apt这条目录路径,始端的 / 代表根目录,而etcapt之间的 / 仅仅用来分割两个目录,表明aptetc的子目录。

(2) ~ 是某用户的用户目录的简写,某用户的用户目录的全写是/home/某用户的用户名

(3) > 和 <, > 用于将一个命令的标准输出写入一个文件,< 用于将一个文件的内容作为一个命令的标准输入。如输入

$ find /etc/apt > example.txt 

find 的输出结果将写入当前目录的example.txt文件中,而不是输出到终端。

(4)| 用于将前一个命令的标准输出通过管道连接到后一个命令的标准输入,例如,输入

$ cat /etc/apt/sources.list|grep -i testing

grep 程序将在 sources.list 里抓取包含“testing”的行。

(5) 目录的路径中,. 被设定为指代某一目录本身,.. 则被设定为指代它的父目录

展开全文

一、基本概念

OpenPGP 协议与 PGP 、GPG 之间的关系

要了解 OpenPGP 协议加密工具如何使用,就需要先了解 OpenPGP 协议,而要了解 OpenPGP 协议,就需要了解什么是 PGP 。

PGP,全称 Pretty Good Privacy,是一款由 Phil Zimmermann 在1991年开发的加密程序,为数据通信提供了加密和验证功能,通常用于签名、加密和解密文本、电子邮件和文件。

PGP 被开发出来后不久便迅速被开发者上传至网络,引起了全世界范围内黑客的关注。但好景不长,1993年2月美国联邦政府以“未经许可出口军需品”为由调查 Phil Zimmermann(当时的美国出口法中将使用大于40位密钥的密码系统视为军需品),试图阻止 PGP 加密工具的在全世界范围内的传播。但 开发者Phil Zimmermann 以极具想象力的方法利用了美国版权法律的漏洞,将全部的源码印刷成书籍通过 MIT 出版社发行并运输到西欧,不久后西欧的黑客使用 OCR 技术将 PGP 的源代码重新编译(并最终通过分析其原理,写出了如今的自由的加密软件 GPG)。

到了1996年,由于 PGP 软件源代码已得到广泛传播,加上各界舆论压力,美国联邦政府初撤销了对 Zimmermann 和他的团队的诉讼。于是 Zimmermann 新成立一家名为 PGP Inc. 的公司开发新版本的 PGP。1997年7月,PGP Inc. 向 IETF 提议制定一项名为 OpenPGP 的统一的标准,IETF接受了该提议,并成立了 OpenPGP 工作组。而后 PGP 软件的版权则兜兜转转,最终于2010年被 Symantec Corp.(赛门铁克)以3亿美元收购。

简单概括:

PGP 是一款由 Phil Zimmermann 开发,最终被赛门铁克收购的私有软件。 OpenPGP 是基于 PGP 软件所衍生出的一种加密协议,定义了加密消息、签名、私钥和用于交换公钥的证书统一标准。 GPG(GnuPG)是符合 OpenPGP 标准的用于加密的自由软件,是 OpenPGP 的自由实现。

OpenPGP与对称/非对称加密

OpenPGP 协议支持对称加密和非对称加密。

在对称加密中,加密和解密使用同一个密钥,这样做加密解密速度快,但密钥也很容易泄漏。

非对称加密中,加密和解密使用不同的密钥,在 OpenPGP 协议下,用户使用两把具有对应关系的密钥组成的密钥对完成加解密操作(对应关系体现为通过某一把公钥生成的密文,需要用它对应的私钥才能解密,以及通过公钥无法推导得出私钥),其中用于加密的作为可以广泛传播的公钥,用于解密的作为仅用户自身持有的私钥。

由于对称加密算法比非对称加密算法的加密速度快很多,在实际应用中,我们通常使用对称加密算法加密数据,再用非对称加密算法加密前者的对称密钥(称会话密钥),这样做即拥有了对称加密的加密速度,又保障了会话密钥的安全性,在OpenPGP中亦是如此。

OpenPGP的数字签名

数字签名也是 OpenPGP 的重要功能,它与传统的字迹签名功能相似,即用来验证人员身份,避免他人冒充。但数字签名相对比起字迹签名,更严谨、更安全且极难仿冒。

OpenPGP 协议的数字签名用某位用户(以下简称为用户a)的私钥签名,公钥验证。其背后的原理是:用户a的私钥仅由其本人持有,那么持有该私钥的人就是用户a本人(此处不考虑用户a的私钥被第三方窃取的情况,这种情况属于社会工程学研究的范围,而非密码学),因此用该私钥产生的数字签名能用来证明用户a的真实身份。而用户a的私钥有对应的不可篡改的公钥,利用公钥即可验证数字签名的真伪型。

OpenPGP 的公钥发布与吊销证书

公钥用于加密,可以公开发布,用户既可以点对点只向部分其他用户传播公钥,也可以上传公钥到密钥服务器。用户可以为公钥设置 uid ,一般为电子邮件地址和其他名称。设置 uid 能方便其他用户的加密和检索公钥操作。

为了进一步保护用户的数据安全,OpenPGP 协议中的公钥往往默认包含有效期限,用户通过 OpenPGP 协议加密工具使用过期公钥加密信息时将会收到警告提示。用户可以事先生成用私钥签署的吊销证书,这样一旦私钥泄漏,用户即可将吊销证书发布出去以将对应的公钥吊销。对于长期不使用的密钥对,用户亦可即时使用私钥生成吊销证书吊销。

需要格外注意的是,如果你将公钥发布到密钥服务器,那么你将永远无法从密钥服务器上删除你的公钥信息,特别是公钥的 uid 中包含邮箱地址信息的情况,将会对个人信息安全造成威胁。尽管用户可以使用私钥生成吊销证书吊销服务器上的公钥,使公钥其显示“吊销”字样,但公钥所附带的标识信息却仍将保留在密钥服务器上。请务必谨慎上传公钥。

二、OpenPGP 协议的具体的自由软件实现

GPG 与其图形化前端 GPA

在 GNU/Linux 等 PC 操作系统中主流的 OpenPGP 协议的自由软件实现是命令行软件 GPG ,其基本操作可参考其官方中文指南

GPA 是 GPG 的图形化前端,通过图形化的界面让 GPG 的功能实现更为直观更容易学习。

注意:GPA 只是通过调用 GPG 来行使功能的图形化前端,如果系统中不存在 GPG, GPA 就无法单独发挥作用。

下面将介绍如何使用 GPA 完成最基本的操作。

1.生成密钥对

初次使用 GPA 需要首先生成密钥对。用户可选择顶边栏的“密钥(K)”,选择其中的“建立新密钥...(N)”。接着软件会提示您输入“您的名字”;输入后提示输入“您的电邮地址”;完成后提示“建立备份(b)”和“往后才进行(l)”,此处可根据个人实际情况决定。接着会提示输入密钥对保护口令,输入口令后电脑将自动计算生成密钥对。

注意:生成密钥对时提示的“您的名字”“您的电邮地址”仅仅作为密钥对的 uid 用,不必使用个人真实姓名/电子邮件地址。

提示:使用 gpg 可输入gpg --generate-key而后根据软件提示完成密钥对生成。

2.导出/导入公钥

导出公钥前,首先在“密钥管理器”里选中对应的密钥对/公钥,而后选择顶边栏的“密钥(K)”,选择其中的“导出密钥...(x)”,后根据软件提示将公钥文本保存到某个目录下,以便发送给其他人。也可选择“编辑(E)”-“复制©”,以拷贝的方式导出。

提示:使用 gpg 可输入gpg -a --export <需导出的公钥的 uid 或指纹的一部分> 直接在终端中以 ascii 的形式导出所需公钥。也可输入 gpg -o <名称随意>.gpg --export <需导出的公钥的 uid 或指纹的一部分>把以 ascii 的形式编写的公钥文本导出到文本文件中。不加-a选项也可以二进制的形式导出公钥到文件。二进制形式的文件(如 pdf 格式的文件)直接输出到终端里将是乱码,须加上-o <指定的文件名>,或利用重定向,将输出数据保存到文件。注意:-o选项需加在其他选项前。

导入公钥则需要首先取得对方的公钥,而后既可以直接选择“密钥(K)”-“导入密钥(I)”-所需的公钥直接导入。也可以打开所需的公钥文本,将公钥文本本身复制下来,选择“编辑(E)”-“粘贴(P)”导入。

提示:使用 gpg 可输入 gpg --import而后将公钥文本直接粘帖进来,连按两次 ctrl + D 导入。也可输入gpg --import <所需文件名>.asc指定所需导入的文件。

3.加密/解密

使用 GPA 加密信息可选择“窗口(W)”-“剪切板©”,而后在“剪切板”窗口里里输入所需加密的明文,接着在“剪切板”页面中选择“文件(F)”-“加密(E)”,选择所需的公钥,点“确定(O)”。

如果要加密的信息是文件,则可在 GPA 主界面里选择“窗口(W)”-“文件管理器(F)”,而后在“文件管理器”窗口里选择“文件(F)”-“打开(O)”,而后选择所需文件。选好所需文件后,选择“文件(F)”-“加密(E)”,选择所需公钥,点“确定(O)”。

提示:使用 gpg 可输入gpg -ae而后根据提示输入所需加密的公钥的 uid 以空白行结尾。然后将所需加密的明文粘贴进来,连按 ctrl + D ,直接在终端中以 ascii 的形式生成所需密文。也可在-ae选项前加上 -o <导出文件名>.asc选项,将密文导出到文件中。也可指定文件,如果 gpg -o <被加密文件名> -e <指定文件名>生成加密文件。

解密过程与加密过程类似。

可选择“窗口(W)”-“剪切板©”,而后在“剪切板”窗口里里输入所需解密的密文,接着在“剪切板”页面中选择“文件(F)”-“解密(D)”,输入私钥保护口令完成解密。

如果收到的是密件,可“窗口(W)”-“文件管理器(F)”,而后在“文件管理器”窗口里选择“文件(F)”-“打开(O)”,而后选择所需解密的密件。而后,选择“文件(F)”-“解密(D)”,输入私钥保护口令完成解密。

提示:使用 gpg 可输入gpg -d而后直接将密文粘贴进来,连按 ctrl + D ,输入私钥保护口令,直接在终端中输出明文。一次性可以粘贴进多份密文。也可输入gpg -d <指定文本密件名>将文本形成的密件中的密文解密后输出到终端。

4.签名/验证

使用 GPA 进行数字签名可选择“窗口(W)”-“剪切板©”,而后在“剪切板”窗口里里输入所需签名的文本,接着在“剪切板”页面中选择“文件(F)”-“签名(S)”,选择所需的私钥,点“确定(O)”。如果要为某份将要生成的密文签名,可在加密的同时进行签名,即输入文本后选择“文件(F)”-“加密(E)”,选择所需加密的公钥的同时,选中“签名(S)”,选择所需签名的私钥,点“确定(O)”。

如果为某份文件签名,可选择“窗口(W)”-“文件管理器(F)”,而后在“文件管理器”窗口里选择“文件(F)”-“打开(O)”,而后选择所需文件选好所需文件后,选择“文件(F)”-“签名(S)”,选择所需私钥,点“确定(O)”。

提示:使用 gpg 可输入gpg -as -u <所需私钥的uid或指纹>,输入需要签名的文本,连按 ctrl + D,将签名文本直接输出到终端里,也可加上-o <指定的文件名>将签名文本导出到文件中。也可以输入gpg -ase -u <用户的所需私钥的uid或指纹> -r <所需的对方的公钥的 uid 或指纹>,输入所需要加密、签名的文本,将附带了签名的密文输出到终端里,也可加上-o <指定的文件名>将签名文本导出到文件中。也可以输入gpg -o <被签名后的文件名> -s -u <用户的所需私钥的uid或指纹> <需要签名的文件名>,为一份文件签名。为一份文件加密、签名的操作不再赘述。

验证的过程与签名的过程类似。

使用 GPA 验证数字签名可选择“窗口(W)”-“剪切板©”,而后在“剪切板”窗口里里输入所需验签的文本,接着在“剪切板”页面中选择“文件(F)”-“验证(V)”,而后即可验证名。对于附带了签名的密文,也应该选择“文件(F)”-“验证(V)”,验证签名的同时解密密文。这一点是 GPA 的设计缺陷。

提示:使用 gpg 可在输入gpg -d后的解密的过程中验证签名,推荐解密时优先使用 gpg 工具。

通过 GPA 验证文件的签名,可选择“窗口(W)”-“文件管理器(F)”,而后在“文件管理器”窗口里选择“文件(F)”-“打开(O)”,而后选择所需文件选好所需文件后,选择“文件(F)”-“验证(V)”,即可验证。验证并解密密件的过程不再赘述。

5.进阶操作:导出/导入私钥

一般情况下,不建议您随意导出私钥,将私钥分布在不同的设备上,因为这样会增加您私钥泄漏的风险。但如果您确实有导出私钥的需要,您可以按照以下布置进行:

在 GPA 的主界面的“密钥管理器”里选择找到需要导出的密钥对,右键选择“备份(B)...”,而后选择要导出到的目录。

提示:使用 gpg 可输入gpg -a --export-secretkey,输入所需导出的私钥的口令,无需导出的私钥直接点击“取消”跳过即可。

导入私钥的方法与导入公钥的方法类似,不再赘述。

提示:如果非要进行跨设备导入/导出私钥的操作,建议对私钥文本/文件本身进行对称加密操作,在需要导入的设备上使用 OpenPGP 协议的软件在解密包含私钥的密文/密件的同时,即导入私钥,不应该让私钥以明文的形式保存在本地。

OpenKeychain

OpenKeychain 是一款安卓设备上的使用的 Openpgp 协议的加密软件,使用安卓设备时可以使用 OpenKeychain 来加解/密 OpenPGP 协议的密文。

1.生成密钥对

第一次使用时可在界面上选择“创建密钥”,输入用作 uid 的“全名或昵称”以及“电子邮件”,而后选择“创建密钥”,如无特殊要求,不建议上传公钥至密钥服务器。

提示:如果创建好密钥对后还想再创建其他密钥对,可以在 OpenKeychain 中点击右上角,选择“管理我的密钥”,再次选择“创建密钥”执行如上步骤。

2.导出/导入公钥

在 OpenKeychain 主界面中,选择需要导出的公钥,在需要导出公钥的密钥界面里,可以点击二维码图标,让其他用户通过扫描二维码取得您的公钥。您也可以在此界面上点击右上角,选择“更多密钥详情”,点击“分享”,在“分享密钥”的“分享到...”一栏里点击左侧图标直接通过其他软件分享,或者点击右侧图标复制公钥。

导入可点击 OpenKeychain 主界面的右下角的“+”,根据实际情况,选择“扫描二维码”,从“文件导入”,还是“搜索密钥”。

提示:在“从文件导入”的界面里,可点击右上角,选择“从剪贴板读取”,将复制的密钥文本导入其中。

3. 加密/解密、签名/验证

在 OpenKeychain 主界面,点击左上角,选择“加密/解密”,在此界面内,可根据实际情况选择“加密文件”“加密文本”,在“加密文件”“加密文本”的界面中可选择“签名密钥:”对将要加密的“文件”“文本”进行签名。

提示:OpenKeychain 不支持对明文签名。

在相同界面上,可选择“解密/验证”下的“从文件导入”或从“剪贴板导入”导入需要解密的密件或密文。

4.导出私钥

在 OpenKeychain 主界面中,选择需要导出私钥的密钥对,在需要导出私钥的密钥对界面里,点击右上角,选择“备份密钥”,而后软件将自动为私钥加密备份,用户需将软件自动生成的“备份密码”保存好,以便导入时用。而后用户需将“我已抄写了备份密码。如果没有密钥,我就不能从备份中恢复数据”选中。而后选择“分享备份”或者“保存备份”。

提示:从 OpenKeychain 将私钥导出后,可以将包含私钥的密件上传到电脑输入gpg -d <密件名>|gpg --import,而后输入备份密码,将私钥导入 gpg 。

在 OpenKeychain 中导入私钥到 OpenKeychain 的操作与导入公钥的操作类似,如果从包含了私钥的密件中导入私钥,也可以在“加密/解密”中选择“从文件导入”,在输入了口令后软件将提示导入私钥。