操作系统:Mint 12,64位(Linux内核:3.5.0-17)
truecrypt 版本:7.1a
我在自动化脚本中使用 truecrypt。我想创建一个具有 Ext4 文件系统的卷。但似乎该--filesystem
选项无法做到这一点。
当我--filesystem=ext4
在创建时传递时,我无法挂载卷。它说“您必须指定文件系统”,当我传递--filesystem
给 mount 命令时,我收到错误。syslog
它说:
EXT4-fs (dm-2): VFS: Can't find ext4 filesystem
--filesystem
但是,当我在创建时没有传递该选项时,它会要求我提供文件系统,我可以选择Linux Ext4
,一切都会顺利。
我知道我可以先传递--filesystem=none
,然后稍后格式化卷,但这不是我想要的。(因为脚本不知道应该格式化哪个设备?可能安装了其他 truecrypt 卷。)
答案1
经过几个夜晚的努力,我终于找到了一系列可靠的命令来创建和销毁 ext4 格式的 Truecrypt 卷。
我经过多次尝试使用这两种方法后才到达这一点墓以及 Truecrypt 本身,然后才最终切换到 Truecrypt 的分叉版本,称为tc-play
我为什么要放弃另外两个实用程序呢?Tomb,我遇到了可靠性问题。在一次 tomb 调整大小操作之后,该工具会定期拒绝接受我与 tomb 密钥关联的密码。我最终可以修复它,但是谁愿意整天调试 ksh 脚本呢?:) 我真的很喜欢 Tomb 项目,希望它在未来继续取得成功。
Truecrypt 合适吗?我不喜欢必须信任所提供的二进制文件,尤其是网上有很多报告称人们无法使用相同的源代码重现相同的二进制文件。我很高兴有公共资助的对该代码的审计正在进行中。我也不愿意相信我自己的自定义源代码编译。我正在这里构建一个备份系统,不想冒这样的风险:5 年后我需要出于某种原因重新编译,并花上整个周末的时间用当时更新的编译器来构建它。
值得一提的是,tc-play 包含在 Ubuntu 13 的 apt repo 中(可能也包含在大多数其他发行版/版本中)。此代码假定命令以普通用户帐户运行,并且所选命令已通过 sudoers 列入白名单。
最后说明:尽管 tc-play 需要交互式键盘输入来收集密码,但我希望所有这些都可以编写脚本。我知道在脚本中嵌入密码一般来说是一种不好的做法,但我的整个系统都依赖于备份服务器的锁定。如果有人能获取脚本中的密码,我就有更大的麻烦要担心了。
好了,以上就是我的命令。请随意复制/粘贴并根据口味进行调味。如果您发现任何问题或有任何建议,欢迎并感谢反馈:
export ARCHIVE=foo.tc
export SIZE_M=20
export PASSWORDBASE=superdupertopsecret
export CLOUD_DIR=/mnt/cloud/r3cgm/
# create archive
dd if=/dev/zero of=$CLOUD_DIR$ARCHIVE bs=1 count=0 seek=${SIZE_M}M
# find free loopback device
LOOPBACK_DEV=$(sudo losetup -f)
# associate loopback device with archive
sudo losetup $LOOPBACK_DEV $CLOUD_DIR$ARCHIVE
# to enable Expect debugging, add this:
# exp_internal 1
# encrypt loopback device
expect -c "spawn sudo tcplay -c -d $LOOPBACK_DEV -a whirlpool -b AES-256-XTS
set timeout 2
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect Repeat
send $PASSWORDBASE$ARCHIVE\r
expect proceed
send y\r
interact
"
# map loopback device with file container
# DEBUG: sometimes this needs to be run twice / fails the first time, why?
expect -c "spawn sudo tcplay -m $ARCHIVE -d $LOOPBACK_DEV
set timeout 1
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect eof
"
# format archive with ext4
sudo mkfs.ext4 /dev/mapper/$ARCHIVE
[[ -d "/mnt/$ARCHIVE" ]] || sudo mkdir /mnt/$ARCHIVE
# mount archive
sudo mount /dev/mapper/$ARCHIVE /mnt/$ARCHIVE
# UNDO
# unmount archive
sudo umount /mnt/$ARCHIVE
# remove volume
sudo dmsetup remove $ARCHIVE
# delete loopback device
sudo losetup -d $LOOPBACK_DEV
# remove the archive
# rm $CLOUD_DIR$ARCHIVE