mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-26 06:46:30 +00:00
cleaned up old create_tomb and updated terminal help
This commit is contained in:
parent
342c121fa2
commit
32cf477b58
219
src/tomb
219
src/tomb
@ -334,13 +334,11 @@ check_command() {
|
|||||||
#before wasting user's time
|
#before wasting user's time
|
||||||
|
|
||||||
if ! option_is_set --ignore-swap && ! option_is_set -f; then
|
if ! option_is_set --ignore-swap && ! option_is_set -f; then
|
||||||
if [[ $1 == 'create' || $1 == 'open' ]]; then
|
|
||||||
if ! check_swap; then
|
if ! check_swap; then
|
||||||
error "Swap activated. Disable it with swapoff, or use --ignore-swap"
|
error "Swap activated. Disable it with swapoff, or use --ignore-swap"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
@ -350,18 +348,24 @@ Syntax: tomb [options] command [file] [place]
|
|||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
|
|
||||||
create create a new tomb FILE and its keys (needs size)
|
dig create a new empty TOMB file of --size in MB
|
||||||
open open an existing tomb FILE on PLACE
|
forge create a new KEY file and set its password
|
||||||
list list all open tombs or the one called FILE
|
lock installs a lock on a TOMB to use it with KEY
|
||||||
close close the open tomb called FILE (or all)
|
|
||||||
slam close tomb FILE and kill all pids using it
|
open open an existing TOMB
|
||||||
passwd change the password of a tomb key FILE
|
|
||||||
resize resize a tomb FILE (only bigger, needs size)
|
list list open TOMBs
|
||||||
|
|
||||||
|
close close a TOMB (or all)
|
||||||
|
slam slam a TOMB killing all programs using it
|
||||||
|
|
||||||
|
passwd change the password of a KEY
|
||||||
|
resize resize a TOMB to a new --size (can only grow)
|
||||||
EOF
|
EOF
|
||||||
if [ "$STEGHIDE" = 1 ]; then
|
if [ "$STEGHIDE" = 1 ]; then
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
bury hide a tomb key FILE inside a jpeg PLACE
|
bury hide a KEY inside a JPEG image
|
||||||
exhume extract a tomb key FILE from a jpeg PLACE
|
exhume extract a KEY from a JPEG image
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@ -634,195 +638,6 @@ exec_safe_post_hooks() {
|
|||||||
# }}}
|
# }}}
|
||||||
# {{{ TOMB SUB-COMMANDS
|
# {{{ TOMB SUB-COMMANDS
|
||||||
|
|
||||||
# {{{ - Create
|
|
||||||
# $1 is the tomb path
|
|
||||||
|
|
||||||
create_tomb() {
|
|
||||||
_message "Commanded to create tomb $1"
|
|
||||||
|
|
||||||
# we run as root, but remember the original uid:gid to drop
|
|
||||||
# privileges when not needed anymore
|
|
||||||
if option_is_set -U; then _uid="`option_value -U`"; fi
|
|
||||||
if option_is_set -G; then _gid="`option_value -G`"; fi
|
|
||||||
|
|
||||||
# if swap is on, we remind the user about possible data leaks to disk
|
|
||||||
if ! option_is_set -f && ! option_is_set --ignore-swap; then check_swap; fi
|
|
||||||
|
|
||||||
if ! [ $1 ]; then
|
|
||||||
_warning "no tomb name specified for creation"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# the encryption cipher for a tomb can be set at creation using -o
|
|
||||||
if ! option_is_set -o; then
|
|
||||||
create_cipher="`option_value -o`"
|
|
||||||
else
|
|
||||||
create_cipher=aes-cbc-essiv:sha256
|
|
||||||
fi
|
|
||||||
|
|
||||||
tombfile=`basename $1`
|
|
||||||
tombdir=`dirname $1`
|
|
||||||
# make sure the file has a .tomb extension
|
|
||||||
tombname=${tombfile%%\.*}
|
|
||||||
tombfile=${tombname}.tomb
|
|
||||||
|
|
||||||
|
|
||||||
# require the specification of the size of the tomb (-s) in MB
|
|
||||||
tombsize="`option_value -s`"
|
|
||||||
|
|
||||||
[ $tombsize ] || die "Size argument missing, use --size"
|
|
||||||
|
|
||||||
[[ $tombsize != <-> ]] && die "Size argument is not an integer"
|
|
||||||
|
|
||||||
if [ -e ${tombdir}/${tombfile} ]; then
|
|
||||||
_warning "tomb exists already. I'm not digging here:"
|
|
||||||
ls -lh ${tombdir}/${tombfile}
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check if the key is set manually then use the one existing
|
|
||||||
if option_is_set -k; then
|
|
||||||
tombkey="`option_value -k`"
|
|
||||||
if [ -e "${tombkey}" ]; then
|
|
||||||
_message "Use an existing key to lock the new tomb:"
|
|
||||||
ls -lh ${tombkey}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# this does a check on the file header, virtuosism by hellekin
|
|
||||||
# [[ `file =(awk '/^-+BEGIN/,0' $1) -bi` =~ application/pgp ]]
|
|
||||||
if ! is_valid_key ${tombkey}; then
|
|
||||||
_warning "The key seems invalid, the application/pgp header is missing"
|
|
||||||
die "Operation aborted."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
tombkey="new" # generate it new later
|
|
||||||
fi
|
|
||||||
|
|
||||||
_success "Creating a new tomb in ${tombdir}/${tombfile}"
|
|
||||||
|
|
||||||
if [ -z $tombsize ]; then
|
|
||||||
_message "No size specified, summoning the Tomb Undertaker to guide us in the creation."
|
|
||||||
"$TOMBOPENEXEC" &
|
|
||||||
wait $!
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
tombsize_4k=`expr $tombsize \* 1024 / 4`
|
|
||||||
_message "Generating ${tombfile} of ${tombsize}Mb (${tombsize_4k} blocks of 4Kb)"
|
|
||||||
# we will first touch the file and set permissions: this way, even if interrupted, permissions are right
|
|
||||||
touch ${tombdir}/${tombfile}
|
|
||||||
chown ${_uid}:${_gid} "${tombdir}/${tombfile}"
|
|
||||||
chmod 0600 "${tombdir}/${tombfile}"
|
|
||||||
$DD if=/dev/urandom bs=4k count=${tombsize_4k} of=${tombdir}/${tombfile}
|
|
||||||
|
|
||||||
if [ $? = 0 -a -e ${tombdir}/${tombfile} ]; then
|
|
||||||
_success "OK: `ls -lh ${tombdir}/${tombfile}`"
|
|
||||||
else
|
|
||||||
die "Error creating the tomb ${tombdir}/${tombfile}, operation aborted."
|
|
||||||
fi
|
|
||||||
|
|
||||||
nstloop=`losetup -f` # get the number for next loopback device
|
|
||||||
losetup -f ${tombdir}/${tombfile} # allocates the next loopback for our file
|
|
||||||
|
|
||||||
# create the keyfile in tmpfs so that we leave less traces in RAM
|
|
||||||
keytmp=`safe_dir tomb`
|
|
||||||
(( $? )) && die "error creating temp dir"
|
|
||||||
xxx "safe_dir at $keytmp"
|
|
||||||
|
|
||||||
#rm -f $keytmp
|
|
||||||
# ?????? creo, cancello e ricreo ??????
|
|
||||||
#mkdir -p $keytmp
|
|
||||||
mount tmpfs "${keytmp}" -t tmpfs -o size=1m
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
_warning "cannot mount tmpfs filesystem in volatile memory"
|
|
||||||
losetup -d $nstloop
|
|
||||||
rm -r "${keytmp}"
|
|
||||||
die "operation aborted."
|
|
||||||
fi
|
|
||||||
_message "Generating secret key..."
|
|
||||||
_message "this operation takes time, keep using this computer on other tasks,"
|
|
||||||
_message "once done you will be asked to choose a password for your tomb."
|
|
||||||
_message "To make it faster you can move the mouse around"
|
|
||||||
touch ${keytmp}/tomb.tmp
|
|
||||||
chmod 0600 ${keytmp}/tomb.tmp
|
|
||||||
random_source=/dev/random
|
|
||||||
if option_is_set --use-urandom; then
|
|
||||||
random_source=/dev/urandom
|
|
||||||
fi
|
|
||||||
if [[ $DD = "dcfldd" ]]; then
|
|
||||||
$DD bs=1 count=256 if=$random_source of=${keytmp}/tomb.tmp statusinterval=1
|
|
||||||
else
|
|
||||||
$DD bs=1 count=256 if=$random_source of=${keytmp}/tomb.tmp
|
|
||||||
fi
|
|
||||||
if ! [ -r ${keytmp}/tomb.tmp ]; then
|
|
||||||
_warning "cannot generate encryption key"
|
|
||||||
umount ${keytmp}
|
|
||||||
losetup -d $nstloop
|
|
||||||
rm -r $keytmp
|
|
||||||
die "operation aborted."
|
|
||||||
fi
|
|
||||||
|
|
||||||
_success "Setup your secret key file ${tombkey}"
|
|
||||||
if [ "$tombkey" = "new" ]; then
|
|
||||||
tombkey="${tombdir}/${tombfile}.key"
|
|
||||||
touch ${tombkey}
|
|
||||||
chown ${_uid}:${_gid} ${tombkey}
|
|
||||||
chmod 0600 ${tombkey}
|
|
||||||
gen_key ${keytmp}/tomb.tmp > ${tombkey}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! is_valid_key ${tombkey}; then
|
|
||||||
_warning "The key does not seem to be valid"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if [ $? != 0 ]; then
|
|
||||||
# _warning "setting password failed: gnupg returns 2"
|
|
||||||
# umount ${keytmp}
|
|
||||||
# losetup -d $nstloop
|
|
||||||
# rm -r $keytmp
|
|
||||||
# exit 1
|
|
||||||
# fi
|
|
||||||
|
|
||||||
_message "formatting Luks mapped device"
|
|
||||||
# we use aes-cbc-essiv with sha256
|
|
||||||
# for security, performance and compatibility
|
|
||||||
# XXX: More for compatibility then, because xts-plain is better nowadays.
|
|
||||||
cryptsetup --batch-mode \
|
|
||||||
--cipher ${create_cipher} --key-size 256 \
|
|
||||||
luksFormat ${nstloop} ${keytmp}/tomb.tmp
|
|
||||||
|
|
||||||
if ! [ $? = 0 ]; then
|
|
||||||
umount ${keytmp}
|
|
||||||
losetup -d $nstloop
|
|
||||||
rm -r $keytmp
|
|
||||||
rm ${tombdir}/${tombfile}
|
|
||||||
die "operation aborted." 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cryptsetup --key-file ${keytmp}/tomb.tmp --cipher ${create_cipher} luksOpen ${nstloop} tomb.tmp
|
|
||||||
${=WIPE} ${keytmp}/tomb.tmp
|
|
||||||
umount ${keytmp}
|
|
||||||
rm -r ${keytmp}
|
|
||||||
|
|
||||||
# cryptsetup luksDump ${nstloop}
|
|
||||||
|
|
||||||
_message "formatting your Tomb with Ext3/Ext4 filesystem"
|
|
||||||
${=MKFS} ${tombname} /dev/mapper/tomb.tmp
|
|
||||||
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
_warning "Tomb format returned an error:"
|
|
||||||
_warning "your tomb ${tombfile} may be corrupted."
|
|
||||||
fi
|
|
||||||
|
|
||||||
sync
|
|
||||||
|
|
||||||
cryptsetup luksClose tomb.tmp
|
|
||||||
losetup -d ${nstloop}
|
|
||||||
|
|
||||||
_message "done creating $tombname encrypted storage (using Luks dm-crypt ${create_cipher})"
|
|
||||||
_success "Your tomb is ready in ${tombdir}/${tombfile} and secured with key ${tombkey}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is a new way to create tombs which dissects the whole create_tomb() into 3 clear steps:
|
# This is a new way to create tombs which dissects the whole create_tomb() into 3 clear steps:
|
||||||
# - dig a .tomb (the large file) using /dev/random (takes some minutes at least)
|
# - dig a .tomb (the large file) using /dev/random (takes some minutes at least)
|
||||||
# - forge a .key (the small file) using /dev/urandom (good entropy needed)
|
# - forge a .key (the small file) using /dev/urandom (good entropy needed)
|
||||||
@ -2191,10 +2006,6 @@ main() {
|
|||||||
xxx "Tomb command: $subcommand ${PARAM}"
|
xxx "Tomb command: $subcommand ${PARAM}"
|
||||||
|
|
||||||
case "$subcommand" in
|
case "$subcommand" in
|
||||||
create)
|
|
||||||
check_priv
|
|
||||||
create_tomb ${=PARAM}
|
|
||||||
;;
|
|
||||||
|
|
||||||
# new creation in three steps
|
# new creation in three steps
|
||||||
forge)
|
forge)
|
||||||
|
Loading…
Reference in New Issue
Block a user