VeraCrypt
VeraCrypt 是 TrueCrypt 的一个分支,是一个免费开源的即时加密 (OTFE) 程序。它的一些功能包括
- 文件内的虚拟加密磁盘,可以像真实磁盘一样挂载。
- 整个硬盘分区或存储设备/介质的加密。
- 所有加密算法都使用 LRW 操作模式,对于存储加密,这种模式比具有可预测初始化向量的 CBC 模式更安全。
- 普通“外部”加密卷内的“隐藏卷”。在没有密码和/或密钥文件的情况下,隐藏卷无法与随机数据区分开来。
有关 TrueCrypt 与其他磁盘加密解决方案的比较的更多详细信息,请参阅 静态数据加密#比较表。
安装
truecrypt
创建新的 TrueCrypt 容器,之后可以使用 cryptsetup
打开它。使用 cryptsetup 访问 TrueCrypt 或 VeraCrypt 容器
cryptsetup 支持原生打开 VeraCrypt 和 TrueCrypt 容器,而无需 veracrypt 软件包。使用以下命令作为指南。
$ cryptsetup --type tcrypt open container-to-mount container-name
要挂载 VeraCrypt 容器,您必须将 --veracrypt
选项与 --type tcrypt
一起使用。如果使用自定义个人迭代乘数 (PIM),请使用 --veracrypt-query-pim
选项来提示输入 PIM。
将 container-to-mount
替换为您要打开的设备文件(在 /dev
下)或文件的路径。成功打开后,明文设备将显示为 /dev/mapper/container-name
,您可以像挂载任何普通设备一样 mount
它。
如果您使用密钥文件,请使用 --key-file
选项提供它们;要打开隐藏卷,请提供 --tcrypt-hidden
选项;对于以系统模式加密的分区或整个驱动器,请使用 --tcrypt-system
选项。
有关更多详细信息和所有支持的选项,请参阅 cryptsetup(8) § TCRYPT (TRUECRYPT AND VERACRYPT COMPATIBLE) EXTENSION。
使用 /etc/crypttab 自动挂载
自 206 版本起,systemd 支持在启动或运行时使用 /etc/crypttab
(自动)挂载 TrueCrypt 容器。
以下示例设置将在访问 /mnt/truecrypt-volume
时立即以系统加密模式挂载 /dev/sda2
,使用 systemd 的自动挂载逻辑。打开卷的密码在 /etc/volume.password
中给出。请注意,/etc/fstab
中给出的设备文件需要来自 /dev/mapper/
的文件,而不是例如来自 /dev/disk/by-uuid/
的文件,以便自动挂载逻辑生效。除此之外,您仍然可以使用来自 /dev/disk/
的设备文件名在 /etc/crypttab
中可靠地识别加密卷本身。
/etc/crypttab
truecrypt-volume /dev/sda2 /etc/volume.password tcrypt-system,noauto
对于标准 truecrypt 卷,请使用 tcrypt 而不是 tcrypt-system。对于隐藏卷,请使用 tcrypt-hidden。对于 veracrypt 卷,请将 tcrypt-veracrypt 与 tcrypt 一起使用。
/etc/fstab
/dev/mapper/truecrypt-volume /mnt/truecrypt-volume auto noauto,x-systemd.automount 0 0
您可以直接放入您的文件系统,而不是 auto,并放入常用的挂载选项。这对于 NTFS 非常有用,可以作为普通用户挂载。
有关更多详细信息和支持的选项,请参阅 crypttab(5)。
将文件加密为虚拟卷
以下说明将创建一个文件,该文件将充当虚拟文件系统,允许您挂载它并在加密文件中存储文件。这是一种存储敏感信息的便捷方法,例如财务数据或密码,可以将其存储在单个文件中,并可以从 Linux、Windows 或 Mac 访问。
要以交互方式创建新的 truecrypt 文件,请在终端中键入以下内容
$ veracrypt -t -c
按照说明操作,选择默认值,除非您知道自己在做什么
Volume type: 1) Normal 2) Hidden Select [1]: 1
Enter file or device path for new volume: /home/user/EncryptedFile.tc
Enter volume size (bytes - size/sizeK/sizeM/sizeG): 32M
Encryption algorithm: 1) AES 2) Blowfish 3) CAST5 4) Serpent 5) Triple DES 6) Twofish 7) AES-Twofish 8) AES-Twofish-Serpent 9) Serpent-AES 10) Serpent-Twofish-AES 11) Twofish-Serpent Select [1]: 1
Hash algorithm: 1) RIPEMD-160 2) SHA-1 3) Whirlpool Select [1]: 1
文件系统
1) None 2) FAT 3) Linux Ext2 4) Linux Ext3 5) Linux Ext4
选择 [2]
Enter password for new volume '/home/user/EncryptedFile.tc': ***************************** Re-enter password: *****************************
Enter keyfile path [none]:
Please type at least 320 randomly chosen characters and then press Enter:
Done: 32.00 MB Speed: 10.76 MB/s Left: 0:00:00 Volume created.
您现在可以将新的加密文件挂载到先前创建的目录
$ veracrypt -t /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
挂载后,您可以像在任何普通目录中一样在加密目录中复制或创建新文件。当您准备好重新加密内容并卸载目录时,请运行
$ veracrypt -t -d
同样,这将需要通过使用 sudo 获得管理员权限。运行后,检查要加密的文件是否确实不再在目录中。(可能想先尝试不重要的数据)如果它们仍然存在,请注意 rm 不会使数据无法恢复。
有关 truecrypt 的更多信息,请运行
$ man veracrypt
可以在命令行上传递多个选项,从而使自动化访问和创建变得简单。强烈建议阅读 man 页面。
加密物理卷
-t
标志在 CLI 模式下运行。如果您想使用密钥文件,请使用以下命令创建一个
veracrypt --create-keyfile /etc/disk.key
默认情况下,需要密码和密钥才能解锁卷。
在设备 /dev/sda1
中创建一个新卷
# veracrypt --volume-type=normal -c /dev/sda1
将卷映射到 /dev/mapper/truecrypt1
# veracrypt -N 1 /dev/sda1
如果此命令对您不起作用,请尝试此命令来映射卷
# veracrypt --filesystem=none --slot=1 /dev/sda1
只需像往常一样格式化磁盘,选择您喜欢的文件系统,但使用路径 /dev/mapper/truecrypt1
。例如,对于 ext4,请使用
# mkfs.ext4 /dev/mapper/truecrypt1
挂载卷
# mount /dev/mapper/truecrypt1 /media/disk
映射和挂载卷
# veracrypt /dev/sda1 /media/disk
卸载和取消映射卷
# veracrypt -u /dev/sda1
veracrypt-1.26.18
起,可能需要 --use-dummy-sudo-password
参数才能以具有 sudo 权限的非 root 用户身份挂载和卸载卷。更多信息请访问 [1]。首先,按照#加密物理卷中所述创建一个普通的外部卷。
将外部卷映射到 /dev/mapper/truecrypt1
# veracrypt -N 1 /dev/sda1
在外部卷的可用空间中创建一个隐藏的 truecrypt 卷
# veracrypt --type hidden -c /dev/sda1
您需要在此处使用与外部卷不同的密码和/或密钥文件。
取消映射外部 truecrypt 卷并映射隐藏卷
# veracrypt -d /dev/sda1 # veracrypt -N 1 /dev/sda1
只需使用您为隐藏卷选择的密码,TrueCrypt 将自动选择它,而不是外部卷。
在其上创建一个文件系统(如果您尚未创建),并挂载它
# mkfs.ext4 /dev/mapper/truecrypt1 # mount /dev/mapper/truecrypt1 /media/disk
映射和挂载带有隐藏的写保护的外部卷
veracrypt -P /dev/sda1 /media/disk
挂载特殊文件系统
--filesystem
标志似乎不再是必需的。在以下示例中,我想挂载 ntfs 卷,但 TrueCrypt 默认不使用 ntfs-3g(因此没有写入权限;在 6.1 版本中已检查)。以下命令对我有效
veracrypt --filesystem=ntfs-3g --mount /file/you/want/to/mount
您可能还希望挂载 ntfs 卷,而不在所有文件上使用执行标志
veracrypt --filesystem=ntfs-3g --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002
通过 fstab 挂载卷
首先,我们需要编写一个脚本来处理通过 fstab 完成的挂载方式。将以下内容放在 /usr/bin/mount.truecrypt
中
#!/bin/sh DEV="$1" MNTPT="$2" OPTIONS="" TCOPTIONS="" shift 3 IFS=',' for arg in $*; do case "$arg" in system) TCOPTIONS=(${TCOPTIONS[*]} --m=system);; fs*) TCOPTIONS=(${TCOPTIONS[*]} --filesystem=${arg#*=});; keyfiles*) TCOPTIONS=(${TCOPTIONS[*]} --keyfiles=${arg#*=});; password*) TCOPTIONS=(${TCOPTIONS[*]} --password=${arg#*=}) && echo "password triggered" ;; protect-hidden*) TCOPTIONS=(${TCOPTIONS[*]} --protect-hidden=${arg#*=});; *) OPTIONS="${OPTIONS}${arg},";; esac done /bin/veracrypt --text --non-interactive ${DEV} ${MNTPT} ${TCOPTIONS[*]} --fs-options="${OPTIONS%,*}"
也不要忘记使该文件可执行。
最后,将设备添加到 fstab,如下所示
/dev/sdb3 /mnt truecrypt fs=vfat,defaults 0 0
以普通用户身份挂载卷
TrueCrypt 需要 root 权限才能工作:此过程将允许普通用户使用它,并且还授予对已挂载卷的写入权限。
以下两种方法都需要 Sudo。在继续之前,请确保已配置它。
方法 1:添加 truecrypt 组
创建一个名为 truecrypt 的新组,并为其授予必要的权限。任何属于该组的用户都将能够使用 TrueCrypt。
# groupadd truecrypt
编辑 sudo 配置
# visudo
将以下行附加到 sudo 配置文件底部
# Users in the truecrypt group are allowed to run TrueCrypt as root. %truecrypt ALL=(root) NOPASSWD:/usr/bin/truecrypt
您现在可以将用户添加到 truecrypt 组
# gpasswd -M first_user,second_user,etc truecrypt
之后,您可以通过以下方式挂载设备
# veracrypt --mount /path/to/device /path/to/mountpoint
默认挂载点是 /media/truecrypt1
。通常,没有必要使用 --filesystem
标志显式指定设备的文件系统。
为 truecrypt 提供一些权限掩码绝对是合理的。否则,已挂载设备上的每个文件都将是可执行的。因此,您可以改为使用
# veracrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /PATH/TO/DEVICE /PATH/TO/MOUNTPOINT
并将此行添加到您的 bash 配置文件 ~/.bashrc
中作为别名
alias tc1='veracrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /path/to/device"" /path/to/mountpoint'
要挂载此特定设备,请使用
# tc1
作为普通用户。
方法 2:简化的 sudo
只需允许所需用户在没有密码的情况下运行 truecrypt
# visudo
附加以下内容
USERNAME ALL = (root) NOPASSWD:/usr/bin/veracrypt
或者,如果您使用 wheel 组
%wheel ALL = (root) NOPASSWD:/usr/bin/veracrypt
如果您作为普通用户在权限方面遇到任何困难,只需将 -u
标志添加到 truecrypt 挂载命令,例如
$ veracrypt -u /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
veracrypt-1.2.4-hotfix1
开始,NOPASSWD: /usr/bin/veracrypt
部分必须替换为 NOPASSWD: /usr/bin/veracrypt, /usr/bin/uptime
。更多信息请访问 FS#64431 和 [2]。登录时自动挂载
只需添加
$ veracrypt /home/user/Encrypted File.tc /home/user/Encrypted File Folder <<EOF password EOF
到您的启动程序中。不要使用 -p
开关,此方法更安全。否则,每个人都可以通过 ps 和类似工具查找密码,因为它在进程名称中! 来源
最新的 truecrypt 有几个后续问题。如果您安装了 expect,这将有效(假设没有密钥文件,也不希望保护隐藏卷),保存到具有 root 权限的文件中,并从 /etc/rc.local 调用
#! /bin/bash expect << EOF spawn /usr/bin/truecrypt ''/path/to/EncryptedFile'' ''/mount/point'' expect "Enter password" send "volume password\n" expect "Enter keyfile" send "\n" expect "Protect hidden volume" send "\n" expect eof; EOF
当然,这不如手动输入密码安全。但对于某些用例,例如当您的 TrueCrypt 文件系统位于共享存储上的文件中时,它比未加密更好。
安全地卸载和取消映射卷(在关机时)
您可以通过以下方式卸载特定设备
# veracrypt -d /path/to/mountpoint
或省略路径以卸载所有 truecrypt 卷。
如果您希望 truecrypt 设备在关机时自动卸载,请将以下内容添加到文件 /etc/rc.local.shutdown
if (/usr/bin/veracrypt --text --list) then { /usr/bin/veracrypt -d sleep 3 } fi
您也可以省略 sleep 命令,它只是为了给卸载一些时间在实际关机前完成。
故障排除
TrueCrypt 已经在运行
如果在启动 TrueCrypt 时出现消息框TrueCrypt 已经在运行,请检查相关用户的 home 目录中是否有名为 .TrueCrypt-lock-username 的隐藏文件。将 username 替换为个人用户名。删除该文件并再次启动 TrueCrypt。
已删除过时的锁定文件
如果您在启动 Truecrypt 后总是收到消息“删除过时的锁定文件 [....]”,则必须在 Gnome 注销期间杀死 ID 最低的 Truecrypt 进程。编辑 /etc/gdm/PostSession/Default
并在 exit 0 之前添加以下行
kill $(ps -ef | grep veracrypt | tr -s ' ' | cut -d ' ' -f 2)
Unicode 文件/文件夹名称问题
NTFS
如果包含 Unicode 字符的文件或文件夹名称在 TrueCrypt NTFS 卷上显示不正确或根本不显示(而在例如未加密的 NTFS 分区上可以正确处理),请首先验证您是否已安装 NTFS-3G 驱动程序,然后以 root 身份创建以下符号链接
ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs
这将导致 TrueCrypt 自动将此驱动程序用于 NTFS 卷,效果与显式使用相同
truecrypt --filesystem=ntfs-3g /path/to/volume
通过控制台。
还可以考虑设置例如
rw,noatime
TrueCrypt GUI 中的其他选项(设置 > 首选项 > 挂载选项)。
FAT
同样,使用 Windows 创建的 FAT32 卷可能使用 Unicode 而不是 ISO 8859-1。为了全局使用 UTF-8,请设置挂载选项
iocharset=utf8
或者,在本地挂载卷时使用
--fs-options=iocharset=utf8
自 linux-4.14.4 起,默认启用 UTF8 字符集。因此,为了使用 ISO 8859-1 编码挂载卷,您需要使用 --fs-options=utf8=no
,请参阅 FS#56781。
卸载错误(设备映射器)
如果您在尝试卸载 truecrypt 卷时总是收到消息“device-mapper: remove ioctl failed: Device or resource busy”,解决方案是转到:设置 > 首选项 > 系统集成 > 内核服务并选中该框
Do not use kernel cryptographic services
挂载错误(设备映射器,truecrypt 分区)
尝试挂载 truecrypt 卷时,可能会出现如下消息
Error: device-mapper: create ioctl failed: Device or resource busy Command failed
如果是这样,请运行
# cryptsetup remove /dev/mapper/truecrypt1
无法设置循环设备
如果您在尝试创建/挂载 TrueCrypt 卷时收到消息“Failed to set up a loop device”,可能是因为您最近更新了内核而没有重启。重启应该可以解决此错误。
否则,请检查是否已将 loop 加载为内核模块
$ lsmod | grep loop
如果未列出,请在 modprobe loop
后重试 TrueCrypt 命令。如果有效,请考虑将 loop 添加到 /etc/modules-load.d
中的模块。
# tee /etc/modules-load.d/truecrypt.conf <<< "loop"
对于较新的内核版本,启动时不会创建循环设备。如果在首次挂载容器文件时没有循环设备,TrueCrypt 将失败(“Failed to set up a loop device”),但也会创建最大数量的循环设备(通常为 256 个),现在应该可以进行挂载。
为了避免这种情况,您可以在挂载文件之前创建一个循环设备
# mknod -m 0660 /dev/loop8 b 7 8
这将创建 /dev/loop8
。或者在启动时创建一些循环设备
# echo "options loop max_loop=8" > /etc/modprobe.d/eightloop.conf
将 max_loop=8
更改为您需要的设备数量。
系统分区密码需要 en_US 键盘布局
如果您正在使用 Xorg(如果您不知道那是什么,那么您很可能正在使用),请使用以下命令来使用美国键盘布局,直到重启
# setxkbmap us
NTFS 卷上权限被拒绝
如果您无法修改文件系统,即使权限看起来是正确的,这也可能是由于未安装 NTFS-3G 造成的,请参阅 NTFS。
损坏的标准卷文件系统
如果您无法再访问 VeraCrypt 卷或容器,请安装 testdisk。有关更多信息,请参阅 CGSecurity 页面。
$ ./truecrypt -t --filesystem=none /data/data_for_testdisk/truecrypt.dd Enter password for /data/data_for_testdisk/truecrypt.dd: Enter keyfile [none]: Protect hidden volume? (y=Yes/n=No) [No]: Enter system administrator password: $ mount ... truecrypt on /tmp/.truecrypt_aux_mnt1 type fuse.truecrypt (rw,nosuid,nodev,allow_other) # testdisk /tmp/.truecrypt_aux_mnt1/volume