跳到主要内容

5 篇博文 含有标签「权限」

查看所有标签

安全访问 - 第1章 DAC模型

· 阅读需 13 分钟
何丰良
技术支持人员

前言

企业做为一个组织,存在明确的组织架构,由于每个人的职责不同因此对文件的访问范围也不同,随着企业信息化工程进一步完善,员工对文件的访问、共享、传递等需求越来越多,文件的访问便捷性和安全性之间的矛盾越来越大,我们需要学习当前世界流行的主要文件安全访问理论和现有成熟实践,设计一种专业的企业文件访问模型。

早期最著名的安全标准是TCSEC,全称是 Trusted Computer System Evaluation Criteria (可信计算机系统评估标准),是美国国防部在 20 多年的研究和开发中发展出来的⼀组安全标准,于1983年公布,最初只是军用标准,后来延伸至民用领域。最终被后续发布的信息技术安全评估通用标准(简称CC,现行版本3.1)取代,更准确的说法应该是整合。CC 是通过统一一些预先存在的标准而产生的,目的是保证计算机安全产品的规范、实施和评估过程是以严格、标准和可重复的方式进行的,发展历程如下:

在中国,等同于CC v2.3的中文版本GB/T18336标准于2005年开始实施。

由于CC是国际通用标准,不提供特定的安全要求和功能列表,但依然遵循TCSEC 采取的方法。TCSEC 中规定了两种类型的访问控制标准:⾃主访问控制 (DAC) 和强制访问控制 (MAC)。DAC 的要求被认为在技术上对商业和⺠⽤政府安全需求以及单级军事系统是正确 的,而 MAC最初⽤于多级安全军事系统,目前这两种访问控制标准都已在Linux系统中实现,我们后续章节将以Linux系统为背景系统讲解这两种模型。

DAC模型

Linux 系统上基础模型是 DAC, 全称是 Discretionary Access Control (自主访问控制)。由TCSEC 所定义的访问控制中的一种类型。它是根据主体(如用户、进程或 I/O 设备等)的身份和他所属的组限制对对象的访问。所谓的自主,是因为拥有访问权限的主体,可以直接(或间接)地将访问权限赋予其他主体(除非受到强制访问控制的限制)。

DAC模型是指对象(比如程序、文件、进程)的拥有者可以任意修改或者授予此对象相应的权限,也就是UGO+RWX/ACL权限控制。

权限有三个要素:主体(subject)、对象(object)、策略(policy),用于表示主体对哪个对象拥有什么访问策略,例如:用户小明对**\opt\work文件夹拥有读**访问策略。

1.1 文件的UGO+RWX权限控制

UGO

UGO是User(用户)、Group(用户所属组)和Other(其他用户)的简称:

User是文件的所有者(属主),一般是创建文件的用户,对该文件具有完全的权限。在一台允许多个用户访问的 Linux 主机上,可以通过文件的所有者来区分一个文件属于那个用户。只有文件的属主和超级权限用户root 修改文件的权限。

Group是文件所属用户组对文件的访问权限(属组)。假如有几个用户合作开发同一个项目,如果每个用户只能查看和修改自己创建的文件就太不方便了,也就谈不上什么合作了。所以需要一个机制允许一个用户查看和修改其它用户的文件,此时就用到组的概念的。我们可以创建一个用户组,然后把需要合作的用户都添加都这个组中。在设置文件的访问权限时,允许这个组中的用户对该文件进行读取和修改。

Other是除了以上两种情况的其他用户对该文件的访问权限。如果我想把一个文件共享给系统中的所有用户该怎么办?通过组的方式显然是不合适的,因为需要把系统中的所有用户都添加到一个组中。并且系统中添加了新用户该怎么办,每添加一个新用户就把他添加到这个组中吗?这个问题可以通过其他人的概念解决。在设置文件的访问权限时,允许其他人户对该文件进行读取和修改。

RWX

RWX则是Read(读)、Write(写)、eXecute(执行)的简称:

每个文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行三种权限。当用命令 ls -l 显示详细信息时,最左边一列为文件的访问权限。例如:

# ls -al
-rw-------. 1 root root 132 7月 4 2019 .xauthQur1Xx
-rw-------. 1 root root 132 7月 4 2019 .xauthYacMAK
-rw-------. 1 root root 132 3月 8 2020 .xauthykfSZU
drwxr-xr-x. 7 root root 154 10月 21 09:39 ydisk
drwxr-xr-x. 3 root root 69 11月 30 2021 .ydisk

权限列共有 10 个字符,第一个字符为文件类型,后面九个分为三组:第一组为 U(User) ,即文件属主对应的权限;第二组为 G(Group),即同组用户对应的权限;第三组为 O(Others),即其他用户对应的权限。每个字符的意义可用下图描述:

图解文件权限

权限列的第一个字符(文件类型),-代表普通文件;l代表链接文件;d代表目录文件。

文件与目录的权限有所区别,如下所示:

权限文件目录
R(可读)读取文件内容读包含在目录中的文件名称
W(可写)对文件内容进行编辑可以写信息到目录中,即可以创建、删除文件、移动文件等操作
X(可执行)作为执行文件执行可以进入目录;可以搜索(能用该目录名称作为路径名去访问它所包含的文件和子目录)

举例说明:

  1. 对文件有 w 权限不能删除文件,需要对文件所在的目录有 w 权限;
  2. 对目录有 w 权限不能 cd 进入目录,需要对目录有 x 权限;
  3. 对目录有 x 权限,只有在知道文件名并且有 r 权限的时候才能访问目录下的文件;
  4. 对目录必须有 x 权限才能 cd 进入到目录,必须有 rx 权限才能使用 ls 列出目录清单
  5. 对目录有 w 权限,可以对目录中的任何文件或子目录进行创建、删除或修改操作,即使该文件或目录的所有者是其它用户也是如此。

1.2 文件的ACL权限控制

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何用户或用户组设置任何文件/目录的访问权限。

在UGO+RWX权限中,用户对文件只有三种身份,就是属主、属组和其他人,但是在实际工作中,这三种身份实在是不够用,我们举个例子来看看:

img

根目录中有一个 /project 目录,这是班级的项目目录。班级中的每个学员都可以访问和修改这个目录,老师也需要对这个目录拥有访问和修改权限,其他班级的学员当然不能访问这个目录。需要怎么规划这个目录的权限呢?应该这样:老师使用 root 用户,作为这个目录的属主,权限为 rwx;班级所有的学员都加入 tgroup 组,使 tgroup 组作为 /project 目录的属组,权限是 rwx;其他人的权限设定为 0。这样这个目录的权限就可以符合我们的项目开发要求了。

有一天,班里来了一位试听的学员 st,她必须能够访问 /project 目录,所以必须对这个目录拥有 r 和 x 权限;但是她又没有学习过以前的课程,所以不能赋予她 w 权限,怕她改错了目录中的内容,所以学员 st 的权限就是 r-x。可是如何分配她的身份呢?变为属主?当然不行,要不 root 该放哪里?加入 tgroup 组?也不行,因为 tgroup 组的权限是 rwx,而我们要求学员 st 的权限是 r-x。如果把其他人的权限改为 r-x 呢?这样一来,其他班级的所有学员都可以访问 /project 目录了。

当出现这种情况时,普通权限中的三种身份就不够用了。ACL 权限就是为了解决这个问题的。在使用 ACL 权限给用户 st 陚予权限时,st 既不是 /project 目录的属主,也不是属组,仅仅赋予用户 st 针对此目录的 r-x 权限。这有些类似于 Windows 系统中分配权限的方式,单独指定用户并单独分配权限,这样就解决了用户身份不足的问题。

参考链接

Linux 权限管理与访问控制详解

了解Linux操作系统的权限管理

Linux DAC权限管理详解