基於這個原因,我們就可以用 EncFS 來將某些目錄保護起來,將重要的資料放在裡面,即使是 root 也無法直接存取,除非是有開放權限,否則被拿去的資料也只是廢物一堆。
首先裝上 encfs 及 fuse,因為 encfs 是使用 fuse 來存取
- 代碼: 選擇全部
apt-get install encfs fuse-source fuse-utils
cd /usr/src
tar jxvf fuser.tar.bz2
安裝 fuse 模組
debian recommended way(建議方法)
- 代碼: 選擇全部
module-assistant build fuse
module-assistant install fuse
or
- 代碼: 選擇全部
module-assistant auto-install fuse
or
- 代碼: 選擇全部
m-a a-i fuse
debian obsolete way(舊方法)
- 代碼: 選擇全部
apt-get install kernel-headers-2.4.27-1-686
cd /usr/src/kernel-headers-2.4.27-1-686
make-kpkg modules
dpkg -i ../fuse-module-2.4.27*
建立新的加密檔案系統,加密過的 raw data 放在 ~/.crypt,而一般檔案則由 ~/crypt 來存取
目錄必須為絕對路徑(absolute path)
- 代碼: 選擇全部
encfs ~/.crypt ~/crypt
The directory “/home/louie/.crypt” does not exist. Should it be created? (y,n) y
The directory “/home/louie/crypt” does not exist. Should it be created? (y,n) y
Creating new encrypted volume.
Please choose from one of the following options:
enter “x” for expert configuration mode,
enter “p” for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?> # 按 Enter 鍵表示使用 standard 模式、按 x 或 p 為其他模式
Standard configuration selected.
Configuration finished. The filesystem to be created has
the following properties:
Filesystem cipher: “ssl/blowfish", version 2:1:1
Filename encoding: “nameio/block", version 3:0:1
Key Size: 160 bits
Block Size: 512 bytes
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism. However, the password can be changed
later using encfsctl.
New Encfs Password: # 設定密碼
Verify Encfs Password:
此時,檔案系統已經掛載了,拷貝個檔案進去、建個目錄看看:
- 代碼: 選擇全部
cp test_encfs.txt ~/crypt
mkdir ~/crypt/test_directory
ls -l ~/crypt
drwx—— 2 louie louie 1024 May 21 16:40 test_directory
-rw——- 1 louie louie 20706 May 21 16:35 test_encfs.txt
這時再看看 raw data 的內容:
- 代碼: 選擇全部
ls -l ~/.crypt
-rw——- 1 louie louie 20714 May 21 16:35 DgTU2VPoPC2ytVEJNxjzNjMk
drwx—— 2 louie louie 1024 May 21 16:40 pvyjNgik1QdnumlNuDu4BUvT
都是一些奇怪的名稱,目錄依然是有辦法 cd 進去,但 cat 檔案則看到一堆亂碼,此時,就算是使用 root 依然是沒權限看我們的檔案
- 代碼: 選擇全部
su -
id
uid=0(root) gid=0(root) groups=0(root)
ls -l ~louie/crypt
ls: /home/louie/crypt: Permission denied
不錯吧 !
- 代碼: 選擇全部
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 1929068 1408624 422452 77% /
tmpfs 254340 4 254336 1% /dev/shm
.
.
encfs 489992 9098 455594 2% /home/louie/crypt
將 filesystem umount(由於 encfs 並沒有 umount 參數,而encfs 是呼叫 fuse 來做事,因此用 fusermount -u 來 umount)
- 代碼: 選擇全部
fusermount -u ~/crypt
上面使用 df 看到的 FileSystem 是 encfs,也可用 fsname (fuse 的參數) 來設定看到的 FileSystem 名稱
- 代碼: 選擇全部
encfs ~/.crypt ~/crypt – -o fsname=/dev/data
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 1929068 1408624 422452 77% /
tmpfs 254340 4 254336 1% /dev/shm
.
.
/dev/data 489992 9098 455594 2% /home/louie/crypt
若是要讓 root 或是其他使用者也能夠讀取 encfs 目錄,放參數在 /etc/fuse.conf
- 代碼: 選擇全部
user_allow_other
接著 mount 時加上參數 allow_root、allow_other
- 代碼: 選擇全部
encfs ~/.crypt ~/crypt – -o fsname=/dev/data,allow_root
這樣 root 就可讀取
另外 encfs 支援 FUSE 的參數可用 encfs -H 來查詢