openSUSE Tumbleweed 上读写 Windows BitLocker 加密磁盘

Windows 上的 BitLocker 提供了一种很便捷的加密磁盘的方式。用 BitLocker 来加密移动磁盘也是非常方便。但是由于 MS 的闭源政策,其它系统对 BitLocker 的支持就非常不方便了。幸好我们有 Aorimn 开发的解密 BitLocker 磁盘的工具 Dislocker。

下面记录了在 openSUSE Tumbleweed 上安装使用 Dislocker 的步骤。

安装 Dislocker

参考了 GitHub 上 Dislocker 页面install.md 里的介绍。

安装依赖包

根据说明,依赖包包括,

  • 编译器, gcc 或 clang
  • cmake (至少 2.6 版本)
  • make
  • FUSE 头文件
  • PolarSSL/mbedTLS 头文件
  • 可选:ruby 头文件

其中 gcc cmake make 一般系统中默认都安装了,不过再试试也没什么,

sudo zypper in gcc cmake make

然后是 FUSE 包,

sudo zypper in fuse-devel

最后是提供加密服务的 PolarSSL/mbedTLSmbedTLS https://tls.mbed.org/就是改名后的 PolarSSL。它们是一个东西。没有 mbedTLS 就安装 PolarSSL 试试看。在 openSUSE 安装源里的是 mbedTLS。直接安装,

sudo zypper in mbedTLS-devel

至于 Ruby 属于可选内容。如果安装时关联 Ruby,则安装后可以提供一个 dislocker-find 模块(一个 Ruby 脚本)用于在所有连接的硬盘中尝试寻找使用 BitLocker 加密的分区。所以如果不需要这个功能的话就不用安装 Ruby。如果要安装的话,

sudo zypper in ruby-devel /usr/bin/ruby

需要 /usr/bin/ruby 是因为在 RHEL 7 中的是 rubypick 而在 RHEL 6 或 5 中是 ruby

安装 dislocker 稳定版

下载 dislocker。开发版本可以从 GitHub 下载,稳定版本(目前是 0.5.2 0.6.1)可以从 HSC 下载。这里选用的是稳定版本。

wget http://www.hsc.fr/ressources/outils/dislocker/download/dislocker-0.6.1.tar.gz -O ~/tmp/dislocker.tar.gz

这里 wget 使用 -O 指定保存的目标文件夹和文件名。如果只是想指定保存文件夹而不想改变文件名,则应该使用 -P 选项(-P ~/tmp)。

然后解压,同样指定目标文件夹(-C 选项),并使用 --strip-components=1 来忽略掉压缩包里自带的文件夹(这是个带版本参数的文件夹),

tar -xf ~/tmp/dislocker.tar.gz -C ~/tmp/dislocker --strip-components=1

然后就可以直接安装了,

cd ~/tmp/dislocker
cmake .
make
sudo make install

自动安装脚本

!#/bin/bash
sudo zypper in gcc cmake make fuse-devel mbedTLS-devel
# sudo zypper in gcc cmake make fuse-devel mbedTLS-devel ruby-devel /usr/bin/ruby
mkdir -p tmp/dislocker
wget http://www.hsc.fr/ressources/outils/dislocker/download/dislocker-0.6.1.tar.gz -O tmp/dislocker.tar.gz
tar -xf tmp/dislocker.tar.gz -C tmp/dislocker --strip-components=1
cd tmp/dislocker
sudo cmake . && sudo make && sudo make install

挂载 BitLocker 加密的磁盘分区

插上带有 BitLocker 加密分区的磁盘,使用 fdisk 查看磁盘及分区信息。一般可以根据自己熟悉的该分区的容量区分出来。当然也可以用 dislocker-find 如果安装的时候使用了 Ruby 的话。

这里假设没有 dislocker-find,电脑只有一个硬盘,现在外接一个带两个分区的移动硬盘,其中一个容量为 500GB 的分区是 BitLocker 加密的。磁盘设备在 openSUSE 里使用 /dev/sdX(X 为 a-z 的小写字母)标识。所以本机内置磁盘为 /dev/sda,而外接移动硬盘为 /dev/sdb

sudo fdisk -l
Disk /dev/sdb: 931.5 GiB, 1000170586112 bytes, 1953458176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd2840axx

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1048586239 1048584192 500G 7 HPFS/NTFS/exFAT
/dev/sdb2 1048586240 1953454079 904867840 431.5G 7 HPFS/NTFS/exFAT

根据大小可以判断为 /dev/sdb1,即 /dev/sdb 的第一个分区。。

创建一个空文件夹来放置 dislocker 解密挂载点,以免使用现有文件夹时 disklocker 会提示目标文件夹不为空的警告。

mkdir /dislocker

先用 disklocker 解密该分区,并选用 /dislocker 为解密挂载点,

sudo dislocker -u -V /dev/sdb1 -- /disklocker

按提示直接输入解密用的用户密码(user password)即可,不是 root 密码。其中 -u 表示使用用户设置的用户密码来解密。也可以用 -p 表示使用恢复密码(recovery password)解密。而 -V 指定要解密的分区的路径。-- /dislocker 表示将解密对象传递给 FUSE 并使用 /dislocker 文件夹作为解密文件挂载点。解密后对象访问的路径为 /dislocker/dislocker-file

然后使用系统的 mount 指令挂载解密后的文件,假设预先创建的挂载点为 /myencryptdisk

sudo mkdir /myencryptdisk
sudo mount -o loop,rw /zdislocker/dislocker-file /myencryptdisk

这样就将该磁盘分区挂载为可读写的文件夹 /myencryptdisk 了。

可能是因为 openSUSE 的文件浏览器 Dolphin 的关系,也可能是因为这东西本来就是这么运作的,该分区挂载后在 Dolphin 左边栏显示为 Loop Device,而不是挂载点的名称 myencryptdisk,也不是该分区的卷标。不过 Dolphin 地址栏的路径是正确地显示为 /myencryptdisk 的。

已知问题

无法加载共享库

今天遇到一个错误,提示为,

dislocker: error while loading shared libraries: libmbedtls.so.9: cannot open share
d object file: No such file or directory

原来是因为系统中的安装的 mbedtls-devel 升级了,所以 dislocker 找不到新的库文件。解决办法就是重新编译安装 disklocker。

本文是水景一页 openSUSE 初始化配置系列记录文章的一篇。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/opensuse-tw-bitlocker/>。转载请保留此信息及相应链接。

雁过留声,人过留名

电子邮件地址不会被公开。 必填项已用*标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南