一、实验目的和要求

文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互, 操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进 一步理解 Linux 中的文件系统原理及其实现。

  • 深入理解操作系统文件系统原理
  • 学习理解 Linux 的 VFS 文件系统管理技术
  • 学习理解 Linux 的 ext2 文件系统实现技术
  • 设计和实现加密文件系统

二、实验内容

添加一个类似于 ext2,但对磁盘上的数据块进行加密的文件系统 myext2。实验主要内
容:

  • 添加一个类似 ext2 的文件系统 myext2
  • 修改 myext2 的 magic number
  • 添加文件系统创建工具
  • 添加加密文件系统操作,包括 read_crypt, write_crypt,使其增加对加密数据的
    读写。

三、操作方法和实验步骤

1. 添加一个类似 ext2 的文件系统 myext2

a) 将linux/fs文件夹下的ext2复制为myext2,并将文件夹中的ext2.h重命名为myext2.h
b) 进入 Linux 内核源码文件夹复制 ext2_fs.h, ext2_atomic.h, ext2_atomic_setbit.h 并重
命名
c) 在 linux/fs/myext2 文件夹中编辑将将原来“EXT2”替换成“MYEXT2”;使用脚本substitute.sh
(注意脚本文件只能执行一遍,实验中为了截图执行了两次脚本文件导致后续编译出了问题,只能回去修改脚本文件再将mymy替换为my)

f) 用编辑器的替换功能,把/lib/modules/ ( u n a m e − r ) / b u i l d / i n c l u d e / l i n u x / m y e x t 2 f s . h , 和 / l i b / m o d u l e s / (uname -r)/build/include/linux/myext2_fs.h, 和 /lib/modules/ (uname−r)/build/include/linux/myext2f​s.h,和/lib/modules/(uname -r)/build/include/asm-generic/bitops/ 下的 myext2-atomic.h 与
myext2-atomic-setbit.h 文件中的“ext2”、“EXT2”分别替换成“myext2”、“MYEXT2”

g) 在/lib/modules/KaTeX parse error: Expected 'EOF', got '#' at position 53: …bitops.h 文件中添加:#̲include <asm-g…(uname -r)/build/arch/x86/include/asm/bitops.h 文件中添加:#include
<asm-generic/bitops/myext2-atomic-setbit.h>
i) 在/lib/modules/$(uname -r)/build/include/uapi/linux/magic.h 文件中添加:#define
MYEXT2_SUPER_MAGIC 0xEF53

j) 修改 myext2/Makefile 文件

k) 在 myext2 目录下执行命令:#make

l) 编译好模块后,使用 insmod 命令加载模块,并查看一下 myext2 文件系统是否加载
成功

m) 输入命令cd先把当前目录设置成主目录,对添加的myext2文件系统测试命令如下:

1). 创建大小为 1M 的,名字为 myfs 的,内容全为 0 的文件

2). 将 myfs 格式化成 ext2 文件系统

3). 将 myfs 通过 loop 设备 mount 到/mnt 目录下,使用参数是-t myext2,并检查当前系
统的 mount 情况。

这一步时提示需要root权限,通过su root进入超级用户模式再cd进入主目录。

4).umount刚才挂载的文件系统,再使用mount参数 -t ext2挂载到ext2文件系统,查看结果:

5). remove myext2模块

注意先umount再卸载,否则会提示有设备忙,无法成功卸载。

  1. 修改 myext2 的 magic number
    a) 找到 myext2 的 magic number,并将其改为 0x6666

b) 重新编译内核,并使用insmod命令安装模块
c) 编译并执行changeMN.c, 看到更换magic number成功的输出:

d) 进入测试:

可以看到成功挂载到了myext2文件系统
e) 尝试挂载到ext2系统,提示mount出错,这是因为两个文件系统magic number不同导致的。

f) umount 并使用rmmod myext2 卸载模块

2.3 修改文件系统操作
a) 对于 mknod 函数,在 fs/myext2/namei.c 中进行如下修改:

b) 再用 make 重新编译内核模块,使用命令 insmod 安装编译好的 myext2.ko 内核模块
c) 在 shell 下执行如下测试程序:

第一行命令:将 fs.new mount 到/mnt 目录下。
第二行命令:进入/mnt 目录。
第三行命令:创建一个名为 myfifo 的命名管道。
程序返回错误号 EPERM 结果给 shell,shell 捕捉到这个错误后打出的出错信息。如果是在图形界面下使用虚拟控制台,printk 打印出来的信息不一定能再终端上显示出来,但是可以通过命令 dmesg | tail 来观察。

可见实验取得了预期的效果。

  1. 添加文件系统创建工具
    a) 在myext2目录下编写脚本文件 mkfs.myext2

第一行 表明是 shell 程序。
第三行 如果有程序用了/dev/loop2 了,就将它释放。
第四行 用 losetup 将第一个参数代表的文件装到/dev/loop2 上
第五行 用 mkfs.ext2 格式化/dev/loop2。也就是用 ext2 文件系统格式格式化我们的文件 系统。
第六行 将文件系统的头 2K 字节的内容取出来,复制到 tmpfs 文件里面。
第七行 调用程序 changeMN 读取 tmpfs,复制到 fs.new,并且将 fs.new 的 magic number 改成 0x6666
第八行 再将 2K 字节的内容写回去。
第九行 把我们的文件系统从 loop2 中卸下来。
第十行 将临时文件删除
测试:

# dd if=/dev/zero of=myfs bs=1M count=1
# ./mkfs.myext2 myfs  (或 sudo bash mkfs.myext2 myfs )
# sudo mount –t myext2  –o loop ./myfs  /mnt
# mount



由红框中的内容可见文件系统mount成功。

  1. 修改加密文件系统的 read 和 write 操作
    未加密前:

文件中的内容为明文。
方法一:
根据实验指导,编辑myext2_file_read_iter和myext2_file_write_iter函数,修改后的函数如下:

需要注意的是,因为fs访问的buffer是用户的地址,在我使用的内核版本中中会有保护,禁止内核直接访问用户数据,所以需要用copy_to_user和copy_from_user函数来完成加密和解密过程。
修改后再次编译并安装内核,将之前的myfs挂载到新的myext2模块,打开之前写入的flag,可以看到之前的文字变成了乱码(使用的key为0x9E):

方法二:

  1. 复制new_sync_write 与 new_sync_read 函数到 file.c 中

  2. 对 file_operations 结构体做出如下修改,加入两个函数指针:

c) 对new_sync_read_cryp函数和new_sync_read_cryp函数,可以做如下修改
write:

Read:

实验结果:
重新挂载/mnt到新编译的myext2系统,读到解密后的文flag(乱码),

用gedit打开flag:

查看dmesg(因为文件是在无加密时创建的,所以读取时经历了解密,变成了乱码):

随后新建文件 test.txt 并写入字符串“1234567”,再查看 test.txt 文件内容:cat test.txt,显示为明文,再把把 test.txt 文件复制到主目录下:cp test.txt ~ 。 在主目录下打开 test.txt 文件,结果依然是明文:

再将magicnumber改回0xEF53:

接着创建myfs,将其格式化为myext2,先挂载到myext2文件系统,在test.txt中写入123456字符串,此时读出的文件为123456。退出目录并umount /mnt,将其挂载到ext2文件系统并打开test.txt,可以看出此时读出的是密文,因为在之前写入时写入了密文且ext2文件系统没有对其进行解密。

四、心得体会

本次实验让我对linux中关于文件系统的相关知识和操作有了深入的理解。在实验过程中遇见了许多问题,在前几个模块通过自己的思考都解决了问题,但是在文件加密系统部分卡了很久,后来询问助教才知道是因为实验中我使用的内核版本较高,不允许直接读取用户的数据到内核中,必须使用copy_from_user和copy_to_user函数。在了解到这个知识点以后我又进行了反复的尝试,终于完成了文件加密的两种实现方式。

操作系统-添加文件加密系统相关推荐

  1. 【密码学】Java课设-文件加密系统(适用于任何文件)

    Java实现文件加密解密 前言 一.密码学入门 1.对称加密 2.非对称加密 二.程序代码 1.welcome类(欢迎界面) 2.Log类(登录界面) 3.Register类(注册界面) 4.Inde ...

  2. Linux文件加密系统-eCryptfs

    eCryptfs eCryptFS(Enterprise Cryptographic Filesystem)可翻译为企业级文件加密系统,是Linux系统中的文件加密系统,能够对文件或目录进行加密,且加 ...

  3. C语言实现DES,3DES以及基于3DES的文件加密系统

    C语言实现3DES文件加密系统 DES算法 密钥操作 明文操作 3DES算法 C语言代码实现 代码效果展示 DES算法 DES(数据加密标准)是一种分组密码.明文,密文和密钥的分组长度都是64位. D ...

  4. 墨门云文件加密系统有哪些功能特点?

    墨门云文件加密系统采用高性能透明加密内核技术,是一个从源头上保障企业数据安全的安全管理系统. 透明加解密技术:当使用者在打开或编辑指定文件时,系统将自动对未加密的文件进行加密,对已加密的文件自动解密. ...

  5. 企业文件加密系统 — 文件透明加密的优势和功能

    网络安全问题一直存在,很多企业担心自己的核心技术遭泄露,于是采取防泄密措施--文件加密系统(防泄密软件)!不过很多首次接触到加密软件的企业管理者来说,对文件加密系统还不是很了解,今天我们来了解一下文件 ...

  6. 文件加密系统是如何实现企业数据高效安全保护的?

    文件加密是国内企业对数据安全的基本要求.主要是针对内部泄密为主进行文档的加密,即自动文件加密(强制加密),数据加密软件是现今信息安全防护的主力军,墨门云文件加密系统采用透明加解密技术,对数据进行强制加 ...

  7. 企业文件加密系统价格—公司文件加密系统多少钱?

    企业文件加密系统多少钱?怎么收费?一般是根据需要购买的台数进行收费的. 现在市面上有很多做文件加密系统的厂商,每家收费标准都不一样,在百度搜索文件加密系统的价格,就会发现价格有几百到1000/台的不等 ...

  8. C语言程序设计-文件加密系统01

    题目:文件加密系统 [问题描述] 文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作.加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计. [基本要 ...

  9. 为什么很多企业都在用文件加密系统?

    企业的数据承载着企业发展的重要资源,因此企业实施对内部各类数据文件的安全管控工作迫在眉睫,互联网发展信息安全尤为得到重视,保护数据安全只有提早进行才能杜绝数据泄露威胁,保证数据文件的安全,助力企业的发 ...

最新文章

  1. Linux下编辑器vi/vim的使用介绍
  2. [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
  3. 2017 JavaScript 调查报告概述
  4. 在组策略中用户策略仅对特定计算机生效,将组策略应用到满足条件的计算机---配置组策略筛选...
  5. 持续交付2.0 pdf_半导体检测设备厂商Advantest与美最大半导体数据分析商PDF展开合作...
  6. redis在linux中安装目录,小刀博客园
  7. 淘宝京东的6位数字支付密码实现
  8. allure如何定制Pytest自动化测试报告样式
  9. android模拟器的录屏,夜神安卓模拟器如何录制视频
  10. 协方差与相关系数介绍
  11. 社会调查报告包括哪几个部分?
  12. 请选择要安装的mac os 磁盘
  13. A - Annoying Present codeforce1009c -csdn博客
  14. 深度学习基础6(微分,偏导,梯度,链式法则)
  15. 2021年高考成绩查询无为二中,清北保送生公示:安徽仅3人,2021年安徽985录取率还会垫底吗?...
  16. 空气净化器什么牌子好,家用空气净化器哪个牌子好推荐
  17. visio2013都提示“正在配置请稍后”
  18. notability废纸篓在哪里_Notability 4.4中文版
  19. 深度Deepin系统关机或重启的时候提示unattended upgrades shutdown的解决办法
  20. 解决:你的博文 XXXX 因涉及“版权不明”, 审核未通过,您可以修改相关内容后再次发布。

热门文章

  1. 上海JAVA5月就业环境,各位上海的大佬们呀 我准备下个礼拜出去上海找工作了!一年半的...
  2. 第一次sql注入的教训与思考
  3. 黄花城之行-未到四海
  4. python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?_学小易找答案...
  5. 如何修改Win10的Windows Terminal的背景(带图文)
  6. JavaScript的深浅拷贝
  7. 智能物流仓储机器人|海格里斯HEGERLS货物夹抱式防倾倒装置四向穿梭车
  8. 南开大学计算机宁博,周亚训 教授
  9. matlab 图片RGB颜色提取0-255版
  10. 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理