Updated README to markdown and started improving the script

This commit is contained in:
Kevin MacMartin 2014-05-28 20:56:12 -04:00
parent 6f925bd2ae
commit 44dd592651
3 changed files with 47 additions and 45 deletions

3
README
View file

@ -1,3 +0,0 @@
Cryptobox is a script licensed under the GPLv3, that uses cryptosetup, mkfs and losetup to easily create, mount and unmount encrypted image files based on LUKS.
Install cryptobox to $PATH and run 'cryptobox' for a list of commands

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# Cryptobox #
A script that wraps **cryptsetup**, **mkfs** and **losetup** to make it easy to create, mount and unmount encrypted image files using LUKS.
## Usage ##
cryptobox: displays the list of commands
cryptobox c filename.img filesystem size-in-mb: creates an image file __filename.img__ with the filesystem __filesystem__ and size of __size-in-mb__. eg: `cryptobox c myimg.img ext4 128`
cryptobox m filename.img /mount/point: mounts the image file __filename.img__ on the directory __/mount/point__. eg: `cryptobox m myimg.img /mnt/cryptoimg`
cryptobox u /mount/point: unmounts the image file mounted on the directory __/mount/point__. eg: `cryptobox u /mnt/cryptoimg`
## License ##
This script is open source and licensed under the [GPLv3](http://www.gnu.org/copyleft/gpl.html).

View file

@ -1,32 +1,33 @@
#!/bin/sh #!/usr/bin/env bash
# --------------------------------------------------- # ##############################################################
# cryptobox # # #
# --------------------------------------------------- # # CryptoBox #
# cryptobox is a script used with cryptosetup, mkfs # # #
# and losetup, designed to create, mount and umount # # A script that wraps cryptsetup, mkfs and losetup to make #
# encrypted disk images. # # it easy to create, mount and unmount encrypted image #
# # # files using LUKS. #
# Developer: Prurigro # # #
# Contact: prurigro at gmail dot com # ##############################################################
# Version: 1.0 #
# #
# If you find this script useful but have ideas about #
# how to make it better, found bugs, need help using #
# it or anything else; feel free to contect me. #
# #
# Distributed under the GPLv3; copies can be obtained #
# on gnu.org @ http://www.gnu.org/copyleft/gpl.html #
# --------------------------------------------------- #
NAME="cryptobox" NAME=`echo $0 | grep -o -e "[^\/]*$"`
if [ $(lsmod | grep -c loop) = 0 ]; then echo "loading 'loop' module"; modprobe loop || echo "failed to load 'loop' module" && exit 1; fi # Check for root
if [ $(lsmod | grep -c dm_mod) = 0 ]; then echo "loading 'dm_mod' module"; modprobe dm_mod || echo "failed to load 'dm_mod' module" && exit 1; fi [[ "$UID" -ne 0 ]] && (echo -e "Error: Please run this script with root permissions\n"; exit 1)
# Check dependencies
[[ `type -P dd` ]] || (echo "Error: The 'dd' program is missing"; exit 1)
[[ `type -P losetup` ]] || (echo "Error: The 'losetup' program is missing"; exit 1)
[[ `type -P cryptsetup` ]] || (echo "Error: The 'cryptsetup' program is missing"; exit 1)
[[ `type -P mkfs` ]] || (echo "Error: The 'mkfs' program is missing"; exit 1)
# Load modules if they aren't present
[[ `lsmod | grep loop` ]] || echo "loading 'loop' module"; modprobe loop || (echo "Error: failed to load 'loop' module"; exit 1)
[[ `lsmod | grep dm_mod` ]] || echo "loading 'dm_mod' module"; modprobe dm_mod || (echo "Error: failed to load 'dm_mod' module"; exit 1)
function usage { function usage {
echo "Usage: '$NAME option arguments'" echo -e "${NAME}: create and mount encrypted images\n"
echo "Options:" echo "Usage: ${NAME} option arguments"
echo -e "\tc (create) -> $NAME c filename.img filesystem size-in-mb" echo -e "\tc (create) -> $NAME c filename.img filesystem size-in-mb"
echo -e "\tm (mount) -> $NAME m filename.img /mount/point" echo -e "\tm (mount) -> $NAME m filename.img /mount/point"
echo -e "\tu (umount) -> $NAME u /mount/point" echo -e "\tu (umount) -> $NAME u /mount/point"
@ -52,8 +53,8 @@ case "$1" in
echo "error: $2 already exists" echo "error: $2 already exists"
exit 1 exit 1
fi fi
LOOPDEV=$(losetup -f) LOOPDEV=`losetup -f`
CONTAINER=$(echo "$2" | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g) CONTAINER=`echo "$2" | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g`
dd bs=1M count="$4" if=/dev/urandom of="$2" dd bs=1M count="$4" if=/dev/urandom of="$2"
losetup $LOOPDEV "$2" losetup $LOOPDEV "$2"
cryptsetup -c aes-xts-plain -y -s 512 luksFormat $LOOPDEV cryptsetup -c aes-xts-plain -y -s 512 luksFormat $LOOPDEV
@ -63,19 +64,9 @@ case "$1" in
losetup -d $LOOPDEV losetup -d $LOOPDEV
;; ;;
"m") "m")
if [ -z "$2" -o -z "$3" ]; then if [ -z "$2" -o -z "$3" ]; then echo -e "Error: syntax\n"; usage; exit 1; fi
echo "syntax error" [[ ! -f "$2" ]] && (echo "Error: $2 does not exist"; exit 1)
usage [[ -d "$3" ]] || (echo "Error: $3 does not exist"; exit 1)
exit 1
fi
if [ ! -f "$2" ]; then
echo "error: $2 does not exist"
exit 1
fi
if [ ! -d "$3" ]; then
echo "error: $3 does not exist"
exit 1
fi
LOOPDEV=$(losetup -f) LOOPDEV=$(losetup -f)
CONTAINER=$(echo $LOOPDEV | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g) CONTAINER=$(echo $LOOPDEV | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g)
losetup $LOOPDEV "$2" losetup $LOOPDEV "$2"
@ -88,13 +79,13 @@ case "$1" in
usage usage
exit 1 exit 1
fi fi
MOUNT=$(mount | grep $(echo "$2" | sed s/"\/"$//)) MOUNT=`mount | grep $(echo "$2" | sed s/"\/"$//)`
if [ -z "$MOUNT" ]; then if [ -z "$MOUNT" ]; then
echo "error: $2 is not mounted" echo "error: $2 is not mounted"
exit 1 exit 1
fi fi
LOOPDEV=$(echo $MOUNT | sed s/\ .*//g | sed s/"\/mapper"//) LOOPDEV=`echo $MOUNT | sed s/\ .*//g | sed s/"\/mapper"//`
CONTAINER=$(echo $LOOPDEV | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g) CONTAINER=`echo $LOOPDEV | sed s/"[^\/]*\/"//g | sed s/"\.".*$//g`
umount "$2" umount "$2"
cryptsetup luksClose $CONTAINER cryptsetup luksClose $CONTAINER
losetup -d $LOOPDEV losetup -d $LOOPDEV