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/mbedTLS
。mbedTLS
就是改名后的 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 稳定版¶
先创建一个临时文件夹用于存放下载的安装文件,并作为编译目录,
$ mytmp=$(mktemp -d --tmpdir dislocker.XXXXXX)
下载 dislocker。开发版本可以从 GitHub 下载,稳定版本(目前是 0.5.2 0.6.1 0.7.1)可以从 HSC 下载。这个链接失效了,现在改用 GitHub 上的 master 版本。
$ wget https://github.com/Aorimn/dislocker/archive/master.zip -O $mytmp/dislocker.zip
这里 wget
使用 -O
指定保存的目标文件夹和文件名。如果只是想指定保存文件夹而不想改变文件名,则应该使用 -P
选项(-P ~/tmp
)。
然后解压,
$ unzip $mytmp/dislocker.zip -d $mytmp
然后就可以直接安装了,
$ cd $mytmp/dislocker-master $ cmake . && make && sudo make install
自动安装脚本¶
!#/bin/bash sudo zypper install gcc cmake make fuse-devel mbedtls-devel # sudo zypper install gcc cmake make fuse-devel mbedtls-devel ruby-devel /usr/bin/ruby mytmp=$(mktemp -d --tmpdir dislocker.XXXXXX) wget https://github.com/Aorimn/dislocker/archive/master.zip -O $mytmp/dislocker.zip unzip $mytmp/dislocker.zip -d $mytmp cd $mytmp/dislocker-master cmake . && 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
会提示目标文件夹不为空的警告。同时创建一个挂载点 /myencryptdisk
。
$ sudo mkdir /dislocker $ sudo mkdir /myencryptdisk
先用 disklocker
解密该分区(需要使用 root
帐户),并选用 /dislocker
为解密挂载点,
$ su # dislocker -u -v -V /dev/sdb1 -- /disklocker
按提示直接输入解密用的用户密码(user password)即可,不是 root 密码。其中 -u
表示使用用户设置的用户密码来解密。也可以用 -p
表示使用恢复密码(recovery password)解密。而 -V
指定要解密的分区的路径。-- /dislocker
表示将解密对象传递给 FUSE
并使用 /dislocker
文件夹作为解密文件挂载点。解密后对象访问的路径为 /dislocker/dislocker-file
。
然后使用系统的 mount
指令挂载解密后的文件,假设预先创建的挂载点为 /myencryptdisk
。(下面直接使用 root
帐户。)
# mount -o loop,rw /zdislocker/dislocker-file /myencryptdisk
这样就将该磁盘分区挂载为可读写的文件夹 /myencryptdisk
了。
可能是因为 openSUSE 的文件浏览器 Dolphin 的关系,也可能是因为这东西本来就是这么运作的,该分区挂载后在 Dolphin 左边栏显示为 Loop Device
,而不是挂载点的名称 myencryptdisk
,也不是该分区的卷标。不过 Dolphin 地址栏的路径是正确地显示为 /myencryptdisk
的。
用完之后取消挂载加密磁盘的顺序为(挂载点还是使用上面的例子,YMMV),
# sudo umount /myencryptdisk # sudo umount /zdislocker
已知问题¶
无法加载共享库¶
今天遇到一个错误,提示为,
dislocker: error while loading shared libraries: libmbedtls.so.9: cannot open share d object file: No such file or directory
原来是因为系统中的安装的 mbedtls-devel 升级了,所以 dislocker 找不到新的库文件。解决办法就是重新编译安装 disklocker。
更新说明¶
2018-03-01¶
有几天没使用 dislocker 了。今天要用了才发现不能用了,报错如上面提到过的类似。才知道多半是最近的 mbedtls 更新导致需要重新编译安装 dislocker 了。
然后就发现之前记录的 dislocker 的下载地址也失效了,只好改用 GitHub 上的链接。于是直接改用 master 版本了。这是修改上面的说明的原因。
本文是水景一页 openSUSE 初始化配置系列记录文章的一篇。©
本文发表于水景一页。永久链接:<http://cnzhx.net/blog/opensuse-tw-bitlocker/>。转载请保留此信息及相应链接。