mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-26 14:56:33 +00:00
Merge pull request #101 from hellekin/swap
Better support for multiple swap partitions, avoids warning if swap is encrypted.
This commit is contained in:
commit
f9805731f1
70
tomb
70
tomb
@ -136,13 +136,65 @@ safe_filename() {
|
|||||||
check_swap() {
|
check_swap() {
|
||||||
# Return 0 if NO swap is used, 1 if swap is used
|
# Return 0 if NO swap is used, 1 if swap is used
|
||||||
# Return 2 if swap(s) is(are) used, but ALL encrypted
|
# Return 2 if swap(s) is(are) used, but ALL encrypted
|
||||||
local swaps=$(awk '/partition/ { print $1 }' /proc/swaps 2>/dev/null)
|
local swaps="$(awk '/^\// { print $1 }' /proc/swaps 2>/dev/null)"
|
||||||
[[ -z "$swaps" ]] && return 0 # No swap partition is active
|
[[ -z "$swaps" ]] && return 0 # No swap partition is active
|
||||||
|
# Check whether all swaps are encrypted, and return 2
|
||||||
|
# If any of the swaps is not encrypted, we bail out and return 1.
|
||||||
|
ret=1
|
||||||
|
for s in $=swaps; do
|
||||||
|
bone=`sudo file $s`
|
||||||
|
if `echo "$bone" | grep 'swap file' &>/dev/null`; then
|
||||||
|
# It's a regular (unencrypted) swap file
|
||||||
|
ret=1
|
||||||
|
break
|
||||||
|
elif `echo "$bone" | grep 'symbolic link' &>/dev/null`; then
|
||||||
|
# Might link to a block
|
||||||
|
ret=1
|
||||||
|
if [ "/dev/mapper" = "${s%/*}" ]; then
|
||||||
|
is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
|
||||||
|
if [ "crypt" = "$is_crypt" ]; then
|
||||||
|
ret=2
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
elif `echo "$bone" | grep 'block special' &>/dev/null`; then
|
||||||
|
# Is a block
|
||||||
|
ret=1
|
||||||
|
is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
|
||||||
|
if [ "crypt" = "$is_crypt" ]; then
|
||||||
|
ret=2
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
no "An active swap partition is detected, this poses security risks."
|
no "An active swap partition is detected, this poses security risks."
|
||||||
|
if [[ $ret -eq 2 ]]; then
|
||||||
|
yes "All your swaps are belong to crypt. Good."
|
||||||
|
else
|
||||||
no "You can deactivate all swap partitions using the command:"
|
no "You can deactivate all swap partitions using the command:"
|
||||||
no " swapoff -a"
|
no " swapoff -a"
|
||||||
no "But if you want to proceed like this, use the -f (force) flag."
|
no "But if you want to proceed like this, use the -f (force) flag."
|
||||||
die "Operation aborted."
|
die "Operation aborted."
|
||||||
|
fi
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wrapper to allow encrypted swap and remind the user about
|
||||||
|
# possible data leaks to disk if swap is on, and not to be ignored
|
||||||
|
_check_swap() {
|
||||||
|
if ! option_is_set -f && ! option_is_set --ignore-swap; then
|
||||||
|
check_swap
|
||||||
|
case $? in
|
||||||
|
0|2) # No, or encrypted swap
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*) # Unencrypted swap
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ask user for a password
|
# Ask user for a password
|
||||||
@ -583,7 +635,7 @@ ask_key_password() {
|
|||||||
# change tomb key password
|
# change tomb key password
|
||||||
change_passwd() {
|
change_passwd() {
|
||||||
_message "Commanded to change password for tomb key $1"
|
_message "Commanded to change password for tomb key $1"
|
||||||
if ! option_is_set -f && ! option_is_set --ignore-swap; then check_swap; fi
|
_check_swap
|
||||||
|
|
||||||
local keyfile="$1" # $1 is the tomb key path
|
local keyfile="$1" # $1 is the tomb key path
|
||||||
|
|
||||||
@ -955,6 +1007,8 @@ engrave_key() {
|
|||||||
|
|
||||||
forge_key() {
|
forge_key() {
|
||||||
xxx "forge_key()"
|
xxx "forge_key()"
|
||||||
|
_check_swap
|
||||||
|
|
||||||
# can be specified both as simple argument or using -k
|
# can be specified both as simple argument or using -k
|
||||||
local destkey="$1"
|
local destkey="$1"
|
||||||
{ option_is_set -k } && { destkey="`option_value -k`" }
|
{ option_is_set -k } && { destkey="`option_value -k`" }
|
||||||
@ -967,9 +1021,6 @@ forge_key() {
|
|||||||
_warning "Forging this key would overwrite an existing file. Operation aborted."
|
_warning "Forging this key would overwrite an existing file. Operation aborted."
|
||||||
die "`ls -lh $destkey`" }
|
die "`ls -lh $destkey`" }
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# create the keyfile in tmpfs so that we leave less traces in RAM
|
# create the keyfile in tmpfs so that we leave less traces in RAM
|
||||||
local keytmp=`safe_dir forge`
|
local keytmp=`safe_dir forge`
|
||||||
(( $? )) && die "error creating temp dir"
|
(( $? )) && die "error creating temp dir"
|
||||||
@ -1048,9 +1099,7 @@ forge_key() {
|
|||||||
# taken from /dev/urandom which improves the tomb's overall security
|
# taken from /dev/urandom which improves the tomb's overall security
|
||||||
dig_tomb() {
|
dig_tomb() {
|
||||||
_message "Commanded to dig tomb $1"
|
_message "Commanded to dig tomb $1"
|
||||||
|
_check_swap
|
||||||
# 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
|
if ! [ $1 ]; then
|
||||||
_warning "no tomb name specified for creation"
|
_warning "no tomb name specified for creation"
|
||||||
@ -1215,7 +1264,7 @@ lock_tomb_with_key() {
|
|||||||
|
|
||||||
# This function changes the key that locks a tomb
|
# This function changes the key that locks a tomb
|
||||||
change_tomb_key() {
|
change_tomb_key() {
|
||||||
if ! option_is_set -f && ! option_is_set --ignore-swap; then check_swap; fi
|
_check_swap
|
||||||
|
|
||||||
{ option_is_set -k } || { die "Specify the new key with -k" }
|
{ option_is_set -k } || { die "Specify the new key with -k" }
|
||||||
newkey="`option_value -k`"
|
newkey="`option_value -k`"
|
||||||
@ -1336,8 +1385,7 @@ create_tomb() {
|
|||||||
# $1 = tombfile $2(optional) = mountpoint
|
# $1 = tombfile $2(optional) = mountpoint
|
||||||
mount_tomb() {
|
mount_tomb() {
|
||||||
_message "Commanded to open tomb $1"
|
_message "Commanded to open tomb $1"
|
||||||
|
_check_swap
|
||||||
if ! option_is_set -f && ! option_is_set --ignore-swap; then check_swap; fi
|
|
||||||
|
|
||||||
if ! [ ${1} ]; then
|
if ! [ ${1} ]; then
|
||||||
_warning "no tomb name specified for creation"
|
_warning "no tomb name specified for creation"
|
||||||
|
Loading…
Reference in New Issue
Block a user