使用C#实现Windows系统中的访问控制

《安全编程技术》 Windows系统中的访问控制

作者:20191322wyl

实验目的

该实验为验证性实验,实验目的如下:

  1. 掌握访问控制列表的基本原理。
  2. 学会通过编程实现更改Windows操作系统中文件或目录的访问控制列表。

实验内容及步骤

  1. 理解ACL的基本原理。
  2. 编程实现更改一个已存在的文件或目录的访问控制列表,具体如下:
    • 首先,利用FileGetAccessContolO从已存在的文件或目录中取得FileSecurity或DirectorySecurity对象。
    • 接着利用FileSystemAccessFule设置新的访问控制规则,并添加新规则至前面获取的FileSecurity或DirectorySecurity对象中。
    • 最后调用File:SetAccessControl0使添加的新规则生效。

实验要求

  1. 本实验一人一组,编程语言为C#。
  2. 要求学生掌握ACL的基本原理,并熟练掌握所选的编程语言。
  3. 要求学生在Windows操作系统下,设计一个访问控制列表的实例
  4. 实验报告要求:
    • 实验报告要求包括实验目的、实验要求、实验内容、实验结果分析和实验体会等,重点在于实验内容和实验结果分析。
    • 实验报告要求上传和打印。写出实验过程中的心得和体会,并回答实验中的思考题
    • 实验报告撰写规范请见附。

实验所涉及的知识点

​ 本实验涉及的知识点包括访问控制的基本原理和实现方式、Windows系统中
访问控制的实现原理等。

实验环境

计算机:Windows 10、VScode C#

实验验证原理

1、访问控制列表(AccessControlList,ACL):ACL是目前采用最多的一
种访问控制实现方式,Windows系统中就主要是采用ACL实现访问控
制。如下图所示,ACL在一个客体上附加一个主体明细表,来表示各个
主体对这个客体的访问权限,明细表中的每一项都包括主体的身份和主
体对客体的访问权限。利用ACL,能够很容易的判断出对于特定客体的
授权访问,哪些主体可以访问并有哪些访问权限;同样也很容易撤消特
定客体的授权访问,只要把该客体的访问控制表置为空。

2、在Windows操作系统中,可以利用NETFramewotk2.0提供的两个类一
-Filesecurity和DirectorySecurity来实现更改文件或目录的访间控制列
表,具体的访问控制规则是通过FilesystemAccessFule类来定义的。具
体这些类的用法可以查阅MSDN或参考《编写安全的代码(第2版)》
(MichaelHowardDavidLeBlanc,机械工业出版社,2005年)
注:实验所需的参考资料和参考例程请到实验室服务器或BB系统下载。

具体实验步骤

  1. 创建目标文件,

    路径为:C:\Users\10645\Desktop

  2. 修改文件权限

    修改权限如图,非完全控制

  3. VScode配置C#环境

    链接

  4. 代码

    using System;
    using System.Collections;
    using System.IO;
    using System.Security.AccessControl;
    static class Program
    {
        public static void Main()
        {
           //获取文件信息
                string filePath = @"C:\Users\10645\Desktop\20191322吴泳淋.txt";
                FileInfo fileInfo = new FileInfo(filePath);
                //获得该文件的访问权限
                System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();
                //添加ereryone用户组的访问权限规则 完全控制权限
                fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
                //添加Users用户组的访问权限规则 完全控制权限
                fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
                //设置访问权限
                fileInfo.SetAccessControl(fileSecurity);
            }
    }
    
  5. 执行

思考题

问:访问控制都有哪些实现方式,各自有什么优缺点?

答:访问控制是网络安全防范和保护的主要策略,它的主要任务是保证网络资源不被非法使用和访问。它是保证网络安全最重要的核心策略之一。访问控制涉及的技术也比较广,包括入网访问控制、网络权限控制、目录级控制以及属性控制等多种手段。
入网访问控制
入网访问控制为网络访问提供了第一层访问控制。它控制哪些用户能够登录到服务器并获取网络资源,控制准许用户入网的时间和准许他们在哪台工作站入网。 用户的入网访问控制可分为三个步骤:用户名的识别与验证、用户口令的识别与验证、用户账号的缺省限制检查。三道关卡中只要任何一关未过,该用户便不能进入该网络。 对网络用户的用户名和口令进行验证是防止非法访问的第一道防线。为保证口令的安全性,用户口令不能显示在显示屏上,口令长度应不少于6个字符,口令字符最好是数字、字母和其他字符的混合,用户口令必须经过加密。用户还可采用一次性用户口令,也可用便携式验证器(如智能卡)来验证用户的身份。 网络管理员可以控制和限制普通用户的账号使用、访问网络的时间和方式。用户账号应只有系统管理员才能建立。用户口令应是每用户访问网络所必须提交的“证件”、用户可以修改自己的口令,但系统管理员应该可以控制口令的以下几个方面的限制:最小口令长度、强制修改口令的时间间隔、口令的唯一性、口令过期失效后允许入网的宽限次数。 用户名和口令验证有效之后,再进一步履行用户账号的缺省限制检查。网络应能控制用户登录入网的站点、限制用户入网的时间、限制用户入网的工作站数量。当用户对交费网络的访问“资费”用尽时,网络还应能对用户的账号加以限制,用户此时应无法进入网络访问网络资源。网络应对所有用户的访问进行审计。如果多次输入口令不正确,则认为是非法用户的入侵,应给出报警信息。
权限控制
网络的权限控制是针对网络非法操作所提出的一种安全保护措施。用户和用户组被赋予一定的权限。网络控制用户和用户组可以访问哪些目录、子目录、文件和其他资源。可以指定用户对这些文件、目录、设备能够执行哪些操作。受托者指派和继承权限屏蔽(irm)可作为两种实现方式。受托者指派控制用户和用户组如何使用网络服务器的目录、文件和设备。继承权限屏蔽相当于一个过滤器,可以限制子目录从父目录那里继承哪些权限。我们可以根据访问权限将用户分为以下几类:特殊用户(即系统管理员);一般用户,系统管理员根据他们的实际需要为他们分配操作权限;审计用户,负责网络的安全控制与资源使用情况的审计。用户对网络资源的访问权限可以用访问控制表来描述。
目录级安全控制
网络应允许控制用户对目录、文件、设备的访问。用户在目录一级指定的权限对所有文件和子目录有效,用户还可进一步指定对目录下的子目录和文件的权限。对目录和文件的访问权限一般有八种:系统管理员权限、读权限、写权限、创建权限、删除权限、修改权限、文件查找权限、访问控制权限。用户对文件或目标的有效权限取决于以下两个因素:用户的受托者指派、用户所在组的受托者指派、继承权限屏蔽取消的用户权限。一个网络管理员应当为用户指定适当的访问权限,这些访问权限控制着用户对服务器的访问。八种访问权限的有效组合可以让用户有效地完成工作,同时又能有效地控制用户对服务器资源的访问 ,从而加强了网络和服务器的安全性。
属性安全控制
当用文件、目录和网络设备时,网络系统管理员应给文件、目录等指定访问属性。属性安全在权限安全的基础上提供更进一步的安全性。网络上的资源都应预先标出一组安全属性。用户对网络资源的访问权限对应一张访问控制表,用以表明用户对网络资源的访问能力。属性设置可以覆盖已经指定的任何受托者指派和有效权限。属性往往能控制以下几个方面的权限:向某个文件写数据、拷贝一个文件、删除目录或文件、查看目录和文件、执行文件、隐含文件、共享、系统属性等。
服务器安全控制
网络允许在服务器控制台上执行一系列操作。用户使用控制台可以装载和卸载模块,可以安装和删除软件等操作。网络服务器的安全控制包括可以设置口令锁定服务器控制台,以防止非法用户修改、删除重要信息或破坏数据;可以设定服务器登录时间限制、非法访问者检测和关闭的时间间隔。

原文地址:https://www.cnblogs.com/BillGreen/p/15553616.html