Hacker Federation
!hackerfederation
help-circle
rss
lemmy 教程
pin
百度贴吧也曾红极一时,国外的 reddit 也拥有庞大的用户群体。百度贴吧和 reddit 这种在用户讨论的话题的组织模式上相对去中心化的社区,很大程度上允许用户根据自己的需要自行创建讨论社区,于是它们都能吸引各种各样的爱好者,发展出各种各样的社区文化。所以尽管百度贴吧和 reddit 的服务器仍然是私有的集中制的,但却也是用户最为活跃,讨论内容最为丰富的社区(今天百度贴吧的凋敝并非贴吧的模式存在问题,而是国内的言论管制政策排斥去中心化的社区)。 那么话说回来,如果有这么一个讨论社区,不仅和百度贴吧、reddit 一样有着去中心化的用户讨论的组织模式,甚至其底层的服务器之间也是通过邦联制沟通起来的,它又会如何呢?这并不是一个畅想出来的赛博乌托邦,事实上类似的讨论社区已经出现并已获得了很大的发展,只是在国内还不够知名。这个讨论社区就是 lemmy 。 ## 邦联制在 lemmy 上的表现 那么我将如何“访问”lemmy 呢?是否需要下载什么 app?它的网址又是什么呢?别着急索要这些,因为你想要的那些东西在 lemmy 这里并不存在,或者说它们不会统一在一个网站或 app 里。 在 lemmy 内没有一个统一的“lemmy 首页”,每一个 lemmy 服务器都能通过浏览器访问,用户可以通过每一个 lemmy 服务器的网站浏览到这个 lemmy 服务器上的,以及其他 lemmy 服务器上的内容。比如目前最大的 lemmy 服务器是 lemmy.ml ,我们可以在浏览器里输入<https://lemmy.ml>打开它,点击“All”即可看到其他服务器上的内容。其他的服务器也有类似的界面,但具体会表现成什么样则由各个服务器的主人自行决定,比如虽然 lemmy.ml 是一个讨论内容综合的 lemmy 服务器,但规模略小于它的 lemmygrad.ml 就几乎只讨论左派有关的话题。 我们使用浏览器即可访问各 lemmy 社区,但部分开发者也照顾到了那些喜欢使用客户端(它们也通常被习惯性统称为“app”)的用户,在手机上,有[lemmur](https://f-droid.org/zh_Hans/packages/com.krawieck.lemmur)和[Jerboa for Lemmy](https://f-droid.org/zh_Hans/packages/com.jerboa/)两款 lemmy 客户端可用,它们均可在[f-droid](https://f-droid.org/)里下载。lemmur 客户端功能较为完善,而 Jearboa for Lemmy 则主打轻量级(安装包大小不足2.5MB)。 lemmy 的邦联制体现为各个服务器虽然能互联互通,但却又都是独立自主的,它们能通过 lemmy 这一个大的平台联系起来,但也能选择保持独立,不与其他服务器互联互认。而访问它们所使用的软件工具也同样不是专用的,用户完全可以选择自己喜欢的浏览器或 app 来访问这些 lemmy 服务器。 ## 找到 lemmy 服务器 没有一个统一的 lemmy 首页是否意味着我们只能道听途说地了解到具体的 lemmy 服务器,而很难高效地得到各个 lemmy 服务器的网址呢?当然不是这样。实际上互联网上有很多邦联制社交媒体的目录网站,其中大多收录了各种各样的邦联制社交媒体项目的各种实例,其中也包括 lemmy 。 在此我们首先推荐的是<https://fedidb.org/network>,在这个网站里我们可以找到诸如 mastodon、writefreely、peertube 在内的各种邦联制社交媒体的实例,我们只需要在“software”处将要找到的邦联制社交媒体类型由“ALL”改为“Lemmy”,即可精准找寻 lemmy 服务器。此外 lemmy 项目自身也提供了一个 lemmy 服务器的推荐页面<https://join-lemmy.org/instances>,虽然不如专门的邦联制社交媒体目录页搜集得多,但每一个推荐的服务器都列出了推荐理由,方便大家参考。 lemmy 的访问工具、服务器以及目录页各司其职,各自只负责好自己负责的事务,而不是像私有的社交媒体那样,集访问工具、服务器、目录页于一体,高度垄断不仅限制了它们的专业化水平(当然他们的目的是赚钱不是把服务打磨好),更方便了他们对用户为所欲为。 ## 注册 lemmy 帐号 如果我们不只要“看 lemmy ”,还要“发 lemmy ”,就需要找到一个 lemmy 服务器来注册帐号,遗憾的是虽然大部分 lemmy 服务器都支持注册,但那些用户最多、知名度最高的 lemmy 服务器,比如 lemmy.ml 、 lemmygrad.ml 往往限制新用户注册,用户不仅需要认真回答管理员设置的问题,还要等待管理员审核,审核通过才算注册成功,因此我们要想注册 lemmy 帐号应该首先不去考虑这些服务器。为了找到一个合适的 lemmy 服务器,我们可以利用前文提到的邦联社交媒体目录页和 lemmy 自身的推荐页。在 lemmy 推荐页<https://join-lemmy.org/instances>中十分简单,仅需选择那些写有“Join”而不是“Apply to Join”的服务器注册。或者在<https://fedidb.org/network>里仔细挑选 Lemmy 服务器。因为根据实际调查,在<https://fedidb.org/network>中为“Open Registration”的 lemmy 服务器包含那些注册十分麻烦,审核十分严格的服务器,而开启此选项甚至有可能将部分允许注册的 lemmy 服务器排除在外。但此目录的强项在于列出的 lemmy 服务器更多。 是要快速找到能便捷注册的服务器,还是希望能找到更多服务器。这个就看大家的取舍。 虽然用户必须要找一个特定的 lemmy 服务器注册帐号,但是只要其他 lemmy 服务器与用户注册帐号的服务器之间能互联互认,用户就能关注其他服务器的社区并在在其他 lemmy 服务器的社区里发表内容。 ## 创建和关注 lemmy 的社区 仅仅满足前文所列出的特点,只能说明 Lemmy 是邦联制的社交媒体,而要说到它类似于贴吧、reddit 的地方就得提到 lemmy 的社区。每一个 lemmy 服务器上都有各种各样的社区,除了那些服务器主人不允许用户自行创建社区的除外,用户可根据自己的需要在注册帐号的服务器上创建社区。需要注意的是,用户在哪个服务器上注册了帐号就只能在哪个服务器上创建社区,不能跨服务器创建社区,如用 lemmy.ml 的帐号在 lemmygrad.ml 上创建社区就是办不到的。 虽然跨服务器创建社区无法实现,但跨服务器关注社区、管理社区却没有问题——这一点才是 lemmy 作为自由的邦联制的“贴吧”的核心要点。但就目前来说,仍然不是随意拿出来两个服务器,其上的帐号都能互相关注对方服务器上的社区。这是因为某一服务器上的用户是否能关注另外一服务器上的社区,取决于这两个服务器之间的互联互认程度,如果它们的互认程度不高,就无法关注彼此的社区。 为了关注一个服务器上的社区,最简单粗暴的方法就是在这个社区所在的服务器上注册帐号来关注,但是正如前面所说的,不是所有的 lemmy 服务器都开放注册,也不是所有开放注册的 lemmy 服务器都容易注册,更别提有趣的社区很可能分散在不同的服务器上,为了关注这些社区分别在这些服务器上注册帐号,管理众多的 lemmy 帐号又提高了使用成本。 更为重要的是,如果用户为了关注某一社区就跑到社区所在的服务器上注册,一个两个用户如此,三个四个,乃至几万几十万的用户都如此,邦联制的社交媒体就将不复存在,而这个社区所在的服务器又成了一个集中制的社交媒体。害处从小的方面来说会让单一服务器不堪重负,大的方面来说就是促进新的私有社交媒体诞生。 因此无论是从便利性还是从正确性上来说,我们都不推荐您直接在您想关注的社区所在服务上直接注册帐号。 我们还是应当充分发挥邦联制的特点,把我们各自的帐号分散在不同的服务器上,避免在一个服务器上过度集中。 ## 验证不同 lemmy 服务器之间的互联互认 服务器和服务器之间互认关系的问题我们可以用一些小方法来验证。 比如您想知道某服务器是否能关注我们位于<https://exploding-heads.com/>上的[hackerfederation](https://exploding-heads.com/c/hackerfederation)社区,您可以输入如下的网址格式: 欲测试的服务器的地址/c/我们的社区名称@社区所在服务器,比如,您可以输入<https://community.hackliberty.org/c/hackerfederation@exploding-heads.com>来看看是否能从服务器<https://community.hackliberty.org/>访问到我们的社区,如果能访问,便可看到我们社区的内容,进而可以选择在这个服务器上注册自己的账号;如果不能访问,就会提示“404: couldnt_find_community”。比如访问<https://lemmy.ml/c/hackerfederation@exploding-heads.com>的结果就提示“404: couldnt_find_community”,这说明 lemmy.ml 上的帐号不能关注我们位于 exploding-heads.com 上的社区。 需要注意的是,在您当前的服务器而不是我们社区所在的服务器上输入的我们的社区的名称必须加上后缀 @exploding-heads.com ,此后缀意为我们名为“hackerfederation”的社区位于 exploding-heads.com 服务器上。而如果您不加此后缀,您当前的服务器会默认在当前服务器上找寻是否有名为“hackerfederation”的社区,无论是否能找到,都不可能是我们的社区。其他服务器上的其他社区也是如此,在此不再赘述。 虽然目前 lemmy 还不为中文用户所熟知,但我们相信,未来使用 lemmy 的中文用户会越来越多。由互联网管制所摧毁的整个中文互联网社群将在自由软件平台上重建。
3

cross-posted from: https://exploding-heads.com/post/61660 > The story you’re about to hear concerns the third-largest crypto-currency on the planet. It is a story of how a former Disney child-actor — a Jeffrey Epstein associate who was embroiled in an under-age sex scandal — bizarrely emerged as one of the world’s strangest crypto-currency moguls. It is the story that raises serious questions as to whether an entire cryptocurrency is a scam — effectively a private money-printer. > > And to top it all off, there is reason to believe that if this cryptocurrency is the scam that it appears to be, it will nonetheless be allowed to continue because of this particular cryptocurrency’s usefulness to intelligence agencies in funneling money to foreign rebel groups and jihadis with plausible deniability. > > USDT, or Tether, is what is known as a “stablecoin.” A stablecoin is a cryptocurrency that, instead of fluctuating in value, is intended to hold to a consistent price. Tether is a USD stablecoin — each Tether is supposed to be equal in value to one U.S. dollar. > > The inner workings of Tether remain remarkably opaque. New Tethers are supposed to only be minted, and added to the crypto ecosystem, when somebody gives Tether Limited dollars to create them. And if that’s how it all worked, Tether would be fine. > > But there is no evidence Tether actually works this way. We repeat: There is no proof that Tether stablecoins are backed by the store of tangible assets that is supposed to justify their value. > > Practically every crypto exchange supports USDT trade in some form. The makeup of Tether’s reserves and its inner workings are yet to be disclosed in clear detail. > > Still, the question of who exactly buys Tether directly from its parent company Bitfinex has remained unanswered since its inception way back in 2014. > > Earlier this year, Protos shed light on that mystery by reporting that just two companies, Alameda Research and Cumberland Global, were responsible for seeping roughly two-thirds of all Tether into the crypto ecosystem. > > As Protos reported in August, market makers Alameda Research (spearheaded by crypto billionaire Sam Bankman-Fried of FTX fame) and Cumberland Global (a subsidiary of trading giant DRW) are still the biggest fish in Tether markets. > > Together, Alameda and Cumberland received at least $60.3 billion in USDT across the time period analyzed, equal to around 55% of all outbound volume — ever. > > $49.2 billion (71%) of Alameda and Cumberland’s USDT was acquired in the past year alone, equal to about 60% of all Tether issued in that time. > > Tether sent almost $36.7 billion in USDT to Alameda Research. > > The company has been promising an audit since at least 2017. An audit is “likely months” away, said Paolo Ardoino, chief technology officer of Tether Holdings Ltd., which issues the tether coin that recently carried a market value of $68 billion. > > In 2017, when Tether’s total market cap was still under $1 billion, it needed a last-minute transfer of $382 million just to sly its way through a non-audit attestation of its assets.

在 LUKS 上部署 LVM (一种实现 GNU/Linux 全盘加密的设置)
> 译者注:本文摘自 arwiki 上[在 LUKS 上部署 LVM ](https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS)条目,起具体操作只适用于 Arch GNU/Linux,但其所述的基本原理是通用的,可以根据其基本原理结合其他版本的实际情况操作。 这是一个在加密分区的基础上部署 [LVM](https://wiki.archlinux.org/index.php/LVM) 而非其他途径部署的简易方法。(使用这种方法,)逻辑卷被合理地部署在了一个较大的加密区块设备里。因此,逻辑卷中的内容在加密的区块设备解锁前无法读取,底层逻辑卷结构在启动期间才接受扫描并挂载。 这是一个 LUKS 加密磁盘的布局案例: ![](https://exploding-heads.com/pictrs/image/8cc70a99-4799-48f4-9615-0d820e443432.png) ) 注意:当使用 `encrypt` 锚点时,这个方法将不能在多个磁盘上搭建逻辑卷;使用[sd-encrypt](https://wiki.archlinux.org/index.php/Sd-encrypt)或者查阅[dm-crypt/专项#为多分区修改 `encrypt` 锚点](https://wiki.archlinux.org/index.php/Dm-crypt/Specialties#Modifying_the_encrypt_hook_for_multiple_partitions) ) 提示:这是该设置的两种变体: ) ) - [dm-crypt/专项#使用分离的 LUKS 报头的加密系统](https://wiki.archlinux.org/index.php/Dm-crypt/Specialties#Encrypted_system_using_a_detached_LUKS_header)所提供的方法,通过在 USB 设备上的独立 LUKS 报头实现该设置,该方法可实现双因素身份认证。 ) -[dm-crypt/专项#使用在 USB 设备上分离的 LUKS 报头的加密系统](https://wiki.archlinux.org/index.php/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB)所提供的方法,通过使用 USB 设备上的独立的 LUKS 报头,加密的 `/boot` 分区,且所有密钥文件都在 USB 设备上,来实现该设置。 ## Preparing the disk ## 准备磁盘 在创建任何分区之前,你应该知晓安全擦除磁盘的相关方法及重要性,如 [dm-crypt/驱动器准备](https://wiki.archlinux.org/index.php/Dm-crypt/Drive_preparation)中所描述的那样。 ) 提示:当在 [GPT](https://wiki.archlinux.org/index.php/GPT) 磁盘上,使用为 BIOS 启动准备的 [GRUB](https://wiki.archlinux.org/index.php/GRUB) 启动器时,创建一个 [BIOS 启动分区](https://wiki.archlinux.org/index.php/BIOS_boot_partition)。 创建一个挂载点为 `/boot` 的分区,分区容量 200 MiB 以上。 ) 提示:UEFI 系统可以将 [EFI 系统分区](https://wiki.archlinux.org/index.php/EFI_system_partition) 用作`/boot` 。 创建一个随后将容纳加密容器的分区。 在“系统”分区创建一个 LUKS 加密容器。键入所需口令两次。 ``` # cryptsetup luksFormat /dev/sda1 ``` 更多可用的 cryptsetup 选项,参见 [LUKS 加密选项](https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode)。 打开加密容器: ``` # cryptsetup open /dev/sda1 cryptlvm ``` 加密容器现可已于 `/dev/mapper/cryptlvm` 中使用。 ## 准备逻辑卷 在处于解锁状态的 LUKS 容器之上创建一个物理卷。 ``` # pvcreate /dev/mapper/cryptlvm ``` 创建名为 `MyVolGroup` (或者其他任何你想取的名字),将先前创建的物理卷添加进来: ``` # vgcreate MyVolGroup /dev/mapper/cryptlvm ``` 在卷组中创建所有你所需的逻辑卷。 ``` # lvcreate -L 8G MyVolGroup -n swap # lvcreate -L 32G MyVolGroup -n root # lvcreate -l 100%FREE MyVolGroup -n home ``` 在每个逻辑卷上格式化你所需的文件系统: ``` # mkfs.ext4 /dev/MyVolGroup/root # mkfs.ext4 /dev/MyVolGroup/home # mkswap /dev/MyVolGroup/swap ``` 挂载你的文件系统: ``` # mount /dev/MyVolGroup/root /mnt # mkdir /mnt/home # mount /dev/MyVolGroup/home /mnt/home # swapon /dev/MyVolGroup/swap ``` ## 准备启动分区 启动器从 `/boot` 目录加载系统内核,[initramfs](https://wiki.archlinux.org/index.php/Initramfs),及其配置文件。在磁盘上任何可被启动器读取的文件系统都可以使用。 在为 `/boot` 提前规划好的分区里创建[文件系统](https://wiki.archlinux.org/index.php/Filesystem)。 ``` # mkfs.ext4 /dev/sdb1 ``` ) 提示:选择将 `/boot` 保持在某个 [EFI 系统分区](https://wiki.archlinux.org/index.php/EFI_system_partition) 时,推荐以如下方式格式化 ) ) ``` ) # mkfs.fat -F32 /dev/sdb1 ) ``` 创建 `/mnt/boot` 目录: ``` # mkdir /mnt/boot ``` 挂载启动分区到 `/mnt/boot`: ``` # mount /dev/sdb1 /mnt/boot ``` ## 配置 mkinitcpio 请确认 [lvm2](https://archlinux.org/packages/?name=lvm2) 包已[安装](https://wiki.archlinux.org/index.php/Install),然后在 [mkinitcpio.conf](https://wiki.archlinux.org/index.php/Mkinitcpio.conf) 添加锚点 `keyboard`、`encrypt`、`lvm` : ``` HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck) ``` 如果配合系统基本的 initramfs 使用 [sd-encrypt](https://wiki.archlinux.org/index.php/Sd-encrypt) 锚点,需要另外设置以下内容: ``` HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck) ``` 详情见 [dm-crypt/系统配置#mkinitcpio](https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#mkinitcpio) 。 ## 配置启动器 为了在启动时解锁加密的 root 分区,以下内核参数需要为启动器设置: ``` cryptdevice=UUID=device-UUID:cryptlvm root=/dev/MyVolGroup/root ``` 如果使用 [sd-encrypt](https://wiki.archlinux.org/index.php/Sd-encrypt) 锚点,以下参数也需另外设置: ``` rd.luks.name=device-UUID=cryptlvm root=/dev/MyVolGroup/root ``` `*device-UUID*` 是指 `/dev/sda1` 的 UUID。详情见[持久块设备命名](https://wiki.archlinux.org/index.php/Persistent_block_device_naming)。 如果使用 dracut ,你可能需要更多可延展的参数列表,尝试: ``` kernel_cmdline="rd.luks.uuid=luks-deviceUUID rd.lvm.lv=MyVolGroup/root rd.lvm.lv=MyVolGroup/swap root=/dev/mapper/MyVolGroup-root rootfstype=ext4 rootflags=rw,relatime" ``` 详情见 [dm-crypt/系统配置文件#启动器](https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#Boot_loader)

Thunderbird 邮箱客户端使用小提示
# Thunderbird 邮箱客户端使用小提示: ## 一、让 Thunderbird 通过 socks 代理服务器访问互联网 Thunderbird 可以使用 socks 网络代理服务,可点击界面左上方的“编辑”,再点击“首选项”进入首选项页面,往下滑动到“网络与磁盘空间”部分,点击“连接”下方的“设置”,选中“手动配置代理”,在 socks 主机一栏中,左一空格填入 socks 代理服务器的域名或 ip 地址,右一空格填入其端口号即可。 ## 二、在 Thunderbird 中使用 GnuPG 加密邮件 Thunderbird 有自己的 OPENPGP 支持,即 OPENPGP 密钥管理器(可在“工具”一栏下找到“ OPENPGP 密钥管理器”),但这个密钥管理器比起 GnuPG 来说有很多不足,不仅能实现的 OPENPGP 功能比起 GnuPG 来说非常有限,而且由于 Thunderbird 本身是网络应用,可能直接受到网络攻击,造成私钥泄露,使用 Thunderbird 自带的 OPENPGP 密钥管理器存在安全风险。因此可以考虑在 Thunderbird 中调用 GnuPG 来实现邮件加密。调用步骤如下: 1. 编辑相关首选项,让软件本身允许调用 GnuPG。进入“首选项”,在“常规”界面中下滑页面到页面最底部,点击“配置编辑器”,之后点击“我了解此风险”开始编辑,我们要编辑的首选项名称为“mail.OPENPGP.allow\_external\_gnupg”可通过“配置编辑器”内的搜索功能搜索所需首选项,然后双击所需首选项,来将“mail.OPENPGP.allow\_external\_gnupg”的值改为 true。 2. 配置用户邮箱的本地配置。有两种进入帐户设置界面的方法:I.点击编辑一栏下的“帐户设置”;II.在主界面左边栏的邮箱帐户列表里在相应的用户邮箱地址上敲击鼠标右键,选择“设置”。进入帐户设置界面后,点击“端到端加密”,之后点击“添加密钥”,选择使用“通过 GnuPG 使用您的外部密钥”,外部密钥 ID 为所用密钥对的指纹的后16位,输入的 ID 不要空格。 3. 导入一份所需的密钥对的公钥到 Thunderbird 自带的 OPENPGP 密钥管理器中。由于 Thunderbird 开发者故意设置的机制,要想在 Thunderbird 里使用 GnuPG 还需要将刚才已经调用的外部密钥的公钥导入一份到 Thunderbird 的 OPENPGP 密钥管理器中。通过 GnuPG 导出一份公钥,输入命令: `$gpg --export -a <你的公钥指纹>` ) ,可将所得内容拷贝进一个文件中,再通过Thunderbird 自带的 OPENPGP 密钥管理器中的文件导入功能导入公钥( OPENPGP 密钥管理器界面下的文件一栏中选择“从文件导入公钥),也可直接通过剪切版导入公钥(编辑一栏下选择“从剪切版导入密钥”)。 完成以上步骤后,即可使用 GnuPG 为使用 Thunderbird 客户端发送的邮件加密。需要注意的是,Thunderbird 默认情况下不开启邮件加密功能,需要用户手动开启,在邮件编辑发送界面里的“选项”一栏下,选中“要求加密”,才能开启邮件加密功能。 **注意:一般情况下,发送 OPENPGP 的加密邮件不应该对消息进行数字签名,滥用数字签名会损害保密性,造成信息泄密风险,只有遇上必须证明消息的发布来源时才考虑给邮件进行数字签名。“对此消息数字签名”选项和“要求加密”都在“选项”一栏中,大多数情况下都不要启用签名。**

>译自 <https://www.opentech.fund/news/studying-study-the-great-nation/> 。 ## 介绍 “学习强国”是中国共产党拿来作为教育工具的应用程序,它在今年*(2019年-译者注)*上半年成了应用商店中下载量最大的中国应用,中国政府声称其已拥有1亿多用户。“学习强国”的主要功能包括:查看新闻,阅读文章以及进行测验,测验分数会显示在排行榜上,供用户本人和同事查看。 近年来,中共利用数字媒体技术在社会的各个方面增强其意识形态存在,而该应用是具体表现之一。利用该应用,他们强迫其基层党员和其他普通公民学习中共教条和习近平思想。2019年4月,纽约时报的相关报道指出:该应用实际上跟踪并“占有用户的数据”,但该报道“不清楚政府对“学习强国”用户的追踪程度”。此外,中国政府近来声称,将利用“学习强国”作为学习和考试的平台,来考核新闻工作者,通过者才能更新其新闻证。此外,路透社等媒体透露,中国科技巨头阿里巴巴是中共在这一项目上的最大合作伙伴,他们和中宣部共同开发了“学习强国”应用程序。 <details> <summary>展开全文</summary> ## 审核及结果 考虑到以上情况,开源技术基金( OTF )的红队实验室([RedTeamLab](https://www.opentech.fund/labs/red-team-lab/))与“ [Cure53](https://cure53.de/)”一同深入该应用的源代码,寻出该应用的确切功能。 在深入过程中,“ Cure53 ”发现该应用程序的开发人员采用了反逆向技术[^1],隐藏该应用的源代码,限制外来审核者对该应用程序进行全面分析。不过好在我们仍收集到了足够的证据来编定[安全审查报告](https://cure53.de/analysis_report_sgn.pdf)。我们的审查重点落在了“安卓手机”*(即使用安卓操作系统的手机-译者注)*上,这是因为中国近 80% 的手机是“安卓手机”。 我们在2019年8月审查时发现“学习强国”存在以下可能有害于用户的问题: * 包含类后门代码,实质授予了软件用户手机的完全访问权限,并且无法得知该访问权限的具体使用情况; * 自动根据某个包含 960 种应用程序的清单扫描用户设备上的其他应用程序; * 故意在包含用户敏感数据的区域使用弱加密算法; * 每天收集发送包含大量用户数据和应用使用情况的日志。 ### 1-超级用户特权( Super user Privileges ) 该应用的访问权限很有问题,这是最为致命的一点。“ Cure53 ”发现“学习强国”包含类后门代码,该代码能够使程序以超级用户权限运行任何命令。所有程序包含有“后门”代码的都在有“ aliyun and alibaba ”值的程序命名空间( namespace )里,这表明相关程序包都由阿里巴巴创建维护。拥有超级用户特权将准许某人管理访问操作系统中的所有内容,并有能力修改操作系统。换句话说,超级用户特权的拥有者能对系统干任何事情,下载软件、修改文件和数据,甚至安装键盘监听程序[^2],都包括在内。 如果成功部署,相关程序代码将变成后门。然而我们所使用调查方法不允许我们进一步观察可能存在的其他后门利用的方式,因此我们无法理解为何一个应用程序会试图通过获取超级权限在用户手机上运行命令。 ### 2-扫描应用( Scanning Apps ) “学习强国”会根据一个包含960款应用的清单,主动扫描上运行的其他应用。这份清单包含各式各样的应用类型,包括且不限于 Tripadvisor 、 Airbnb 等旅行应用; WhatApp 、 KakaoTalk 、 FacebookMessenger 及 Skype 等聊天应用;百度地图、优步等导航应用;亚马逊 Kindle ;各种支付软件;甚至游戏《神庙逃亡》也包含其中。这看似微不足道,但却和“学习强国”的既定用途没有任何关系,这导致我们不得不猜测为何中共需要大量收集用户数据。 ### 3-故意设置的弱加密( Weak Encryption by Design ) 如同故意设置的一样,“学习强国”收集并发送海量个人用户数据的同时,该应用的安全性也因在涉及用户敏感隐私的区域使用弱加密算法变得更低,这些区域所存储的数据,包括且不限于用户的生物识别数据和通讯内容。Cure53 发现 DES[^3]等不安全的加密算法在阿里巴巴提供的程序包中广泛运用,这表明,阿里巴巴正主动参与削弱“学习强国”应用的安全性,增加其存在的泄密风险。这类加密算法只用不到一周的时间就可被暴力破解,潜在的第三者将轻而易举地获取这些信息。正如 Cure53 所指出那样,“这可以为潜在的第三者提供机会,在集中式数据库[^4]中随意收集、映现、分析用户的个人生物识别数据和私人通讯内容。” ### 4-详细的日志报告(DetailedLogReports) Cure53 同样发现该应用也收集 IMEI 号码(**每台设备独有**)信息、连接信息、应用的使用会话信息、用户位置信息等常规信息。这些信息一经记录,就会上传到阿里巴巴的 xuexi.cn (该应用的域(domain))。日志文件每日都会产生,这很有可能表明该应用每天都在收集并发送此类信息。一些信息可能同样发送到腾讯的服务器,因为 qq.com 的域也在接收这些信息。这些详尽的应用日志报告也发送给了其他公司企业,但联系到其他已发现的情况,这已然不能令人感到意外。 ## 结论 对于这个所谓的教育应用,或者说,学习游戏,“学习强国”拥有的实际功能远超其开发者——中宣部和阿里所说,并实际拥有其他应用所不可能拥有的访问权限。该应用除了大规模的用户隐私数据掠夺外,实际拥有的超级权限、能隐藏其主要功能的反逆向技术,在涉及用户敏感隐私信息的区域故意使用的弱加密算法,一切都提醒人们,其应当如何令人感到深忧以及需要何种程度的戒备。显而易见,当中共声称,“学习强国”是公民研究国家大正方针以及证明其忠诚度的工具时,这个应用的开发和维护者却反过来“研究”他们的公民。 [^1]:反逆向技术,泛指阻止研究者通过对应用本体的逆向分析进而倒推出应用的功能原理的各种技术手段。 [^2]:键盘监听(keylogger),是指在使用键盘者不知情的前提下以隐蔽方式记录其每次击键。有多种方式可以实现此目的,一般为通过木马程序实现。 [^3]:DES加密算法,于70年代早期出现的对称密钥加密块密码算法,由于其仅有的56位密钥过短,现已可以轻易破解。目前该算法的最快被暴力破解时间为22小时15分钟,这是2008年的记录。 [^4]:集中式数据库,指在单一场所存储数据及维护的数据库。此种数据库一损俱损。
1

https://send.vis.ee (2.5GB, 7 days) (maintainer, contact) https://send.zcyph.cc (20GB, 365 days) (maintainer, contact) https://send.turingpoint.de (8GB, 30 days) (contact) https://send.ephemeral.land (8GB, 28 days) https://send.mni.li (8GB, 15 days) https://send.monks.tools (5GB, 7 days) https://send.boblorange.net/ (5GB, 7 days) https://send.aurorabilisim.com (2.5GB, 7 days) (contact) https://nhanh.cloud (2GB, 30 days) https://send.datahoarder.dev (1GB, 1 day) (maintainer, contact) https://fileupload.ggc-project.de (2.5GB, 7 days) https://drop.chapril.org (1GB, 5 days) (contact) https://send.jeugdhulp.be (50MB, 10 days) (contact) https://files.psu.ru (16GB, 7 days) https://send.portailpro.net (10GB, 30 days) https://bytefile.de (5GB, 7 days) https://transfer.acted.org (5GB, 7 days)

私有即时通讯软件存在的问题(以微信为例子)
私有即时通讯软件目前已经形成了市场垄断,在中国的代表是腾迅开发的 QQ 和微信,它们几乎垄断了全国所有的市场份额。而垄断往往意味着排斥其他竞争对手,让用户无法用脚投票,只能仍由开发商压榨。微信就是其中的典型代表,原本打着简洁旗号的微信,到了如今成了一个臃肿不堪的应用,过大的硬盘和内存占用损耗着用户设备的寿命的同时,带来的冗余数据也容易藏污纳垢。 出于用户信息安全考虑,即时通讯应用本来不应该有社交媒体的功能,但各互联网寡头为了自己的垄断利益将它们开发的即时通讯软件逐渐社交媒体化,微信也不例外。如今微信公众号、小程序、朋友圈等“附属功能”已经成了气候,不成气候的视频号也被腾迅力推。这些社交媒体功能除了危害用户的信息安全外,也造成了功能冗余,而功能冗余造成的数据冗余又会进一步危害用户的信息安全。目前对于微信的恶意功能的研究还不算多,下面主要探讨微信公众号和微信的内存占用、空间占用的问题。 ### 微信在技术上对用户的侵犯 #### (1)微信公众号的短链接 微信会推送微信公众号的文章,而微信不仅能知道是否推送了,推送给了谁,还能知道被推送者到底看过什么推送内容。这在技术上并不难实现,很多网站也有这样的功能,但浏览器听用户的,可以屏蔽这样的功能,私有 app 作为阉割的浏览器被开发商掌握。为了进一步控制用户,微信公众号里的文章很难完全通过浏览器检索查看。 尽管单篇文章可以通过浏览器访问,但单篇文章的链接实际上都是特殊处理过的短链接,存在猫腻。我们通过技术手段还原了短链接,真实链接非常长。 例如,某篇微信公众号文章的短链接是<https://mp.weixin.qq.com/s/SkOhY4FeBS9nQDjOX_M_tA>,而它的真实链接却是<https://mp.weixin.qq.com/s?__biz=MjM5NDEwNzc0MQ==&mid=2650954082&idx=1&sn=21bd18b33a6267cb7fe86d119abb7907&chksm=bd7a21508a0da846024ea0e804b27ba33ca401abea58e7d951273324910ea151bd792f84a115&sessionid=0&scene=126&clicktime=1637736568&enterid=1637736568&ascene=3&devicetype=android-29&version=2700153a&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=CDKB3k%2BnO96VBJqXvKs6D%2B0%3D&pass_ticket=hYOueaHWr9qL2bDHc4Lc9hLTEMaOk18aJN7UJ%2BiJUjJZj%2BJK%2FFl%2F2bNu9u8v0q2z&wx_header=1> 夹杂的内容不少是用来访问供追踪器标记的,想要清理这些追踪标记十分困难。 #### (2)微信的内存占用和空间占用 微信会占用大量用户设备内存,而腾迅在中国垄断了即时通讯软件。这就导致 android 手机的内存变得越来越大,而腾迅的微信也能越来越占用用户内存。作为一款即时通讯软件,微信必须要不断进行网络链接才能正常使用,而大量占用内存,能让微信在用户的设备上长期后台联网运行,不断上传用户数据,下载可能监视用户的数据。 如果用户长时间高频率使用微信,就会被微信占用大量的存储空间。 测试员用一部微信占用了 1.85 GB 存储空间的手机做测试,检查用户可以自行删除的微信数据目录 `sdcard/android/data/com.tencent.mm`,发现其占用空间 354 MB,它的子目录里占用最高的是`MicroMsg`,足足占用了 308 MB。测试员检查`MicroMsg`,它的子目录里以用户识别码命名的目录,我们暂且称它为 xxx 目录,占用空间最大,占用了 148 MB。xxx 目录包含了大量用户在使用微信时不自觉下载到的图片、小视频等小文件,而这些小文件就是占用用户设备存储空间的大头。 `sdcard/android/data/com.tencent.mm/xlog`目录中则保存有大量正常读取的文本文件,它们以 .xlog 结尾。其余的目录下也有大量用户无法正常访问的文本文件。很显然,`sdcard/android/data/com.tencent.mm`的数据只占一小部分。 更多的数据被保存在`/data/data/com.tencent.mm` 中,用户如果不获取 root 权限便无法正常访问。测试员获取 root 权限后,检查 `/data/data/com.tencent.mm` 目录,发现它占用了 1.46 GB空间,与 `sdcard/android/data/com.tencent.mm`占用的空间大小之和差不多便是全部 1.85 GB。`/data/data/com.tencent.mm` 中空间占用最大的子目录也同样叫`MicroMsg`,它占用了大约 699 MB 的空间。此处的`MicroMsg`里的子目录名称与`/sdcard/android/com.tencent.mm/MicroMsg`的相似。此外,它也同样有一个以用户识别码命名的目录,但这里的识别码与`sdcard/android/data/com.tencent.mm/MicroMsg`里的不同。我们暂且称它为 yyy 目录,yyy 目录有 172 MB。其余子目录大多和小程序及其他微信组件有关,如`app_xwalk_-1`等目录和“微信运动”有关。 yyy 目录下包含的子目录名称也类似于 xxx 的子目录名称,也同样包含大量用户不自觉下载到的小文件。比起 xxx 目录,yyy 目录中有很多文本文件,但都无法正常读取。这些文本文件一般都很小,往往不足 1 kb,但有几个很大,例如一个名为`EnMicroMsg.db`有 40.39 MB,几乎占了整个 yyy 目录大小的1/4,疑似是记录用户聊天数据的;还有一个叫`FTS5IndexMicroMsg_enceypt.db`的,看似是某种目录文件,但也有 6.98 MB。 微信用户数据中包含的大量小文件占用了大量存储空间,它们不能被用户以容易的方式清理,这本就是在浪费用户的存储空间。而这些小文件本身如果被大量收集后进行数据库比对,本就能窃取到大量用户数据。何况微信的用户数据里还存在那么多用户无法自行解读的文本文件,我们完全有理由相信,这些用户无法自行解读的文本数据是“脏数据”,藏着腾迅不可告人的秘密。它们随着微信一次次后台访问网络而被上传到腾迅的服务器。 ### 微信泛滥的原因 微信的泛滥是智能手机普及以后的事情,当时腾迅已经拥有了当时中国最大(如今第二)的即时通讯软件 QQ。但功能花里胡哨的 QQ 对于那些不会打字,甚至完全不识字的中老年人来说,使用门槛不算低,于是腾迅打着简洁的旗号开发了微信。为了让中老年人支持微信,微信利用了当时话费和短信费较高的情况,一上来便打着取代电话、短信的旗号,用手机号注册。腾迅本来就垄断了国内的即时通讯,而随着中老年人开始普遍使用微信,微信在中国的普及度甚至达到了90%。 这种在某一国的即时通讯垄断程度是连 whatsapp 、instgram 也望尘莫及的,而垄断程度足够高了,自然就具有排他性了,用户无法用脚投票就只能忍受腾迅的盘剥。

session 使用指南
## 前言:加密的即时通讯软件 现如今提到加密聊天软件,大家往往就是那么几款,比较火热的有 telegram ,以及在国内也有一些使用者的 signal 。但是遗憾的是,这两款加密聊天软件都已经被 GFW 屏蔽,使用他们通讯必须用 shadowsocks 之类的代理服务才行,这又会增加新的风险。而从 telegram 和 signal 本身而谈,它们的设计也同样问题重重: telegram 的问题: 1. 使用手机号注册; 2. 聊天内容加密的加密协议仅是密码学爱好者的发明,缺乏严格的对抗测试记录。 signal 的加密协议倒是靠谱多了,它的开发者最先提出了 axolotl 协议(后改名为 signal protocol),如今已是相当主流的加密协议,是用于 xmpp 的 omemo 加密协议的基础。 但是 signal 本身同样存在严重问题: 1. 和 telegram 一样需要手机号注册; 2. 其运营公司提倡用 signal 取代短信,甚至电话功能(和微信运营者当年的措辞如出一辙),运营目的可疑。 我们在一众即时通讯软件里最推荐使用[ xmpp 协议的各种即时通讯软件](https://exploding-heads.com/post/59879),它们分散在不同的服务器上,使用 xmpp 协议串联起来,用上 otr 、omemo 等加密协议能让聊天信息分散且无法被监视者解析。 但是要熟练地用好 xmpp 的邦联制特性,需要花时间学习信息技术知识,毕竟现代信息技术、密码学都是严密的科学、精密的武器,想用好它们需要下功夫,我们也建议您在信息技术方面多下点功夫。 但假如您一时间忙于工作,无法拿出足够的空闲时间和精力来认真学习这些技术,却需要立刻掌握一些加密技术来武装自己的话,我们依然推荐您使用这款入门级的加密聊天软件,相信它会成为您走上使用现代信息技术和密码学保护自己的隐私安全的垫脚石。 ## session 即时通讯 session 是一款自由的、适配多种系统、多种平台的加密即时聊天软件,它正是由 signal 改造而来,且和其他加密聊天软件相比,平衡了上手难度和安全性,有四大优势: 一、注册简单。session 注册极其简单,用户仅需安装好客户端使用便可以随机地取得自己的 session id,之后便可长期使用此 ID,无需繁琐的注册、验证流程。 二、帐号访问安全且不容易受阻断。所有的 session 用户在登录时,都将通过类似于 tor 网络的多节点(洋葱路由)代理服务,连接到深藏幕后的 session 服务节点(不唯一),用户使用 session 等于获得了额外的“梯子”。 三、加密的端到端聊天。session 聊天的文字内容使用已经得到广泛运用的加密协议 signal protocol,加密后的文本几乎无法破解。 四、文件传输功能安全且易用。并非所有的聊天软件都有安全易用的文件传输功能,而 session 的文件传输功能使用了类似 firefox send 的技术,兼顾安全性与易用性。 下面就让我们来了解一下该如何取得 session 的安装包,以及具体的使用操作。 ### 一、下载安装 以下提供两种下载方法: 1. 通过 session 官网下载。session 在它的官网上提供了[下载链接](https://getsession.org/download),其中既包括 Android 版和 ios 版等手机客户端安装包,也包括 GNU/Linux版、Macos 版和 Windows 版等电脑版客户端安装包。 2. 通过 f-droid 下载。只提供自由软件的应用商店 f-droid 中可以下载 session,访问 f-droid 网页版的[session 下载页面](https://f-droid.org/en/packages/network.loki.messenger.fdroid/)即可下载。 >提示:**安卓用户**可以下载并常备一个 [f-droid](https://f-droid.org),便于随时更新 session ,以及获取各类功能各异且安全可靠的自由软件。 >注意(**仅对于 ios 用户**): 尽管 app store 中包含 session ,但苹果官方对中国大陆用户“锁区”,不“翻墙”,将无法下载安装 session 。 >建议(**仅对于 ios 用户**):如果您不想为安装 session 而专门去找各种“翻墙”代理服务,我们还是建议您卖掉您的 iphone ,改用 android ——不过既然要换手机,不妨索性趁机买个能解锁引导器的,到手后解锁引导器并安装自由的 android 发行版(如 grapheneos、calyxos、lineageos 等)。 ### 二、创建帐号及恢复帐号 现在我们以 session 的 android 客户端为例,来讲解该如何使用 session 。 1. 当您第一次打开 session 时,您将看到“创建 Session ID”和“继续使用您的Session ID”; >提示:“继续使用您的Session ID”下方的“关联设备”与“继续使用您的Session ID”将跳转到同一页面。 2. 我们选择“创建 Session ID”,软件将自动帮我们随机生成一个 Session ID,我们点击“继续”,然后为自己设置一个昵称,然后选择“慢速模式”; >提示:“快速模式”需要通过 Google 的通知服务器,而且该功能依赖于私有的函数库,因此已在 f-droid 提供的版本中剔除。 3. 注册好您的帐号以后,我们建议您立刻跟随提示,保存“恢复口令”。Session ID 的“恢复口令”都由一连串单词组成,是您再次登录或者在其他设备上登录您的 session 帐号的唯一凭证,请务必保存好。 >提示:您可以将“恢复口令”复制黏贴到别处保存成文件,如果您不信任手机上的文字编辑程序,您还可以将恢复口令抄写下来。 ### 三、添加好友 现在您可以添加联系人,开始与好友在 session 上的畅聊。 添加联系人的唯一方式就是知道对方的 Session ID。您需要获取好友的 Session ID。您可以选择当面获得,也可以从其他在线渠道取得对方的 Session ID。 但需要注意的是,Session ID 也为身份认证公钥的指纹,是验证 session 好友身份的最重要的凭证。因此如何取得 Session ID 将影响到您与您的好友之间帐号的认证与信任关系: 1. 对方当面向您提供了 Seession ID 。然后您与对方互相添加了好友,发送了消息。这种取得方式能证明对方使用的 Session ID 是可靠的。 2. 对方的 Session ID 由其他聊天软件、社交媒体上取得。在这种情况下则需要考虑对方是否为冒名顶替,并设法验证。 >提示:您可以选择多种认证方式:由你亲自核对过身份的 session 好友担保;和对方用验证过的加密邮箱、xmpp 信道交叉担保等等。 >注意:各种私有聊天软件上的通信,都不能算可信信道,您如果确实需要通过私有软件的信道发送或接收 session ID ,请务必仔细核实您或对方发出或接收的 Session ID ,同时小心您或对方的 Session ID 被私有软件厂商、政府以及其他试图窃取您隐私并伤害您的人窃取并加以利用。如果您不得不使用私有软件传递 Session ID,您可参看本节“附”。 >提示:为了方便大家使用“恢复口令”和 Session ID,session 客户端内置了扫码功能,在其他设备上登录您的 session 帐号也可以通过扫描当前设备上的 session 帐号的二维码实现,添加对方好友也是如此。 ### 附:如何通过私有聊天软件、社交媒体传播 Session ID #### 方法一:使用临时的 Session ID >注意:生成临时 Session ID 前,**请务必保存好“恢复口令”!** 1. 重置 session。使用 android 的“应用管理/清除存储空间”功能清除 session 客户端的用户文件,使客户端恢复到安装初始的状态; 2. 创建一个新的 Session ID 作为临时 Session ID; 3. 在私有软件上告诉对方此临时的 Session ID; 4. 等对方添加您为好友后,以其他方式验证身份,比如询问一些只有彼此知道的秘密。 5. 通过 session 的信道告诉对方,您的长期使用的 Session ID; 6. 再次重置 session ,使用“恢复口令”恢复长期的 Session ID,原本的临时 Session ID 便可废弃。 >提示:在此情形下,您还可以适当采用私有软件信道来作为辅助的验证信道,比如让对方在私有软件信道上发送一些消息,看看您是否能正常接收。 #### 方法二:使用 firefox send 我们可以使用 firefox send 将写有 Session ID 的文件传输给对方。 >提示:尽管 mozilla 放弃了 firefox send,但民间的开发者依旧在运维此项目,目前可用的非官方 firefox send 服务器可见:<https://gitlab.com/timvisee/send-instances>。 考虑到国内用户面临的糟糕的软件环境,私有浏览器对 firefox send 的糟糕的支持情况。在发给对方包含您 Session ID 的文件前,您需要验证对方是否可用 firefox send。验证方法如下: 1. 向对方指定一个 firefox send 服务器; 2. 要求对方上传任意一个文件到此 firefox send 服务器; 3. 要求对方得到下载链接后,自主下载此文件; 4. 如果对方能成功下载此文件,则说明可用您指定的 firefox send 服务器。 在验证对方的 firefox send 可用的情况下,您可以通过 firefox send 将写有您 Session ID 的文件发送给对方。 >注意:如果私有通信平台试图拦截,那么对方必然会下载失败——亦即,如果对方下载成功了,说明你成功瞒天过海了。 >注意:请务必让对方把 firefox send 的下载链接复制黏贴到浏览器里打开,而不能使用私有通信软件内置的浏览器。 提示:此方法可以和临时 Session ID 配合使用,即用 firefox send 传输包含临时 Session ID 的文件,以提高保密性。 ### 三、文件传输 在基本的文字聊天外,session 的文件传输功能同样值得关注。 session 文件传输的加密方式与传统的文字聊天并不相同,但也十分可靠。session 的文字聊天用的是已经得到广泛运用的 signal protocol,而发文件的加密方式则类似于 firefox send 之类的一次性网盘:对方下载文件后,文件就会在服务器上失效。 其基本流程是: 1. 选择要上传的文件; 2. 该文件在本地加密; 3. 加密后的文件上传到 session 的服务器; 4. 文件上传完成后将包含加密后文件地址的信息,与加密此文件的密钥同时通过聊天信道传给对方; 5. 对方 session 的服务器通信下载、解密并取得文件。 >注意:加密用的密钥本身直接通过加密的聊天信道传播,在传输的过程中也是加密的。 听起来似乎挺麻烦?步骤挺多?其实不是的,背后的原理解释起来虽然有点麻烦,但这些流程主要由程序自动完成,用户要做的只有选择并上传文件,和确认并下载文件,看着仿佛和其他带文件传输功能的聊天软件差不多。 session 的文件传输功能虽然在使用体验上类似于一般的私有聊天软件的文件传输功能,但它是**端到端**加密的,从我们发出方的客户端这里加密,到对方接收方手里才会解密,无论传输的过程中流转了多少中间服务器,这份文件都是以密件的形式存在的。如果有谁真的渗透进了这些中间服务器,取得了密文,他也没有密钥,也就谈不上取得这份文件。而密钥更是直接通过采用了 signal protocol 的信道直接传输,它本身在传输的过程中也是加密的。不过比较遗憾的是,目前通过 session 传输的文件大小不能超过 5MB 。 近来有传言政府将大力监控 airdrop ,他们很有可能做得到,因为苹果公司终究只是一个不敢让用户看看它的“核心科技”,反而也在试图窃取用户隐私的商业公司罢了,他们为他们自己的监视留下了后门,这些后门不能保证不被其他势力,比如政府利用。在 QQ、微信上传输文件倒也有可能会加密,但这种加密是用来防“友商”窃取腾讯机密的,不是用来保护用户隐私的。腾讯完完全全知道用户上传了什么,甚至会私自吞掉用户上传的文件。想想 QQ 群里有多少因为“违规”而无法下载的文件吧。 >注意:所谓语音聊天,本质上就是把录音发给对方,本质上也就是给对方发一个音频文件。session 语音聊天的加密方式和其他文件传输的加密方式并无本质区别。 ### 四、实时视频通话功能 session 的实时音视频通话功能主要是加密的 rtp (基于 udp )直连,其会话流量完全不通过文字聊天时要走的多节点代理服务,而是您和对方直接利用 signal protocol 和消息信道交换双方的 ip 地址,再与好友开展加密的音视频聊天。目前,session 的视频通话功能尚处于测试阶段,没有特殊要求不建议使用。 ### 五、传输 session 的安装包给好友 考虑到国内互联网的糟糕状况,我们不能保证每一个看到这篇文章的朋友都有能力直接从 session 的官网上下载到安装包。这里我们首先建议还是先[下载 f-droid](https://f-droid.org),然后再从 f-droid 里下载 session 。但 f-droid 同样受到了网络干扰,下载软件的状况时好时坏。因此还需要有其他办法传 session 的安装包给我们的朋友。 对于那些对自由软件以及自由的社交媒体(比如 mastodon 、lemmy)有一定了解的朋友,我们想让对方取得 session 的安装包将不会是难事,只要对方使用自由软件,我们和对方都将使用各种各样的自由软件完成传输。 但是对那些不知道且不使用自由软件,长期困在私有软件的怪圈里的朋友来说,我们就没法很好地使用自由软件传给他们安装包。那么我们又该怎么做呢? #### 线下认识的朋友 我们建议您使用面对面的传输方式将安装包交给对方: 1. 使用 otg 转接口搭配 u 盘、读卡器,将软件包交给对方。 2. 使用蓝牙将安装包传给对方(如果您不嫌传输速度慢)。 3. 使用 f-droid 的“附近”功能将自己已经安装好的 Session 分享给对方。 >注意:我们不建议您用私有的聊天软件直接把安装包传给对方,一方面我们不能保证安装包一定不会被私有软件厂商吞掉,一方面我们也不能保证对方得到的安装包没遭到篡改。 >注意:我们也不建议您使用私有软件厂商提供的面对面传输服务,例如之前提到的 airdrop,这些面对面传输服务,除了不安全的原因外,还很有可能各个厂商的互不兼容,白白浪费您的尝试时间。 #### 只在线上联系的朋友 我们将无法避免与对方使用私有的聊天软件或社交平台与对方联系。可选的方法有: 1. 尽可能首先考虑告诉对方下载方法,让对方自主下载安装包。 2. 如果对方不能自主下载,我们也尽量使用 firefox send 发给对方安装包。 3. 如果对方无法使用 firefox send ,也可以适当考虑用私有聊天软件的传输文件的方式传给对方安装包。 >提示:使用 firefox send 前请先验证对方是否可以使用 firefox send 。 >注意:请务必小心直接在私有聊天软件内发送 session 安装包带来的安全风险。 虽然 session 在添加好友方面等方面还有很多不足,但它平衡好了加密和使用门槛,一定能成为您走上加密通信道路的垫脚石。
1

XMPP加密通讯简明教程
## 一、什么是XMPP以及我们为什么要使用XMPP 简而言之,XMPP(又称为Jabber)是一种开放的互联网实时通讯协议。很多流行的聊天软件都是XMPP的封装应用,比如Google Hangout、Facebook Message、AOLChat、米聊、人人桌面和陌陌等。很多网络游戏的内部聊天用的也是XMPP协议。 与通常我们使用的集中式架构的通讯软件(如QQ、微信)不同,采取邦联式架构的XMPP客户端与服务器、服务器之间的通信使用的是公开而标准化的协议——这保证了任何人都可以参考这些标准开发出可以和系统中其他组件互操作的组件,甚至可以自己搭建服务器,为自己提供服务。通过XMPP所支持的“不留记录即时通讯协议(Off-the-Record Messaging,缩写为OTR,原理见网址),可以实现端到端通讯的加密,从而保障“私聊”的真正“私密”性质和通讯的安全性。 我们推广XMPP是希望推动这种开放的聊天协议和自由软件的使用,用XMPP配合OTR或OMEMO的端对端加密聊天,替代传统封闭的、有隐私泄漏风险的私权软件。 ## 二、安装客户端 支持 XMPP 的客户端有很多,这里仅选取经过 BLUG 成员测试挑选之后,最适合自由软件社群的。以下所列均为自由软件。 PC 客户端:推荐使用 Pidgin,GNU/Linux 发行版可通过包管理器搜索“pidgin”来安装,也可以从 https://pidgin.im 下载源码包编译安装。Windows 可前往 <https://pidgin.im> 网站下载二进制安装包,但 Windows 作为私有系统存在安全隐患,且Pidgin 的 otr 插件和消息反馈插件需要额外下载。最好的做法是把它换成 GNU/Linux,并在 GNU/Linux 安装 pidgin。Pidgin 支持通过额外插件拓展功能,实现完整 otr 加密,pidgin 使用的 otr 插件—— pidgin-otr 也可以在通过 GNU/Linux 发行版的包管理器下载安装。 移动客户端:Android 系统强烈推荐 blabber.im,支持 omemo 加密。可以直接访问 <https://f-droid.org/en/packages/de.pixart.messenger/> 下载 blabber.im, 这样只能安装到网页提供的 blabber.im 版本,不能及时更新 blabber.im。更推荐的做法是先下载 f-droid 的客户端,并通过 f-droid 客户端下载 blabber.im。首先前往 <https://f-droid.org> 下载安装 F-Droid 市场,然后更新包缓存,之后就可以搜索并安装 blabber.im 了,这样能及时更新 blabber.im。f-droid 是提供自由软件的自由的应用商店,强烈推荐在手机上安装一个。有余力的可以尝试使用 xabber 2.0.1 版本实现比较完整的 otr 功能。 对于苹果设备来说,iOS 系统上的 chatsecure 的 iOS 版勉强可用,macOS 也可暂且使用 Adium,可以从 <https://adium.im> 网站下载到。不过它们都不好用,往往会丢消息,只有越狱并设法禁止自动挂起网络才能彻底解决这个问题。烂苹果这个自诩比用户自己还懂用户的需求的暴君,通过一系列恶心的设计,把为 iOS 用户提供邦联化的即时通信服务变得难如登天,而这个工作本应仅仅需要一条持久 TCP 连接和客户端断线时重连。基本上想为 iOS 实现即时通信服务就必须在一定程度上放弃邦联化,开发者还必须接受烂苹果的盘剥才能保证其用户能及时收到消息,这使得 iOS 能用的即时通信服务基本上都是圆形监狱。因此最好的办法是换掉苹果设备。 ## 三、注册XMPP账号 常使用的还是通过客户端直接注册。注册时需要选定一台服务器、填写用户名和密码后,就可以得到形式和电子邮件地址类似——“用户名@服务器”的身份标识——JID了。 电脑端的 pidgin 使用同一个界面来操作“创建新账号”和“添加现有账号”的功能,仅仅通过类似“在服务器上创建此账号”的选项来区分。 手机端的 blabber.im 可以在初次登录时,在登录界面的右下角点击“创建新帐号”,然后写上用户名,并通过“选择您的 jabber 提供商”来选择服务器。如果 blabber.im 默认提供的注册服务器没有您喜欢的,也可以选中“使用自己的服务器”,然后在填写用户名处以“用户名@服务器”的格式填写您需要的 JID 实现注册。密码需要在下一界面填写。 互联网上有很多开放的 XMPP 服务, 在正式尝试在服务器上注册帐号之前建议用 xmpp 观测站服务(<https://xmpp.net/> 和 <https://check.messaging.one/> )检查一下服务器的特性,然后顺着 xmpp 观测站服务提供的 xmpp 服务器官网链接在官网上注册。 不建议在少数几个服务器上扎堆,这样会丧失邦联制的优势,容易被针对封锁服务器,同时信息大规模泄漏的风险也会更大。 ## 四、基本设置及登录使用 ###(1)blabber.im 的使用 **登录** 初次登录时,在登录界面的右下角点击“我已有帐号”,然后输入 JID 和密码后点击下一步,昵称和头像设置可保持默认。登录如果失败,请检查JID是否完整,一个完整的JID应是 xxx@xxx,例如 suibianjugelizi@dismal.de ,检查登录时是否正确输入。 **设置** 需要在“开始会话”界面(左上角会显示这四个字),点击右上角的三个竖点,找到“设置”。 blabber.im 设置中建议进行的操作有: I.打开“专家模式”中的“启用多个账户”; II.打开“专家模式”中的“使用 DNSSEC 验证主机名”; III.关闭“安全和数据保护”中的“显示位置预览”; IV.打开“用户界面”里的“彩色名称显示对方状态”(如果不选择“隐藏联系人”)。 如果您已经“启用多个帐号”,那么点击右上角的三个竖点,会出现“管理账户”,在“管理账户”界面,点击右上角带“+”的小人进入一个新界面,以“用户名@服务器”的格式填写您需要的 JID ,输入您需要的密码,选中或不选中“在服务器上注册新账户”,可进行注册或者多用户登录。 ### (2)pidgin pidgin 使用插件架构支持各种协议及其扩展,将插件文件(主体部分为动态链接库)放入插件所在的目录(pidgin 的安装目录下的一个叫 plugins 的子目录),重新启动程序,即可在“工具”菜单下的“插件”对话框中启用并配置。 使用pidgin之前,需要先安装两个插件: **OTR 插件** 用于实现上文所述的 OTR 加密协议。 GNU/Linux 可可以在通过 GNU/Linux 发行版的包管理器下载安装 pidgin-otr 。 windows 可下载 <https://otr.cypherpunks.ca/index.php#downloads> 中的 <https://otr.cypherpunks.ca/binaries/windows/pidgin-otr-4.0.2.zip> ,并将其全部内容放入 pidgin 的插件目录,插件名为 Off-the-Record Messaging,有额外选项。 **消息反馈插件** 用于得知消息成功送达对方(以及成功解密,在使用 OTR时),启用后成功送达的消息后面会出现对勾。 遗憾的是 Debian 的软件源中并未收录 pidgin-xmpp-receipts 插件,最好的方法是通过源代码从头编译它。 先通过 GNU/Linux 发行版的包管理器下载安装 git,然后打开终端模拟器,输入`$ git clone https://github.com/noonien-d/pidgin-xmpp-receipts`获得 pidgin-xmpp-receipts 的源代码。之后输入`$ cd pidgin-xmpp-receipts`,进入源代码所在的目录。然后输入`$cat README.md`,会显示 pidgin-xmpp-recipts 的编译和安装流程: ``` pidgin-xmpp-receipts ==================== This pidgin-plugin implements xmpp message delivery receipts ([XEP-0184 v1.2](https://xmpp.org/extensions/xep-0184.html)). When no delivering confirmation is displayed, it is also possible that the receiver doesn't support the extension. Compiling --------- To compile the plugin, run > $ make You will need pidgin development packages (link in ubuntu: libpurple-dev and pidgin-dev). Installation ------------ To copy the extension to your personal plugin folder (~/.purple/plugins) run: > $ make install Now you may activate the extension within the pidgin settings. ``` 认真阅读 READ.md ,严格按照它的提示进行安装操作。 对于 Debian GNU/Linux 用户来说,需要先检查是否安装了 libpurple-dev 和 pidgin-dev ,不安装它们后续的编译工作将无法完成。在确认安装了 libpurple-dev 和 pidgin-dev 的情况下,按照 READ.md 的操作,先输入`$ make`,后输入`$ make install` 即可完成 pidgin-xmpp-recipts 插件的安装操作。 当然也可从可信的渠道得到编译过的 pidgin-xmpp-recipts.so 二进制文件,将它放入 ~/.purple/plugins 中,注意 .purple 是隐藏目录。 windows 可下载 https://app.assembla.com/spaces/pidgin-xmpp-receipts/documents 中的 xmpp-receipts.dll 放入 pidgin 的插件目录即可,插件名为 XMPP Receipts,无额外选项。 **pidgin 的登录** Pidgin 支持很多协议。如欲添加 xmpp 账号,请在“管理账号”对话框中点“添加”,“协议”选 xmpp、“用户名”填@之前的部分,“域”填@之后的部分,再输入密码。 注册新账号和添加已有账号靠下方的“在服务器上创建此账号”选项区分。 **设置** 强烈建议将账户配置的“高级”选项卡中的“连接安全性”选项设置为“需要加密”。并启用上述两个插件。 ### 添加好友和聊天 在最基本的情况下,知道对方的 JID 就可以和对方用 XMPP 通信了,当然更方便的做法是将对方添加为自己的联系人。不过对方有可能不在线,因此你往往需要向对方提出申请,让他的客户端主动告知你他的在线状态(虽然大部分客户端都可以在将对方添加为联系人时自动向对方提出申请,同时自动向对方启用告知自身的在线状态,但还是有少数场景需要手动提出申请)。 聊天时,在 pidgin 上,请在开启 OTR 插件后,于聊天页面最上面一栏最右侧点击小人头像启动私密聊天。blabber.im 的 omemo 加密是默认开启的。 注意,pidgin 上的 OTR 启用后,默认的自动聊天记录归档会对该会话禁用(可通过插件的选项配置)。如仍需对该会话归档,请使用“对话”菜单中的“另存为”功能。 加密聊天建立后,还可以通过保密问题或直接验证指纹的方式对对方身份进行验证。

块设备级加密(以 LVM_on_LUKS 为例)
可以简单用于可移动存储。也可用于内置硬盘或分区。 >注意:在磁盘(分区)上部署块设备级加密前切记使用密码学级别的随机数据先行填充!如此一来在无法解密的情况下取证者便无法区分已用空间和可用空间,且在紧急时只要使用随机数据填充卷头以破坏主密钥便可安全地销毁数据。 ## 1.进行准备工作。 进入系统安装向导,到配置磁盘步骤时,选“手动向导”。观察设备上已有的分区,不需要安装双系统的情况下,删除所有分区;如果安装双系统,则最好提前准备好空闲空间。 >注意:请勿删除作为安装引导介质的u盘上的分区。 ## 2.配置不加密的 boot 分区。 在空余空间在上面建立一个400MB左右的分区(ext4),用作` boot 分区`,挂载点为 `/boot` ,并设置挂载选项:`user_xattr`、`nodev`、`noexec`、`nosuid`、`relatime`、`nodiratime`。 >提示:如果电脑上有固态硬盘可用,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_xattr`、`nodiratime`, `relatime`,挂载点为`/`;(2)家目录分区用途设置为 ext4 文件系统,挂载选项可选`user_xattr`、`nodiratime`、`relatime`、`nodev`、`nosuid`,挂载点为 `/home`;(3)交换分区的用途设置为交换空间,无所谓挂载选项。交换分区无挂载点,也无可启动标志。完成所有物 理加密卷以及其下的所有卷组、逻辑卷的配置后,点击手动分区设置的主界面上的“完成分区并写入磁盘”,然后确认一下分区方案并确定,待读条完毕后,进行接下来的系统安装操作。 >提示:每配置好一个分区可点击页面上的“分区设置完成”返回手动分区设置的主界面。 ## 5.待系统安装流程完毕,引导程序提示可重启进入系统时,还可以将`tmpfs /media tmpfs nodev,size=1%,mode=0755 0 0`写入目标系统的`fstab`中。 同时按住 ctrl 、alt 和 f3(f3以后的也可),进入其他的终端界面。先输入`# chroot target`,将当前用户环境的根目录改为即将完成安装的目标系统的根目录,接着输入`#nano /etc/fstab`,进入文件后,将`tmpfs /media tmpfs nodev,size=1%,mode=0755 0 0`写在`fstab`的文件底部。之后同时按住`ctrl`和`S`键保存;再同时按住`ctrl`和`X`键退出编辑。也可直接退出编辑并在退出前确认保存(软件会提示是否保存,按`Y`键 ,再按回车即可保存)。最后再同时住`ctrl``alt`和`f2`返回引导程序界面,之后根据提示重启进入系统。 >提示:返回引导程序界面前,可以在当前界面中顺带完成随机 MAC 的配置,配置方法参考[此文](https://paper.wf/cyberden/sui-ji-mac-di-zhi)。 至此,基于 luks 的 lvm 加密已经完成,应用全部操作。

Debian GNU/Linux 中设置随机 MAC 地址
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 地址不同,就算配置成功。 > 注意:如有随机化以太网卡(有线网卡)的 MAC 地址的需求,可在上述配置文件中追加 `ethernet.cloned-mac-address=random` 。

使用 dnscrypt-proxy 抵御网络污染
## 一、配置 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 能够正常工作,否则请检查其配置文件。 3. 安装 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.在 dnscrypt-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_uri`和`network.trr.uri`的值改为`https://127.0.0.1:3000/dns-query`; + 将`network.trr.mode`的值改为`2`或`3`; + 将`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 服务器以获取域名(该步骤已在上述教程中描述)。 详细配置方法可参考[此文](https://wiki.archlinux.org/index.php/Dnscrypt-proxy)。 成功抵御住 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>。

apt 软件管理器简易配置
在 GNU/Linux 上所需软件可以: 1. 通过集成的软件包管理系统直接从发行版的软件仓库自动下载安装,只需提供包名; 2. 若软件仓库尚未收录,则可在安装开发依赖后,下载软件的源代码并编译、安装到系统中(建议安装到`/usr/local`以避免干扰软件包管理系统控制的`/usr`); 3. 手动下载来源不明的二进制软件包后,调用低层软件包管理器安装(**一般是使用私有操作系统的时期养成的坏习惯,极不推荐**)。 apt 是 debian GNU/Linux 的高层软件包管理器,debian 的软件包获取、自动依赖解析、安装、卸载主要由它来完成(具体的安装、卸载工作由 dpkg 负责)。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`中,因为不同镜像站之间在收录软件包的时候可能存在时间差,这就导致镜像站不同的不稳定版和测试版软件源软件源之间包的衔接可能存在问题。而案例里提供的所有软件源都来自于清华大学的镜像站。 >注意:运行时实际起作用的软件源列表除包括 /etc/apt/sources.list 中的全部内容外,亦包括按文件名顺序依次串接 /etc/apt/sources.list.d 下的所有文件而得的内容,因此为了便于管理,可以将 /etc/apt/sources.list 的内容按一定规律拆分后置于 /etc/apt/sources.list.d 下。 保存退出进行接下来的操作。 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` ,如果没有关于软件源的报错信息,在列表更新结束后就算完成了系统软件源的配置工作。

sudo 的简易配置
由于在 Debian 中,在安装 sudo 之后已经预置了专门的 sudo 组,普通用户想通过 sudo 使用 root 权限,只需要让自己成为 sudo 组的成员即可: <details> <summary>展开全文</summary> 首先在终端模拟器中切换到 root 用户: ``` $ su -l root ``` 正确输入 root 用户口令后,即切换到 root 用户。 >提示:绝大多数在终端下接受口令的程序都对口令没有任何回显,输入的口令不显示位数,这是正常现象。 切换到 root 用户后,输入并运行命令: ``` # usermod -aG sudo <要添加到 sudo 组的用户名> ``` >注意:某一用户加入新组后需要重启计算机才能生效。 重启电脑后,建议检验一下 sudo 是否配置正常,可利用 sudo 命令输入一段需要调用 root 权限的命令,看看该命令是否能正常运行,如`$ sudo apt update`。

读懂命令提示符
初学者第一次使用 GNU/Linux 终端时,会看见这样一串文字 xxx@xxx:xxxx$ ,在它后面有光标闪烁,光标处可以输入命令,那这一串文字是什么含义呢?它们起到什么作用呢? 光标之前的部分具有实际含义,它们被称为命令提示符,命令提示符号能提示使用者目前具体的用户环境。 命令提示符号的结构实际上是: ``` <user name>@<host name>:<working dir>$ ``` `@`前为当前用户的用户名,`@`后的部分为 root 用户设置的主机名。 `:`后的内容为工作路径,即 shell 所在的当前目录。 `$` 在终端里代表普通用户权限,普通用户只能修改自己用户目录里的文件,没有修改自己用户目录以外的文件的权力。`#` 代表 `root` 用户环境,root 用户能对当前的 `GNU/Linux` 做任何事情而不受限制。 >提示:文本里的 `#` 用于行段注释和终端命令的 `#` 不是一回事。

GNU/Linux 终端里调用命令所需的常见符号
使用 GNU/Linux 的终端环境输入命令让系统执行时,用户会遇上很多特殊符号,它们往往具有实际含义,了解这些符号有助于学习使用 GNU/Linux 。 (1) `/` 在一串目录路径里,最开端的(如果存在的话)代表根目录,之后的每一个 `/` 仅用来分割一级目录、二级目录、三级目录……以此类推。如`/etc/apt`这条目录路径,始端的 `/` 代表根目录,而`etc`和`apt`之间的 `/` 仅仅用来分割两个目录,表明`apt`是`etc`的子目录。 (2) `~` 是某用户的用户目录的简写,某用户的用户目录的全写是`/home/某用户的用户名`,亦可见于环境变量 HOME 的内容。 (3) > 和 <, > 用于将一个命令的标准输出写入一个文件,< 用于将一个文件的内容作为一个命令的标准输入。如输入 ``` $ find /etc/apt > example.txt ``` find 的输出结果将写入当前目录的`example.txt`文件中,而不是输出到终端。 (4)`|` 用于将前一个命令的标准输出通过管道连接到后一个命令的标准输入,例如,输入 ``` $ cat /etc/apt/sources.list|grep -i testing ``` grep 程序将在 sources.list 里抓取包含“testing”的行。 (5) 目录的路径中,`.` 被设定为指代某一目录本身,`..` 则被设定为指代它的父目录

GNU/Linux 下的基础命令和重要命令
GNU(包括 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 基础
[上一篇](https://exploding-heads.com/post/59869),我们初步提到了 GNU/Linux ,从这一章开始,我们将开始讲解什么是GNU/Linux,以及如何安装并使用它,在安装并使用 GNU/Linux 之前,先让我们了解一下GNU/Linux到底是什么。 首先,先了解一下 GNU 和 Linux 分别是什么。 简单说来,GNU 是理查德·斯托曼等自由软件运动的发起者于20世纪八十年代开始研制的自由的操作系统。Linux 是林纳斯·托瓦兹(Linus Torvalds)于二十世纪九十年代与许多程序员共同开发的操作系统内核。 以上叙述可以看出,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,但是因为设计不科学,且 Windows 下的命令行工具不成体系(比如缺乏命令行下的 http 下载工具),因此很不好用。
1

自由操作系统的重要性——在谈论线上秘密工作前,我们应该遵守的大前提
各位读者看到这篇文章时,我猜你们一定会想这篇文章大概会介绍哪些加密通讯软件,哪些文件加密软件等等,但笔者并不打算一上来就介绍这些具体的应用软件,我想从操作系统谈起,因为没有自由的操作系统,就没有秘密的线上工作。 读者一定遇到或听说过这些情况:今天早上说要买零食,下午逛手机淘宝时就自动推荐了许多零食呢;随便在QQ危信上说了点“过激”的话,第二天警察就找上门了。 过去我们往往把这些现象归咎于某个app的过度索取权限,可是正如社会领域的问题一样,app们肆意妄为也得有一个根本背景,这就是私有操作系统,为什么这么说呢,因为一切应用都需要与操作系统进行交互。 各位一定在使用M$WIN(我们对windows系统的蔑称)10时遇到过以下问题:为什么我的系统不受我的控制自动“升级”了?为什么“我的电脑”里有那么多无法访问的文件?为什么系统越“升级”越不稳定,越使用效率越低? 你的机器并不像你想象得那样听你的话,计算机在安装私有操作系统的情况下,就已经是资本家对你的监视工具了,如果不仅安装了私有操作系统又充满了其他私有软件的话,它们将彻底受制于资本家,成为囚禁你让你无处可藏的圆形监狱。原因很简单,信息技术产品区别于传统产品的地方在于它们靠代码运行,而且靠代码就可以自动运行,因而也有完全脱离用户的掌控而自动运行的可能,只要具备运行条件(比如设备有电、联网等等),这就为监视行为打开了大门。 此外,私有操作系统与私有应用的开发者沆瀣一气,他们共享着剥削用户的利益,私有操作系统诱导用户下载安装私有应用,私有应用要求用户的操作系统也是私有的,举个例子,许多游戏应用只能在M$WIN下运行,而不是自由的操作系统,而M$WIN或者原厂android的应用商店及applestore又源源不断地向用户推荐着私有软件,而不是自由软件,这就使得用户无法接触到自由软件,更不用说自由软件哲学,进而只能囚禁在私有软件的牢笼里。 因而,才像我开头提到的那样:没有自由的操作系统,就没有秘密的线上工作。在私有操作系统下进行所谓秘密工作就如同在x光下穿着衣服不让人们看到你的骨骼,并且他们还不断诱惑你让体验ct、b超,进而套取你的数据,然而你在这些仪器下本质上已和裸体的结果并没有任何区别,更不用说源源不断泄漏着自己的信息这一点了。 那么有没有什么可以被我们利用的自由的操作系统呢?有的。在电脑端上有已经成熟的各GNU/Linux发行版本,在手机上有自由的android发行版本,例如lineageos、RRos等。离开这些自由的操作系统谈论秘密线上工作无异于是天方夜谭。 那么为什么说私有软件不可靠,而自由软件可靠呢?对于私有软件,其罪恶,其危害随意在互联网上搜索就可以找到一大堆,今天脸书泄漏个用户数据啊,明天各个原厂android又发现什么“漏洞”啊,后天微软向美国国家安全局提供用户数据啊,比比皆是,它们是资本家为了从用户那里榨取更多利益而监视甚至控制用户的禁脔。 而自由软件不同,它是自由软件运动,这一旨在实现“自由软件,自由社会”理念的伟大社会运动的产物。自由软件运动的领袖——理查德·斯托曼(Richard Stallman)及其他发起者为了实现用户对软件的绝对控制这一目标,提出了自由软件应该具备的四大自由: 用户可以按照自己的意愿使用的自由(自由之零);用户可以自由修改该软件使得能更好地为用户所用的自由。为此用户有权查看软件源代码(自由之一);用户有传播该软件副本的自由(自由之二);用户有传播用修改后的软件副本的自由(自由之三)。 由此,他们为这个世界编写了琳琅满目的自由软件。另外,为了利用美国的版权法来保护自由软件运动的成果,理查德·斯托曼先生和他的伙伴,编写制定了GPL软件发布协议,凡是在这一协议下发布的软件,必然符合这四大自由(自由许可协议并不只有GPL一种,但只有左版的许可协议才能保证其所有衍生作品仍然是自由的)。通过保障实现四大自由的GPL,软件的安全性被极大地保证了,恶意代码将无处可逃,因为它的源代码是开放的所有做的手脚都能被发现,而且都能被及时修改。 让我们说回操作系统。实际上,操作系统也是软件,但是它是最接近硬件,也就是所谓的“底层”的软件,一切应用软件都需要在操作系统之上运行,都需要与操作系统进行交互,这样实际上应用是受制于操作系统的。而且,如果系统千疮百孔,那又怎能保证恶意程序不去侵害用户的隐私呢?而M$WIN就是这样一款千疮百孔的操作系统,它文件系统混乱,只是简单地分了个C、D、F盘,每个盘下的软件可以随意安放,用户等级模糊,导致误操作很容易导致系统崩溃,而在这种乱七八糟的编排之下,很容易藏几个恶意程序。 GNU/Linux系统不同,根目录下每个目录都有具体的分工,管配置的就管配置,管硬件的就管硬件,管命令的就管命令,在这样井井有条的分类之下,植入恶意程序恶意代码的可能性就大大下降了。 当然自由只是隐私的前提,假如你自己不注重保护自己的隐私,那么秘密仍然也无法谈起,毕竟即使小声说话被他人听见也算泄密。 为此我们必须增强保密意识,意识到我们保护我们秘密的重要性。这在线下可能有些人做得已经很好了。比如,外出会关好家里的窗户并将房门反锁,不想让他们知道的事情就不告诉不靠谱的等等。可是,在线上,很多人只是感觉自己很保密,其实对于隐私的重视完全不足。比方说,有的人为了所谓财产“安全”,用移动支付代替现金支付,孰不知当你一笔一笔地用着移动支付的时候,移动支付软件便一笔一笔地记下你的交易记录,并将它们发送到资本家手中。先不说这样是否会泄露其他信息,单是你每一笔交易的情况都反馈这一点,资本家都完全可以通过大数据技术,分析出你的种种情况,比如贫富、喜好等等。而且别忘了移动支付都是实名的,这直接可以通过分析你的交易记录来判断你到底是个怎么样的人,这样下去,哪天你登录手机淘宝,人家给你推送“革命者应该使用的武器”,你也不要惊呼“事情败露了”。这对于其他领域也是一样的,依赖危信QQ等集中构架的即时通讯软件宣传革命无异于当着习近平的面说什么“我要刺杀你”,因为你的一言一行全部都收录在资本家的数据库里,要调起来很容易。 保密意识绝对不容半点妥协。为什么这么说?机密只有在它没有泄漏时才是机密,一旦泄漏就不再是了。私有的操作系统也是如此,还记得前面提到的M$WIN10,提到的种种怪异举动吗?既然M$WIN10不受你控制,那么自动升级一定是微软给它的指令,微软既然可以在你不许可的情况下就“升级”系统,那么为什么不可以在你不许可的情况下检查你磁盘上的文件,并把它们泄漏给政府呢?资本家都是追求利润的,今天他能为了利润狠心压榨工人,明天就能为了利润,贩卖你的数据。 杜绝资本家的窥视的唯一办法就是使用自由的操作系统,为什么?因为你能彻底地掌控他们,根据你自己的需要来调整他们,假使有漏洞你也可以自己想办法修补,不用考虑私有软件修补漏洞后,带来了更大的副作用。 保密并不是一个点,它是一个面,不,一个体,一个四面透风的房子谈不上保密,因为路人也可以看得一清二楚;一个遮风挡雨的房子才能保密,因为窗帘一拉谁也看不见了,只要你能保证外人进不来。对于我们来说,只是务求几个保密软件来实现秘密工作是不可能的,只有把保密换成一个体系,一个线上的从计算机到网络连接全是安全的情况下,保密才谈得上。 另外,在不彻底改变自己机器上的私有操作系统的基础上,而使用所谓“秘密软件”,这同时也是一种妥协,类似于改良主义的那种妥协,那种不触动资本主义根本只进行局部改良的妥协。我想作为一个立志成为革命者的人来说改良主义绝对不是一个需要考虑的选择,因为显而易见,妥协只对资本家有利。 尽快掌控自己手中的设备吧,离开了自由,秘密将荡然无存。

黑客邦联是一个主要面向中文使用者的自由软件和现代加密技术的交流社区。在这里主要讨论用于加密的自由软件及背后的技术。当然,我们也会适当讨论各类娱乐、游戏性质的自由软件。

Hacker Federation is a community for Free Software and modern cryptography mainly for users writing Chinese. We mainly talk about the Free Software for cryptography and the technology behind. Of course, the Free Software for entertainment and game will also be talked sometimes.

  • 2 users online
  • 3 users / day
  • 4 users / week
  • 4 users / month
  • 4 users / 6 months
  • 17 subscribers
  • 19 Posts
  • 5 Comments
  • Modlog