2010年9月26日 星期日

linux 檔案加密

Linux 要怎麼把檔案加密呢? 谷歌一下, 有人說用 openssl 就行, (key 是用 dd if=/dev/random of=crypt.key bs=256 count=1 做出來的)

openssl enc -e -bf -k crypt.key -in file -out file.crypt

那我有一堆檔案呢? 總不能全手動吧? 有人結合 tar 的指令, 可是這樣不就產生一個超大的檔案?我只要每個檔案加密就好, 可是要怎麼結合 openssl 指令呢? 因為有兩個地方要有東西, 一個 in, 一個 out, 谷歌好久都沒看到有人這麼做, 不過看到類似的指令就吧它拼起來, 結果像這樣

#!/bin/bash

TAR=/home
find $TAR -type f > cryptfile
find $TAR -type d > dir



for DIR in $(cat dir)
do
mkdir /tmp/$DIR
done


for FILE in $(cat cryptfile)
do
echo $FILE
openssl enc -e -bf -k crypt.key -in $FILE -out /tmp/$FILE.cypt
done

先把要備份的檔案存成一個文字檔 cryptfile, 再來產生個文字檔放目錄, 再來用兩 for 迴圈, 在 /tmp 建一樣的目錄來放加密過的檔案, 就大功告成了. 但是...但是...遇到有空白的目錄或檔名就完蛋了, 因為 for 迴圈是用空白來換行的, 這該如何是好? 該不會要搬出 sed, awk 吧? 谷歌了好久, 終於看到一線曙光, 有人也有相同的問題, 原來用 whlie 就行了, 結果像這樣


#!/bin/sh
TAR=/home
find $TAR -type f > cryptfile
find $TAR -type d > dir


cat dir | while read DIR
do
#echo $DIR
mkdir -p "/tmp/$DIR"
done


cat cryptfile | while read FILE
do
echo $FILE
openssl enc -e -bf -k crypt.key -in "$FILE" -out "/tmp/$FILE.cypt"
done


大功告成, 真是太神奇了, 可是為什麼呢?

沒有留言:

張貼留言