Linux 权限管理与访问控制详解(1)——基本概念和 DAC | JiaYu's Blog
Linux系统的权限管理与访问控制,大体可以分为基础与高级两部分,基础机制即传统的UGO+RWX/ACL,高级的即为SELinux,本文将按照从基础到高级的顺序讲解,先从系统的安全模型说起。
另,本文中所有例子均是在CentOS7中运行的,不同系统运行结果可能有所不同。
1. 安全模型概述
操作系统的权限管理与访问控制机制,遵从一定的 安全模型 或者 安全机制 ,常见的安全模型有 BLP安全模型, RBAC安全模型 和 多级别安全机制 。Linux 系统也不例外,其基础的权限管理与访问控制机制和加强的 ACL 机制、SELinux,都对这些安全模型与安全机制有所实现。
1.1 BLP安全模型
BLP(Bell & Lapadula)安全模型是由David Bell 和 Leonard La Padula 在1973年模拟军事安全策略创建的计算机系统安全模型, 74年改进, 76年首次实现于 Multics 操作系统。该安全模型是一个状态机模型,有一系列错综复杂的数学证明来保证其安全性的结果;它是定义多级安全性的基础,被视作基本安全公理。
该模型将信息系统中的实体分为两部分:主体(Subject)和客体(Object)。实时操作的成为主体,如用户和进程;被操作的对象则成为客体,如文件和数据库等。对主体和客体来说,有两种最重要的安全控制方法:自主存取控制和强制存取控制。
- DAC(Discretionary Access Control,自主访问控制)。DAC 机制就是指对象的拥有者可以任意修改或授予此对象相应的权限。从主体和客体的角度来说,就是主体对其拥有的客体,有权决定自己和其他主体对该客体应具有怎样的访问权限。传统的Linux、Windows都采用这种机制,比如某用户对于其所有的文件或目录,可以随意设定UGO(即:本用户、本用户组、其他用户)对该文件的RWX(即:读、写、执行)权限,下文详解;
- MAC(Mandatory Access Control,强制访问控制)。MAC机制是指系统不再允许对象的拥有者随意修改或授予此对象相应的权限,而是通过强制的方式为每个对象一一授予权限,SELinux即采用这种机制。该机制主要通过安全级来实现,下文详解。
1.2 RBAC安全模型
RBAC(Role Based Access Control,基于角色的访问控制)模型是一种强制访问控制机制。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与权限的关系可以建立起来以囊括更广泛的客观情况。
RBAC 支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则
- 最小权限原则之所以被RBAC所支持,是因为RBAC可以将其角色配置成其完成任务所需要的最小的权限集;
- 责任分离原则可以通过调用相互独立的角色来共同完成一个任务,比如要求一个计帐员和财务管理员一起参与过帐;
- 数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。然而这些原则必须通过RBAC各部件的详细配置才能得以体现。
SELinux 部分实现了RBAC的机制,SELinux 上下文中的 Role 元素,即是基于 RBAC 设计的,下文详解。
1.3 多级别安全机制
MLS(Multi-Level Security,多级别安全)机制给用户提供了可以用不同等级的安全角色来访问系统。例如,MLS安全分级从低到高为Confidential、Secret、TOP Secret 和 Individuals,不同级别可以访问不同分类的信息,低级别无权访问高级别信息。
SELinux 中,客体上的安全级别称为 分级(Classifications),主体上的安全级别称为 Clearances。SELinux上下文元素中的 安全级别,即是基于此安全机制而设计。SELinux 中的对象上下文,必须至少有一个安全级别(它由单个敏感度和0个或多个范围组成),但可以包括两个安全级别,这两个安全级别分别叫做 低(或进程趋势,即安全级别下限) 或 高(或进程间隙,即安全级别上限),如果高安全级别丢失,它会被认为与低安全级别的值相同(最常见的情况)。实际上,对于客体和进程而言,低和高安全级别通常都是相同的,通常用于进程的级别范围被认为是受信任的主体(即进程信任降级信息)或多层客体,如一个目录,它又包括了不同安全级别的客体。
2. 自主访问控制
Linux中实现的自主访问控制(DAC)机制主要包括基础的 UGO+RWX 和加强的 ACL(Access Control List)。
2.1 UGO+RWX 相关
该机制的思想是通过对用户(组)及其所属进程对文件和目录的访问赋予一定的权限,来实现基本的权限管理与访问控制。
Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主惟一的注册名。对文件的控制取决于文件主或超级用户(root)。文件或目录的创建者对创建的文件或目录拥有特别使用权。
文件的所有关系是可以改变的,可以将文件或目录的所有权转让给其它用户,但只有文件主或root用户才有权改变文件的所有关系。文件的所有权的标志是用户ID(UID),这正是DAC机制的核心概念。
2.1.1 UGO+RWX表示
Linux系统中的每个文件和目录(客体)都有相应的访问权限,通过其确定谁(主体)可以通过何种方式对文件/目录进行访问和操作。文件/目录(客体)的访问权限分为三种:读、写 和 执行。该机制限制三种不同的主体:文件所有者、同组用户 和 其他用户。
每个文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行三种权限。当用Shell命令 ls -l 显示文件或目录的详细信息时,最左边的一排为文件的访问权限。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ➜ ls -l /var drwxr-xr-x. 2 root root 18 10月 16 17:25 account drwxr-xr-x. 2 root root 6 6月 10 2014 adm drwxr-xr-x. 11 root root 4096 12月 12 14:32 cache drwxr-xr-x. 2 root root 6 10月 23 19:27 crash drwxr-xr-x. 3 root root 32 12月 10 14:54 db drwxr-xr-x. 3 root root 17 10月 16 17:25 empty drwxr-xr-x. 2 root root 6 6月 10 2014 games drwxr-xr-x. 2 root root 6 6月 10 2014 gopher -rw-r--r--. 1 root root 25 12月 12 15:01 info.php drwxr-xr-x. 3 root root 17 10月 16 17:21 kerberos drwxr-xr-x. 40 root root 4096 12月 17 03:20 lib drwxr-xr-x. 2 root root 6 6月 10 2014 local lrwxrwxrwx. 1 root root 11 10月 16 17:19 lock -> ../run/lock drwxr-xr-x. 13 root root 4096 12月 15 14:50 log lrwxrwxrwx. 1 root root 10 10月 16 17:19 mail -> spool/mail drwxr-xr-x. 2 root root 6 6月 10 2014 nis drwxr-xr-x. 2 root root 6 6月 10 2014 opt drwxr-xr-x. 2 root root 6 6月 10 2014 preserve lrwxrwxrwx. 1 root root 6 10月 16 17:19 run -> ../run drwxr-xr-x. 10 root root 4096 10月 16 17:25 spool drwxrwxrwt. 7 root root 4096 12月 15 14:52 tmp drwxr-xr-x. 3 root root 16 10月 16 17:23 var drwxr-xr-x. 4 root root 31 12月 12 15:03 www drwxr-xr-x. 2 root root 6 6月 10 2014 yp |
权限列共有 10 个字符,第一个字符为文件类型,后面九个分为三组:第一组为 U(User) ,即文件属主对应的权限;第二组为 G(Group),即同组用户对应的权限;第三组为 O(Others),即其他用户对应的权限。每个字符的意义可用下图描述:

NOTE:
上面例子中,权限列的第一个字符(文件类型),-代表普通文件;l代表链接文件;d代表目录文件。
另,Linux中,文件与目录的权限有所区别,如下所示: