作業系統 實驗 新增加密檔案系統

2021-09-06 16:47:59 字數 2639 閱讀 5255

實驗要求 : 新增乙個類似於ext2,但對磁碟上的資料塊進行加密的檔案系統myext2。

環境 : vmware workstation 14 player + linux 4.6 (32bit)

具體步驟 :在核心模組myext2.ko中修改file.c的**,新增兩個函式new_sync_read_crypt和new_sync_write_crypt,將這兩個函式指標賦給myext2_file_operations結構中的read和write操作。在new_sync_write_crypt中增加對使用者傳入資料buf的加密,在new_sync_read_crypt中增加解密。

原文最後呼叫的系統函式是new_sync_read和new_sync_write,但linux 4.1版本後這兩個函式變成了靜態函式(見fs/read_write.c),無法直接在我們寫的file.c檔案中呼叫。

linux 4.1修改日誌:

解決方法 1 (失敗) :用read_write.c中的vfs_read代替new_sync_read 結果導致vmware虛擬機器崩潰,彈出cpu被禁用提示。

解決方法 2 (正確) :在read_write.c中寫兩個新函式my_read和my_write,重新編譯核心,間接呼叫到new_sync_read和new_sync_write。

** : 

file.c

extern ssize_t my_write(struct file *file, const char __user *p, size_t count, loff_t *pos);

extern ssize_t my_read(struct file *file, char __user *buf, size_t count, loff_t *pos);

// add for lab.3

ssize_t new_sync_write_crypt(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)

printk("haha encrypt %u\n", len);

return my_write(filp, mybuf, len, ppos);

}// add for lab.3

ssize_t new_sync_read_crypt(struct file *filp, char __user *buf, size_t len, loff_t *ppos)

printk("haha encrypt %u\n", len);

return ret;

}

linux/fs/read_write.c

ssize_t my_read(struct file *file, char __user *buf, size_t count, loff_t *pos)

export_symbol(my_read);

ssize_t my_write(struct file *file, const char __user *p, size_t count, loff_t *pos)

export_symbol(my_write);

執行結果 : 

root@ubuntu:/home/linux/desktop/lab3# mount -t myext2 -o loop ./fs.new /mnt

root@ubuntu:/home/linux/desktop/lab3# cd /mnt

root@ubuntu:/mnt# ls -l

total 13

-rw-r--r-- 1 root root 8 jan 2 05:02 1.txt

drwx------ 2 root root 12288 jan 1 08:36 lost+found

root@ubuntu:/mnt# rm 1.txt

root@ubuntu:/mnt# touch 1.txt

root@ubuntu:/mnt# echo "1234567" > 1.txt

root@ubuntu:/mnt# cat 1.txt

1234567

root@ubuntu:/mnt# echo use gui copy/paste

use gui copy/paste

root@ubuntu:/mnt# cd /home/linux/desktop

root@ubuntu:/home/linux/desktop# cat 1.txt

jklmnop#root@ubuntu:/home/linux/desktop# cat 1.txt

jklmnop#root@ubuntu:/home/linux/desktop# cd /mnt

root@ubuntu:/mnt# echo use cp command

use cp command

root@ubuntu:/mnt# cp 1.txt /home/linux/desktop

root@ubuntu:/mnt# cd /home/linux/desktop

root@ubuntu:/home/linux/desktop# cat 1.txt

1234567

root@ubuntu:/home/linux/desktop#

作業系統 檔案系統

5.2開啟檔案 在作業系統中就是確定程序操作哪個檔案。這個確定過程由兩個事件構成 1.將使用者程序task struct中的 filp 20 與核心中的file table 64 進行掛接。2.將使用者程序需要開啟的檔案對應的i節點在file table 64 中進行登記。filp 20 掌控乙個程...

作業系統 檔案系統

通過設計乙個基於索引結構的檔案系統,了解檔案系統設計以及物理塊分配的基本概念。硬體環境 計算機一台,區域網環境 軟體環境 windows 作業系統 visual studio2019 1 設計乙個檔案系統的索引結構,描述邏輯結構與物理索引結構之間的關係 2 檔案建立等基本功能 段 問1 這個標頭檔案...

作業系統 虛擬檔案系統

乙個系統中應當可以支援多個檔案系統。但是由於每乙個檔案系統底層機制不同,作業系統如何相容各個檔案系統?這就是虛擬檔案系統vfs的功能了。vfs是作業系統檔案模組的乙個軟體層,對上面的使用者空間提供統一的操作介面,同時也對下層提供了一套必須實現的介面。這個思想其實在軟體工程中很常用,雖然檔案系統底層實...