cryptsetup文件系統加密
今天做了SYC攻防題的文件系統掛載部分,在找到掛載最內層的final文件時發現mount無法識別,這也許就是一個加密的文件系統吧,還好~在龜速的 網絡環境下查閱到了losetup循環掛載系統命令,但是有關這個命令網絡上我能查到的資料實在太少太少,於是就只好尋求man的幫助,實驗一番后毫無所 獲,再次查看manul,看到其中提了另一個工具cryptsetup,就是它了,一個及其強大的命令,再次查閱了一部分資料,成功掛在了final文件 系統找到了key.
附上cryptsetup的參考資料,確實非常強大
http://www.sudu.cn/info/html/edu/20080425/300892.html
橫線內的內容轉自以上網站
==============================================
當Ubuntu Linux使用加密文件系統后,數據的安萬能得到非常好的保護。在這種情況下,即使把我們的機器送給黑客,只要他們沒有密鑰,黑客看到的數據只會是一堆亂 碼,毫無利用價值可言。
本文將周詳介紹利用dm-crypt來創建加密文件系統的方法。和其他創建加密文件系統的方法相比,dm-crypt系統有着無可比擬的優越性:他的速度 更快,易用性更強。除此之外,他的適用面也非常廣,能夠運行在各種塊設備上,即使這些設備使用了RAID和 LVM也毫無障礙。dm-crypt系統之所以具有這些好處,主要得益於該技術是建立在2.6版本內核的device-mapper特性之上的。 device-mapper是設計用來為在實際的塊設備之上添加虛擬層提供一種通用靈活的方法,以方便研發人員實現映像、快照、級聯和加密等處理。此外, dm-crypt使用了內核密碼應用編程接口實現了透明的加密,並且兼容cryptloop系統。
一、設置內核
dm -crypt利用內核的密碼應用編程接口來完成密碼操作。一般說來,內核通常將各種加密程式以模塊的形式加載。對於256-bit AES來說,其安全強度已非常之高,即便用來保護絕密級的數據也足夠了。因此本文中我們使用256-bit AES密碼,為了確保你的內核已加載AES密碼模塊,請利用下列命令進行檢查:
$ cat /proc/crypto如果看到類似下面的輸出的話,說明AES模塊已加載:
name : aes
module : aes
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32
否則,我們能利用modprobe來手工加載AES模塊,命令如下所示:
$ sudo modprobe aes
接下來安裝dmsetup軟件包,該軟件包含有設置device-mapper所需的工具:
$ sudo apt-get install dmsetup cryptsetup為檢查dmsetup軟件包是否已建立了設備映象程式,鍵入下列命令:
$ ls -l /dev/mapper/control接下來加載dm-crypt內核模塊:
$ sudo modprobe dm-cryptdm-crypt加載后,他會用evice-mapper自動注冊。如果再次檢驗的話,device-mapper已能識別dm- crypt,並且把crypt 添加為可用的對象:
$ sudo dmsetup targets如果一切順利,目前你應該看到crypt的下列輸出:
crypt v1.1.0
striped v1.0.2
linear v1.0.1
error v1.0.1
這說明我們的系統已為裝載加密設備做好了准備。下面,我們先來建立一個加密設備。
二、建立加密設備
要創建作為加密設備裝載的文件系統,有兩種選擇:一是建立一個磁盤映像,然后作為回送設備加載;二是使用物理設備。無論那種情況,除了在建立和捆綁回送設 備外,其他操作過程都是相似的。
1.建立回送磁盤映象
如果你沒有用來加密的物理設備(比如存儲棒或另外的磁盤分區),作為替換,你能利用命令dd來建立一個空磁盤映象,然后將該映象作為回送設備來裝載,照樣 能用。下面我們以實例來加以介紹:
$ dd if=/dev/zero of=~/secret.img bs=1M count=100這里我們新建了一個大小為100 MB的磁盤映象,該映象名字為secret.img。要想改動其大小,能改動count的值。
接下來,我們利用losetup命令將該映象和一個回送設備聯系起來:
$ sudo losetup /dev/loop/0 ~/secret.img目前,我們已得到了一個虛擬的塊設備,其位於/dev/loop/0,並且我們能夠如同使用其他設備那樣來使用他。
2.設置塊設備
准備好了物理塊設備(例如/dev/sda1),或是虛擬塊設備(像前面那樣建立了回送映象,並利用device-mapper將其作為加密的邏輯卷加 載),我們就能進行塊設備設置了。
下面我們使用cryptsetup來建立邏輯卷,並將其和塊設備捆綁:
$ sudo cryptsetup -y create myEncryptedFilesystem /dev/DEVICENAME 其中,myEncryptedFilesystem 是新建的邏輯卷的名稱。並且最后一個參數必須是將用作加密卷的塊設備。所以,如果你要使用前面建立的回送映象作為虛擬塊設備的話,應當運行以下命令:
$ sudo cryptsetup -y create myEncryptedFilesystem /dev/loop/0無論是使用物理塊設備還是虛擬塊設備,程式都會要你輸入邏輯卷的口令,-y的作用 在於要你輸入兩次口令以確保無誤。這一點非常重要,因為一旦口令弄錯,你就會把自己的數據鎖住,這時誰也幫不了你了!
為了確認邏輯卷是否已建立,能使用下列命令進行檢查一下:
$ sudo dmsetup ls只要該命令列出了邏輯卷,就說明已成功建立了邏輯卷。不過根據機器的不同,設備號可能有所不同:
myEncryptedFilesystem (221, 0)device-mapper會把他的虛擬設備裝載到/dev/mapper下面,所以,你的虛擬塊設備應該是/dev/mapper /myEncryptedFilesystem ,盡管用起來他和其他塊設備沒什么不同,實際上他卻是經過透明加密的。
如同物理設備相同,我們也能在虛擬設備上創建文件系統:
$ sudo mkfs.ext3 /dev/mapper/myEncryptedFilesystem目前為新的虛擬塊設備建立一個裝載點,然后將其裝載。命令如下所示:
$ sudo mkdir /mnt/myEncryptedFilesystem
$ sudo mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem我們能夠利用下面的命令 查看其裝載后的情況:
$ df -h /mnt/myEncryptedFilesystem
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myEncryptedFilesystem 97M 2.1M 90M 2% /mnt/myEncryptedFilesystem
非常好,我們看到裝載的文件系統,盡管看起來和其他文件系統無異,但實際上寫到/mnt/myEncryptedFilesystem /下的所有數據,在數據寫入之前都是經過透明的加密處理后才寫入磁盤的,因此,從該處讀取的數據都是些密文。
三、卸載方法
要卸載加密文件系統,和平常的方法沒什么兩樣:
$ sudo umount /mnt/myEncryptedFilesystem即便已卸載了塊設備,在dm-crypt中仍然視為一個虛擬設備。如若不信,你能再次運行命令 sudo dmsetup ls來驗證一下,你會看到該設備依然會被列出。因為dm-crypt緩存了口令,所以機器上的其他用戶不必知道口令就能重新裝載該設備。為了避免這種情況 發生,你必須在卸載設備后從dm-crypt中顯式的刪除該設備。命令具體如下所示:
$ sudo cryptsetup remove myEncryptedFilesystem此后,他將完全清除,要想再次裝載的話,你必須再次輸入口令。為了簡化該過程,我們能利用一個簡單的腳本來完 成卸載和清除工作:
#!/bin/sh
umount /mnt/myEncryptedFilesystem
cryptsetup remove myEncryptedFilesystem
四、重新裝載
在卸載加密設備后,我們非常可能還需作為普通用戶來裝載他們。為了簡化該工作,我們需要在/etc/fstab文件中添加下列內容:
/dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem ext3 noauto,noatime 0 0此外,我們也能通過建立腳本來替我們完成dm-crypt設備的創建和卷的裝載工作,方法是用實際設備的名稱或文件路徑來替換/dev /DEVICENAME:
#!/bin/sh
cryptsetup create myEncryptedFilesystem /dev/DEVICENAME
mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem如果你使用的是回送設備 的話,你還能利用腳本來捆綁設備:
#!/bin/sh
losetup /dev/loop/0 ~/secret.img
cryptsetup create myEncryptedFilesystem /dev/loop/0
mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem如果你收到消息 “ioctl: LOOP_SET_FD: Device or resource busy”,這說明回送設備非常可能仍然裝載在系統上。我們能利用sudo losetup -d /dev/loop/0命令將其刪除。
五、加密主目錄
如果設置了PAM(Pluggable Authentication Modules,即可插入式鑒別模塊)子系統在你登錄時裝載主目錄的話,你甚至還能加密整個主目錄。因為libpam-mount模塊允許PAM在用戶登 錄時自動裝載任意設備,所以我們要連同openssl一起來安裝該模塊。命令如下所示:
$ sudo apt-get install libpam-mount openssl接下來,編輯文件/etc/pam.d/common-auth,在其末尾添加下列一行:
auth optional pam_mount.so use_first_pass然后在文件/etc/pam.d/common-session末尾添加下列一行內容:
session optional pam_mount.so
目前,我們來設置PAM,告訴他需要裝載哪些卷、及裝載位置。對本例而言,假設用戶名是Ian,要用到的設備是/dev/sda1,要添加到/etc /security/pam_mount.conf文件中的內容如下所示:
volume Ian crypt - /dev/sda1 /home/Ian cipher=aes aes-256-ecb /home/Ian.key如果想使用磁盤映象,你需要在此規定回送設備(比如/dev/loop/0),並確保在Ian登錄之前系統已運行 losetup。為此,你能將 losetup /dev/loop/0 /home/secret.img放入/etc/rc.local文件中。因為該卷被加密,所以PAM需要密鑰來裝載卷。最后的參數用來告訴PAM密鑰在 /home/Ian.key文件中,為此,通過使用OpenSSL來加密你的口令來建立密鑰文件:
$ sudo sh -c "echo
’
YOUR PASSPHRASE
’
| openssl aes-256-ecb >
/home/Ian.key"這時,提示你輸入密碼。注意,這里的口令必需和想要的用戶登錄密碼一致。原因是當你登錄時,PAM需要你提供這個密碼,用以 加密你的密鑰文件,然后根據包含在密鑰文件中的口令用dm-crypt裝載你的主目錄。
需要注意的是,這樣做會把你的口令以明文的形式暴露在.history文件中,所以要及時利用命令history -c清晰你的歷史記錄。此外,要想避免把口令存放在加密的密鑰文件中的話,能讓創建加密文件系統的口令和登錄口令完全一致。這樣,在身份認證時,PAM 只要把你的密碼傳給dm-crypt就能了,而不必從密鑰文件中抽取密碼。為此,你能在/etc/security/pam_mount.conf文件中 使用下面的命令行:
volume Ian crypt - /dev/sda1 /home/Ian cipher=aes - -最后,為了確保在退出系統時自動卸載加密主目錄,請編輯/etc/login.defs文件使得CLOSE_SESSIONS項設置如下:
CLOSE_SESSIONS yes
六、小結
數據加密是一種強而有力的安全手段,他能在各種環境下非常好的保護數據的機密性。而本文介紹的Ubuntu Linux 下的加密文件系統就是一種非常有用的數據加密保護方式,相信他能夠在保護數據機密性相方面對你有所幫助。