時間久遠,我都忘了原理是什麼了。 Linux 太過穩定, 有的事情做過一遍,很難有機會再做第二遍。 我只記錄了操作。
首先安裝 cryptsetup 包, 我用的是Debian, 因此用
apt-get install cryptsetup
安裝。 我猜想RPM系統的Linux,應該也有類似包吧。
然後做一個加密的塊設備,名爲testfile,大小爲10M:
dd if=/dev/urandom of=testfile bs=1M count=10
sudo losetup /dev/loop/0 testfile
sudo cryptsetup luksFormat /dev/loop/0
(enter the passphrase)
cryptsetup luksOpen /dev/loop/0 testfs
請牢記你輸入的passphrase, 以後就靠它解密該設備了。 然後在塊設備上創建文件系統:
mke2fs /dev/mapper/testfs
接下來就可以掛載設備了:
mount /dev/mapper/testfs /mnt/test
cp ~/my_secret.txt /mnt/test
掛載點是 /mnt/test , 然後你就可以往該目錄寫文件了。 文件其實上會寫到 testfile 這個文件上去。 卸載之後, testfile 是加密的。
這是第一次操作,比較複雜些。 以後有了這個testfile文件, 無非就是寫文件前mount 設備:
sudo modprobe dm_crypt
sudo losetup /dev/loop/0 testfile
sudo cryptsetup luksOpen /dev/loop/0 testfs
sudo mount /dev/mapper/testfs ~/aaa
編輯文件或複製文件:
vi ~aaa/my_secret.txt
cp certificate ~/aaa
操作完後, umount 設備:
sudo umount ~/aaa
sudo cryptsetup luksClose /dev/mapper/testfs
sudo losetup -d /dev/loop/0
testfile 看上去就是一個10M大小的文件,內容是看不出來的。
file testfile
testfile: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 12815c58-43ee-4b65-b0db-c1387c9
爲了方便使用, 我寫了一個腳本, 用法是 encrypt.sh on 就是掛載,輸入創建設備時的passphrase; encrypt.sh off 就是卸載。 請根據需要修改其中的FILE, DEVICE, MOUNT變量。
#! /bin/sh
#
# convenient script to (un)mount an encrypted file
# Dai Yuwen, June 16, 2007
#
FILE=~/secret
DEVICE=secret
MOUNT=~/mnt
LOOP=/dev/loop0
usage ()
{
echo "Usage: `basename $0` <on>|<off>"
}
if [ $# -lt 1 ]; then
usage
exit 1
fi
case $1 in
on)
sudo losetup $LOOP $FILE && \
sudo cryptsetup luksOpen $LOOP $DEVICE && \
if sudo mount /dev/mapper/$DEVICE $MOUNT; then echo $FILE mounted on $MOUNT ; fi
;;
off)
sudo umount $MOUNT && \
sudo cryptsetup luksClose /dev/mapper/$DEVICE && \
sudo losetup -d $LOOP
;;
*)
usage
exit 1
;;
esac
注意, 在加密設備掛載期間, 它的內容是可見的。 因此要注意掛載點的權限,如果此時系統裏有另外一個用戶,如果掛載點有被他可讀的權限, 他可以看到文件的內容! 要把掛載點設成只對本人可讀、可寫、可執行。