操作系统-添加文件加密系统
一、实验目的和要求
文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互, 操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进 一步理解 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/myext2fs.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再卸载,否则会提示有设备忙,无法成功卸载。
- 修改 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 来观察。
可见实验取得了预期的效果。
- 添加文件系统创建工具
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成功。
- 修改加密文件系统的 read 和 write 操作
未加密前:
文件中的内容为明文。
方法一:
根据实验指导,编辑myext2_file_read_iter和myext2_file_write_iter函数,修改后的函数如下:
需要注意的是,因为fs访问的buffer是用户的地址,在我使用的内核版本中中会有保护,禁止内核直接访问用户数据,所以需要用copy_to_user和copy_from_user函数来完成加密和解密过程。
修改后再次编译并安装内核,将之前的myfs挂载到新的myext2模块,打开之前写入的flag,可以看到之前的文字变成了乱码(使用的key为0x9E):
方法二:
复制new_sync_write 与 new_sync_read 函数到 file.c 中
对 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函数。在了解到这个知识点以后我又进行了反复的尝试,终于完成了文件加密的两种实现方式。
操作系统-添加文件加密系统相关推荐
- 【密码学】Java课设-文件加密系统(适用于任何文件)
Java实现文件加密解密 前言 一.密码学入门 1.对称加密 2.非对称加密 二.程序代码 1.welcome类(欢迎界面) 2.Log类(登录界面) 3.Register类(注册界面) 4.Inde ...
- Linux文件加密系统-eCryptfs
eCryptfs eCryptFS(Enterprise Cryptographic Filesystem)可翻译为企业级文件加密系统,是Linux系统中的文件加密系统,能够对文件或目录进行加密,且加 ...
- C语言实现DES,3DES以及基于3DES的文件加密系统
C语言实现3DES文件加密系统 DES算法 密钥操作 明文操作 3DES算法 C语言代码实现 代码效果展示 DES算法 DES(数据加密标准)是一种分组密码.明文,密文和密钥的分组长度都是64位. D ...
- 墨门云文件加密系统有哪些功能特点?
墨门云文件加密系统采用高性能透明加密内核技术,是一个从源头上保障企业数据安全的安全管理系统. 透明加解密技术:当使用者在打开或编辑指定文件时,系统将自动对未加密的文件进行加密,对已加密的文件自动解密. ...
- 企业文件加密系统 — 文件透明加密的优势和功能
网络安全问题一直存在,很多企业担心自己的核心技术遭泄露,于是采取防泄密措施--文件加密系统(防泄密软件)!不过很多首次接触到加密软件的企业管理者来说,对文件加密系统还不是很了解,今天我们来了解一下文件 ...
- 文件加密系统是如何实现企业数据高效安全保护的?
文件加密是国内企业对数据安全的基本要求.主要是针对内部泄密为主进行文档的加密,即自动文件加密(强制加密),数据加密软件是现今信息安全防护的主力军,墨门云文件加密系统采用透明加解密技术,对数据进行强制加 ...
- 企业文件加密系统价格—公司文件加密系统多少钱?
企业文件加密系统多少钱?怎么收费?一般是根据需要购买的台数进行收费的. 现在市面上有很多做文件加密系统的厂商,每家收费标准都不一样,在百度搜索文件加密系统的价格,就会发现价格有几百到1000/台的不等 ...
- C语言程序设计-文件加密系统01
题目:文件加密系统 [问题描述] 文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作.加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计. [基本要 ...
- 为什么很多企业都在用文件加密系统?
企业的数据承载着企业发展的重要资源,因此企业实施对内部各类数据文件的安全管控工作迫在眉睫,互联网发展信息安全尤为得到重视,保护数据安全只有提早进行才能杜绝数据泄露威胁,保证数据文件的安全,助力企业的发 ...
最新文章
- Linux下编辑器vi/vim的使用介绍
- [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
- 2017 JavaScript 调查报告概述
- 在组策略中用户策略仅对特定计算机生效,将组策略应用到满足条件的计算机---配置组策略筛选...
- 持续交付2.0 pdf_半导体检测设备厂商Advantest与美最大半导体数据分析商PDF展开合作...
- redis在linux中安装目录,小刀博客园
- 淘宝京东的6位数字支付密码实现
- allure如何定制Pytest自动化测试报告样式
- android模拟器的录屏,夜神安卓模拟器如何录制视频
- 协方差与相关系数介绍
- 社会调查报告包括哪几个部分?
- 请选择要安装的mac os 磁盘
- A - Annoying Present codeforce1009c -csdn博客
- 深度学习基础6(微分,偏导,梯度,链式法则)
- 2021年高考成绩查询无为二中,清北保送生公示:安徽仅3人,2021年安徽985录取率还会垫底吗?...
- 空气净化器什么牌子好,家用空气净化器哪个牌子好推荐
- visio2013都提示“正在配置请稍后”
- notability废纸篓在哪里_Notability 4.4中文版
- 深度Deepin系统关机或重启的时候提示unattended upgrades shutdown的解决办法
- 解决:你的博文 XXXX 因涉及“版权不明”, 审核未通过,您可以修改相关内容后再次发布。
热门文章
- 上海JAVA5月就业环境,各位上海的大佬们呀 我准备下个礼拜出去上海找工作了!一年半的...
- 第一次sql注入的教训与思考
- 黄花城之行-未到四海
- python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?_学小易找答案...
- 如何修改Win10的Windows Terminal的背景(带图文)
- JavaScript的深浅拷贝
- 智能物流仓储机器人|海格里斯HEGERLS货物夹抱式防倾倒装置四向穿梭车
- 南开大学计算机宁博,周亚训 教授
- matlab 图片RGB颜色提取0-255版
- 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理