Después de varias noches de trabajo en esto, finalmente encontré una secuencia confiable de comandos para crear y destruir volúmenes Truecrypt con formato ext4.
Llegué a este punto después de varios intentos de usar ambos Tumba y Truecrypt propiamente dicha antes de cambiar finalmente a la versión bifurcada de Truecrypt llamada tc-play
¿Por qué abandoné esas otras dos utilidades? Tumba, tuve problemas de fiabilidad con. Periódicamente, después de una operación de cambio de tamaño de la tumba, la herramienta se negó a aceptar la frase de contraseña que tenía asociada con las llaves de mi tumba. Podría haberlo arreglado finalmente, pero ¿quién quiere depurar los scripts ksh todo el día? :) Realmente me gusta el proyecto Tomb y espero que continúe teniendo éxito en el futuro.
Truecrypt propiamente dicho? No me gustó tener que confiar en los binarios proporcionados, especialmente porque había muchos informes en línea de personas que no pueden reproducir los mismos binarios con la misma fuente. Me alegra que haya una auditoría financiada con fondos públicos de ese código en progreso. Tampoco estaba dispuesto a confiar en mi propia compilación personalizada desde la fuente. Estoy creando un sistema de copia de seguridad aquí y no quería correr el riesgo de que dentro de 5 años necesitaría hacer una recompilación por alguna razón y quemar todo un fin de semana solo para construirlo con los compiladores actualizados del día. .
Para lo que vale, tc-play está incluido en el repositorio de apt en Ubuntu 13 (y probablemente en la mayoría de las otras distribuciones / versiones). Este código supone que los comandos se están ejecutando como una cuenta de usuario normal con los comandos de selección que se han incluido en la lista blanca a través de sudoers.
Nota final: Quería que todo esto fuera programable a pesar de que tc-play quiere una entrada de teclado interactivo para recopilar frases de contraseña. yo saber la incrustación de contraseñas en scripts generalmente es mala, pero todo mi sistema depende de que mi servidor de respaldo esté bloqueado de todos modos. Si alguien puede obtener la contraseña en el script, tengo más problemas de los que preocuparme.
Así que con todo ese preámbulo fuera del camino aquí están mis órdenes. Siéntase libre de copiar / pegar y sazonar al gusto. Comentarios bienvenidos y apreciados, si detecta algún problema o tiene alguna sugerencia:
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