前段時間在做司天監操作系統的時候,有個緊迫的需求,就是將程序進行機密存儲在SD卡中,因爲程序是用JAVA寫的,雖然做了擾碼和加密處理,甚至重寫了Classloader,但是還是害怕源碼泄露,所以想到能否把程序放在一個加密分區中,系統加載的時候把加密分區進行加載,平時就是一塊不知道是啥東西的數據,或者是一個固定大小的文件。
網上找了很多資料,沒找到任何答案,但是看到問此類問題的人倒是挺多的,所以還是自己動手豐衣足食,然後把經驗分享給大家。
這裏會介紹兩種方式,一種是基於文件格式的虛擬分區,另外一種是將SD卡擴展出新的分區。
需要安裝的工具
cryptsetup,用於分區加密
sudo apt-get install cryptsetup
1. 創建分區
先說SD卡擴展分區的方式,創建分區的這兩種方式網上有很多,所以如果我沒寫清楚的話可以去網上找找看。
sudo fdisk /dev/mmcblk0
進入fdisk工具,先說一下基本的命令:
p、打印分區表。
n、新建一個新分區。
d、刪除一個分區。
q、退出不保存。
w、把分區寫進分區表,保存並退出。
n是創建一個新的分區,注意開始位置一定要在最後一個分區之後,我看樹莓派前面也空了一些,應該是放BootLoader用的吧,別用這塊地方(我記得是2048的地方)
創建好後輸入w命令保存
再說文件方式,因爲有可能你的卡挺大,但是樹莓派自動給你擴展root分區,而你有不會裁剪(這塊資料網上也有),所以就用到了文件做虛擬分區的方式(其實和交換分區原理一樣)。
囉嗦一句:我做母盤的時候用的是4G卡,卡做好後轉成鏡像文件3.7G,壓縮一下1.2G,用這個母盤鏡像燒其他大容量的卡然後做自動擴展的,這塊內容留到其他文章裏面詳述吧。
dd if=/dev/zero of=~/disk1.dsk bs=1M count=40
關於dd命令網上也有很多介紹,不轉了,可以去這裏看看
https://blog.csdn.net/skdkjzz/article/details/39031959
我創建了一個40M的文件,因爲我的程序夠用了,如果不夠用可以調整bs和count參數
2.加密分區
獨立分區加密
sudo cryptsetup luksFormat /dev/mmcblk0p3
文件加密
sudo cryptsetup luksFormat ~/disk1.dsk
加密的時候首先要輸入大寫的YES,然後輸入兩次密碼就會加密完成。
如果是分區形式的好像需要重啓一次樹莓派才能進行下一步操作,具體忘了。
3.做分區映射
獨立分區映射
sudo cryptsetup luksOpen /dev/mmcblk0p3 disk1
文件映射
sudo cryptsetup luksOpen ~/disk1.dsk disk1
映射的時候需要輸入你剛纔設置的密碼
映射完畢後去/dev/mapper/看看有沒有disk1,當然,這個名字自己隨便起,但儘量別用loop啥的
4.格式化分區
sudo mkfs -t ext4 /dev/mapper/disk1
5.掛載分區
sudo mount /dev/mapper/disk1 /prog
以上就是創建加密分區的所有步驟,如果沒有設置自動掛載的話,第五步每次啓動系統後需要手動加載。