操作系统安全课程设计0909121922袁琨茗解析Word下载.docx
- 文档编号:7981427
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:23
- 大小:817.12KB
操作系统安全课程设计0909121922袁琨茗解析Word下载.docx
《操作系统安全课程设计0909121922袁琨茗解析Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统安全课程设计0909121922袁琨茗解析Word下载.docx(23页珍藏版)》请在冰点文库上搜索。
第2章总体设计
2.1软件结构和主要实现方法
系统设计总体分为三个部分:
1.界面设计
1)采用VC++MFC来编写简单友好的操作界面。
MFC是微软提供的一个类库用于在C++环境下编写应用程序的一个框架和引擎。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
界面需要建立一个MFC窗口,过程:
①首先从CWinApp派生一个应用程序类,这里为CFileSystemApp。
classCFileSystemApp:
publicCWinApp{};
②然后建立应用程序对象,这里为theApp。
CFileSystemApptheApp;
③产生一个自己需要的窗口,在InitInstance()里创建,初始化创建各种控件。
2)窗口界面主要划分为四块区域:
①文件目录区,通过树视图控件显示文件目录。
②文本编辑区,编辑框控件,显示文本文件内容,进行查看修改等工作。
③用户区,显示当前使用用户,包括用户登陆和注销功能按钮。
④文件操作区,包括对文件的各种操作按钮。
3)界面图:
④
③
②
①
2.文件系统功能设计
文件系统功能主要分为三类:
1)多用户功能
定义Account类,定义一个Account结构体,在程序中初始化多个用户,登陆时匹配用户输入密码和初始化用户的密码,实现多用户。
2)文件的增删改查
①文件和目录的创建删除
在固定的磁盘路径中初始化目录,显示在树视图控件中。
通过选择节点获取目录或文件的路径,进一步进行创建和删除。
创建时弹出对话框获取目录或文件名字。
②文件的查看修改
对txt等文本文件进行查看修改,将文本内容读取进文本编辑框
查看,修改后点击保存,将文本编辑框内容读取写入文件。
3)外部设备U盘读取
通过检测电脑中有无H:
盘路径,有则将其作为一个节点加入树视图。
3.安全功能设计
有关安全的功能有:
1)用户和目录、文件权限
①权限规则:
权限级别0~5,只有用户权限高于等于目录或文件权限级别,才可以对其进行操作,否则一概不行。
②用户权限设置:
设立了三个账户身份,分别为admin、general、guest,代表管理员,一般用户,访客。
Admin身份权限设为5,最高;
general设置为3;
guest为1。
用户登录系统时,通过密码来区分其身份,从而确定其权限等级。
③文件或目录权限设置:
文件或目录新建后权限默认为1,之后可以由权限高于1的用户设置修改,0~5。
2)文件内容加密解密
加密技术采用BASE64加密技术。
原理为将三个字节转化成四个字节。
3*8=4*6,每六位构成新的字节,高两位填0,变为加密内容。
3)审计记录
在文件操作成功后添加语句,输出操作的用户信息和操作目标,操作类型到Audit.txt文件作为审计记录。
2.2总体流程图
第3章详细设计
3.1界面详细和文件操作功能设计
1.文件目录区(树视图控件)
CTreeCtrlm_ctrlTree;
voidInitDriverTree(CTreeCtrl*m_ctrlTree);
voidInsertNode(CTreeCtrl*m_ctrlTree,CStringszPath,HTREEITEMhNode);
voidInsertNodeU(CTreeCtrl*m_ctrlTree,CStringszPath,HTREEITEMhNode);
2.文本编辑区:
①进行txt文件查看和修改;
voidCFileSystemDlg:
:
EditFile()
{
HTREEITEMhSel=m_ctrlTree.GetSelectedItem();
CatalogPathcatalog;
CStringstrFolderPath;
CStringpath=catalog.GetItemPath(&
m_ctrlTree,hSel);
strFolderPath=catalog.GetPath(hSel,&
m_ctrlTree);
CStdioFilestdfile;
CStringstrText;
CStringstrLine;
stdfile.Open(strFolderPath,CFile:
modeReadWrite);
while(stdfile.ReadString(strLine))
{
strText+=strLine;
strText+="
\r\n"
;
}
GetDlgItem(IDC_FILEEDIT)->
SetWindowText(strText);
GetWindowText(Buf);
stdfile.Close();
}
②对修改的内容进行保存:
Savefile()
elsestrFolderPath=catalog.GetPath(hSel,&
modeCreate|CFile:
modeWrite);
stdfile.WriteString(Buf);
3.用户区
①用户登录
Login()
CStringAdminName;
login.DoModal();
AdminName=login.adminName;
while
(1)
{
for(inti=0;
i<
3;
i++)
{
if(Account[i].compare(AdminName,passwd))))
{
AfxMessageBox("
登陆成功"
);
AccountOn=Account[i];
GetDlgItem(IDC_OnName)->
SetWindowText(AdminName);
GetDlgItem(IDC_NEWCATA)->
EnableWindow(true);
GetDlgItem(IDC_DELCATA)->
GetDlgItem(IDC_NEWFILE)->
GetDlgItem(IDC_DELFILE)->
GetDlgItem(IDC_LOOK)->
GetDlgItem(IDC_PASTE)->
GetDlgItem(IDC_COPY)->
GetDlgItem(IDC_LOGOUT)->
GetDlgItem(IDC_SAVE)->
GetDlgItem(IDC_OTHER)->
GetDlgItem(IDC_OTHEROUT)->
GetDlgItem(IDC_ENCODE)->
GetDlgItem(IDC_DECODE)->
GetDlgItem(IDC_CHANGE)->
GetDlgItem(IDC_LOGIN)->
EnableWindow(false);
}
}
AfxMessageBox("
密码错误"
break;
CStringstrFolderPath="
F:
\\FileSystem\\Root"
+AdminName+"
\\"
HTREEITEMhSel=m_ctrlTree.GetRootItem();
if(!
PathIsDirectory(strFolderPath))
CreateDirectory(strFolderPath,NULL);
m_ctrlTree.InsertItem(AdminName,hSel);
②用户注销
LogOut()
{AccountOn=Account();
GetDlgItem(IDC_OnName)->
SetWindowText("
无"
GetDlgItem(IDC_NEWCATA)->
GetDlgItem(IDC_DELCATA)->
GetDlgItem(IDC_NEWFILE)->
GetDlgItem(IDC_DELFILE)->
GetDlgItem(IDC_LOOK)->
GetDlgItem(IDC_PASTE)->
GetDlgItem(IDC_COPY)->
GetDlgItem(IDC_LOGOUT)->
GetDlgItem(IDC_SAVE)->
GetDlgItem(IDC_OTHER)->
GetDlgItem(IDC_OTHEROUT)->
GetDlgItem(IDC_ENCODE)->
GetDlgItem(IDC_DECODE)->
GetDlgItem(IDC_CHANGE)->
GetDlgItem(IDC_LOGIN)->
AfxMessageBox("
已注销"
GetDlgItem(IDC_LOGIN)->
这一系列代码的作用是设置各按钮是否可用,当登陆成功时,各功能才开放,按钮可用;
当注销和登陆失败时,各功能拒绝用户使用。
③显示登录人:
GetDlgItem(IDC_OnName)->
获取登录人的账户名显示到控件OnName上,
4.文件操作区
①关于新建和删除
新建和删除的关键在于获取目标路径,否则只能单纯删除和新建树中的结点。
通过网上查阅资料得知了一种方法,通过三个函数。
BOOLAddParentFolder(CStringnParentFolder[10],CStringnParent);
CStringAllCString(CStringnParentFolder[10]);
CStringGetItemPath(CTreeCtrl*pCtrl,HTREEITEMhItem);
在源文件中专门建立了一个类,实现路径获得功能:
GetPathFun.cpp
②查看和修改
同文本编辑区。
3.2安全功能设计
1.权限
①初始化三类账户身份和它们所拥有的权限
CreateAccount()
//管理员用户
Account1=Account("
admin"
5,"
//一般用户
Account2=Account("
general"
3,"
123456"
);
//游客
Account3=Account("
guest"
1,"
②文件权限
通过ACL表来查询目录或文件的权限等级,ACL表储存在文件ACL.txt中。
可以通过ACL函数修改目录和文件权限。
voidCFileSystemDlg:
ACL()
{usingnamespacestd;
ofstreamofs;
ofs.open("
\\FileSystem\\ACL.txt"
ios:
out);
CStringwrite,level;
for(inti=0;
number;
{write=FileName[i];
level.Format(_T("
%d"
),FileLevel[i]);
write+="
\n"
write+=level;
ofs<
<
write;
读取文件的等级:
intCFileSystemDlg:
Getlevel(CStringfilename)
{char*pszFileName="
CStdioFilemyFile;
myFile.Open(pszFileName,CFile:
modeRead);
myFile.ToBegin();
CStringstr1;
=number;
{if(str1==filename)
{
myFile.ReadString(str1);
level=(int)(myFile.ReadString(str1));
continue;
myFile.Close();
returnlevel;
权限控制:
在每个功能函数前,调用Getlevel()获取文件或者目录权限,与用户权限比对,无权则
AfxMessageBox("
权限不足无法操作"
2.加密解密
此模块主要由组员孙奥完成,原理我有所了解。
①关于BASE64加密技术:
所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"
+"
、"
/"
(再加上作为垫字的"
="
,实际上是65个字符)----作为一个基本字符集。
然后,其他所有符号都转换成这个字符集中的字符。
具体来说,转换方式可以分为四步。
第一步,将每三个字节作为一组,一共是24个二进制位。
第二步,将这24个二进制位分为四组,每个组有6个二进制位。
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
②单词MAN转换成base64编码举例:
Textcontent
M
a
n
ASCII
77
97
110
Bitpattern
1
Index
19
22
5
46
Base64-Encoded
T
W
F
u
3.审计记录
在功能模块成功时,加入一串输出代码,如登录过程和删除文件过程加入:
usingstd:
ofstream;
\\FileSystem\\Audit.txt"
ios:
out|ios:
app);
CStringwrite=AccountOn.getName();
write+="
"
登录"
ofs<
write<
endl;
usingstd:
ofstreamofs;
ofs.open("
CStringwrite=AccountOn.getName();
write+='
'
write+=strFolderPath;
write+="
删除文件"
ofs<
就会在指定位置出现操作的记录:
第4章用户手册
1.打开文件系统
若不进行登录则只有用户登录按钮可用。
2.用户登录
三种账户身份,根据用户所知道的密码确定他的身份,登录后会有审计记录,这里所用身份为admin。
登录后各功能按钮恢复可用
3.新建目录“文件”,并在“文件”中新建文件“安全.txt”
4.对“安全.txt”进行查看编辑加密解密
5.对“安全.txt”进行权限修改
6.切换用户guest对“安全.txt”进行删除尝试
7.查看审计记录
第5章总结
5.1完成的情况
本次课程设计,总的来说,完成情况还可以,基本实现了要求。
采用C++编程语言,使用MFC框架工具,设计类似于Windows的窗口界面,开发了一个多用户安全的文件系统。
①实现了对文本文件及目录的管理,包括对文件系统(包括文件和目录)读、写、创建、删除、打开、关闭、命名等操作;
②实现了对不同的文件和目录能设置权限,对不同用户也设置权限,通过用户身份的不同区分每个用户的权限等级,最后根据用户和文件的权限来判定用户是否能进行文件系统的操作。
③文件可以加密存储
④有审计记录
基本满足了需求,但仍然存在很多问题和不足,需要进一步优化和改进。
①只能对文本文件进行读写,并不支持对多种类型文件的创建和读写等操作
②关于界面中的复制粘贴文件功能没有完善好,无法使用。
③用户权限是静态的,取决于他所掌握的账号身份,如何授予和回收一个用户的符合他身份的账户存在问题。
④文件加密比较简单,加密后的base64编码,复制到网络上的base64解码器可以轻松获得原信息。
⑤审计记录未达到审计日志的标准,审计简单,未在记录中加入时间,无法知晓进行操作的时间,且审计记录缺乏保护,知道文件位置便可随意更改查看。
⑥外部设备U盘的读取存在问题,这部分功能并没有实现完整。
⑦系统还不够友好,存在许多未解决的BUG会导致系统中断,如:
对目录进行查看操作,在没有外部设备情况下点击弹出,对目录进行删除文件操作等等。
5.2可以改进的地方
①增强系统的友好性,对每一种操作实现异常处理,提示错误信息或正确操作方法。
②将审计记录的操作写为一个类,在每个需要审计记录的操作下引用这个类的函数,而不是在功能函数下简单加入大量重复代码,可以增强代码可读性,更加规范。
③增加一个时间类,获取系统时间并加入到操作的审计记录中,真正实现“日志”。
5.3心得体会
本次课程设计对于我和我们组来说是颇有难度的。
首先,要求使用c或c++编写就是一个挑战。
虽然我们已经修完C++的课程,但距离使用C++设计一个有界面的文件系统还有不少距离。
还记得大一结束的C++课程设计是“学生成绩管理系统”,这样一个简单的课程设计基本代表了我们的C++应用水平。
比较起来,以前不要求语言时更多去使用了JAVA,因为大二学习这门语言时已经不像大一学C那么懵懂,懂的多了些,做的多了些,外加校内外有较多的JAVA培训机构,学习机会较多,所以习惯使用它,而对C++涉及不多。
再有,以往的课程设计和实验,通常网上可以直接查阅到别人完成的类似作品,可以很直接的得到参考,而本
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作 系统安全 课程设计 0909121922 袁琨茗 解析
![提示](https://static.bingdoc.com/images/bang_tan.gif)