2007/05/02

encfs挂载脚本

花了一晚上,做出了一个好用的encfs加密脚本

使用他的话需要 安装encfs和zenity

sudo apt-get install encfs zenity




#! /bin/bash
#自动加载encfs文件卷的脚本
#依赖:encfs zenity
#加密后的文件储存在./encfsscript/data文件夹呢,如要备份,备份该文件夹即可
#挂在目标文件夹,由./encfsscript/config里的mountdir=来决定,默认为家目录下的“加密的文件目录”
#自动添加入fuse用户组,自动创建加密文件,自动判断是加载还是卸载
hash=$( md5sum $0 )

tmp=$( groups $USER | grep "fuse" )
if [ "#$tmp" == "#" ]
then
zenity --question --title "提醒:" --text "程序发现你的用户不在fuse组,这样加密的文件夹将无法加载。是否用管理员权限把你的用户加入fuse组?"
tmp=$?
if [ $tmp == 0 ]
then
gksu "usermod -G fuse -a $USER"
exit 1
else
exit 1
fi
fi
#判断用户是否在fuse组


if [ ! -d $HOME"/.encfsscript" ] && [ -e $HOME"/.encfsscript" ]
then
rm $HOME"/.encfsscript >/dev/null"
fi
#如果~/.encfsscript不是目录,删除之

if [ ! -e $HOME"/.encfsscript" ]
then
mkdir $HOME"/.encfsscript"
fi
#如果没有~/.encfsscript,建立此目录

if [ ! -d $HOME"/.encfsscript/data" ] && [ -e $HOME"/.encfsscript/data" ]
then
rm $HOME"/.encfsscript/data >/dev/null"
fi
#如果~/.encfsscript/data不是目录,删除之

if [ ! -e $HOME"/.encfsscript/data" ]
then
mkdir $HOME"/.encfsscript/data"
fi
#如果没有~/.encfsscript/data,建立此目录

if [ ! -e $HOME"/.encfsscript/data/.encfs5" ]
then
newdata=1
fi

if [ ! -e $HOME"/.encfsscript/config" ]
then
echo "mountdir="$HOME'/加密的文件' > $HOME'/.encfsscript/config'
echo 加密文件夹的挂载位置,必须是目录 >> $HOME'/.encfsscript/config'
fi
#如果没有默认的~/.encfsscript/config,建立之

for mountdir in $(sed -n "/^[^#]*mountdir=[^#]*/p" $HOME/.encfsscript/config|sed "s/^[^#]*mountdir=\([^#]*\)/\1/g")
do
true
#mountdir=$configdir
done
#读取config文件内容,最后一个mountdir
if [ $mountdir == "" ]
then
mountdir=加密的文件
fi

if [ ! -e $mountdir ]
then
#mountdir=~/加密的文件
mkdir $mountdir
fi
#如果目录不存在,则建立
tmp=""
tmp=$( cat /proc/mounts | grep "encfs $mountdir" )
if [ ! "\#$tmp" == "\#" ]
then
zenity --question --title "文件夹已加载" --text "加密文件夹已经加载到“$mountdir”,是否要弹出?"
tmp=$?
if [ $tmp == 0 ]
then
fusermount -u $mountdir
fi
exit
fi

if [ "1"$newdata == "11" ]
then
passwd=$(zenity --entry --title=建立新加密文件夹-$hash --text="新建加密文件夹,请输入密码:" --width=600)
else
passwd=$(zenity --entry --title=加载加密文件夹-$hash --text="请输入密码:" --hide-text --width=600)
fi

if [ "#"$passwd == "#" ]
then
exit 1
fi

if [ "1"$newdata == "11" ]
then
echo ok
echo $passwd | sed "s/\(.*\)/\n\1\n\1/g" | encfs -S $HOME"/.encfsscript/data" $mountdir -- -o nonempty
else
echo $passwd | encfs -S $HOME"/.encfsscript/data" $mountdir -- -o nonempty
tmp=$?
if [ $tmp == 1 ]
then
zenity --error --title=密码错误 --text=您输入的密码错了,或者你可能是刚安装的encfs或者fuse,fuse系统需要再重启后才能加载。
else
if [ ! $tmp == 0 ]
then
zenity --error --title=出现错误 --text=删除你用户目录下的.encfsscript目录和$mountdir可能能解决这个问题
fi
fi
fi

exit