文章目录
一、第十二章 Linux系统安全相关技术
Linux系统作为基础软件,系统安全至关重要,只有保障了系统安全,才能保障依赖于此系统提供服务的各种信息的安全。保障Linux系统安全只是手段,保障操作系统中的信息安全才是目的。本章结合信息安全和操作系统安全的需求,探讨了Linux的基本安全机制,包括Linux权限、Capabilities、AppArmor、SELinux等,并结合云化带来的数据安全和机密计算趋势,进一步以openEluer上的可信计算和secGear框架为例探讨了可信计算和机密计算。
12.1 操作系统安全概述
12.1.1 信息安全的设计原则
对操作系统安全的关注,实际上是对操作系统中信息安全的关注。信息安全的基本原则是CIA三元组(也称为安全原则三剑客)——机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。一个完整的信息安全保障体系,应该充分考虑到CIA三元组的基本原则。
机密性(不可见):又称隐私性,是指数据不能被未授权的主体窃取,即避免恶意读操作。
完整性(不可改):确保数据只被授权的主体进行授权的修改。即避免恶意写操作。
可用性(可读):是指数据能够被授权主体正常访问。
例如: 以购买CSDN的VIP专栏为例,机密性就是未付费用户无法学习这个专栏;完整性就是这个专栏的内容不会变成别的其他方向的内容;可用性就是你作为付费用户,能够随时学习这个专栏。
如何保护系统安全,James P.Anderson在1972年提出了一个经典安全模型。在这个模型中,基于引用监视器,保障计算机系统安全所采取的基本安全措施有:认证、授权、审计,称为保障系统安全的**“3Au法则”或“黄金法则”**。
“3Au法则”或“黄金法则”:身份识别(Identification)、认证(Authentication)、授权(Authorization)、审计(Audit)、问责(Accounting)
三层防御:事前防御属于认证、事中防御属于授权、事后防御属于审计。
12.1.2 操作系统安全的设计目标
从计算机系统的组成来看,操作系统位于计算机硬件之上,是计算机硬件和其他软件沟通的接口。操作系统作为系统软件,位于计算机硬件和应用程序之间,隐藏了计算机硬件的控制和使用细节,完成了硬件相关的和所有应用程序共需的基本工作,使得应用程序能够安全、方便地使用硬件资源。
从计算机信息系统的角度来看,操作系统、网络系统安全与数据库管理系统的安全是信息系统安全的核心问题。
所以,操作系统安全的设计目标是?
总结来说,操作系统安全的是主要设计目标有以下4点:
(1)按系统安全策略对用户的操作进行访问控制,放置用户对计算机资源的非法访问(窃取、篡改和破坏)。
(2)实现用户标识和身份鉴别。
(3)监督系统运行的安全性。
(4)保证系统自身的安全性和完整性。
12.2 Linux系统的安全机制
Linux操作系统的安全性比较高,能够实现CIA三元组的安全目标,并具有其相关的机制,可以识别用户、进行权限管理和审计。
12.2.1 Linux系统的用户账号
1、用户账号的类型
超级用户(root uid=0) ,拥有最高权限
普通用户账号:由root或其他管理员创建,权限有限
程序用户账号:在安装Linux系统时,添加的低权限用户,不允许登录系统,仅限维护某个程序运行(即对守护进程获取资源进行权限分配)
2、UID号:用户标识号每个用户都对应一个的身份标记
超级用户(root)账号的UID号为固定值:0
程序用户账号:1~999(CentOS6之前是1-400,CentOS7以后是1-999了)
普通用户账号:1000~60000(CentOS6之前是500+,CentOS7以后是1000+)
注意:
1、超级用户账号是最高权限拥有者,uid=0的用户,默认是root,只有当进行系统管理、维护任务时,才建议使用 root
2、用户登录系统,日常事务处理建议只使用普通用户账号
3、普通用户账号主要是给用户进行交互登录使用,受到系统某一类限制,普通账号需要由root用户或其他管理员用户创建,一般只在用户自己的家目录中拥有完整的权限
4、程序用户的出现主要是出于安全性考虑,即使某个程序被攻破导致了账户密码泄露,但是程序账号不是给人用的,是给程序用的,无法直接登录系统的用户,就可以更好的保证系统的安全性
3、组账号
将多个用户集合起来,统一分配某种相同的权限,这多个用户的集合,就是组。linux系统中的用户组(group)就是具有相同特性的用户(user)集合。将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,可以节约时间简化一个一个去给用户账号分配权限的过程。
linux系统中用户组共两种,基本组(私有组) 和附加组(公共组)
基本组(私有组) :
基本组:有且唯一(通过id命令查看,账号名后第一个就是基本组);系统默认新建用户时自动添加同名的组
建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组默认只容纳了一个用户。
在用户所属组中的第一个组称为基本组,基本组在 /etc/passwd文件中指定
附加组(公共组) :
附加组:除了第一个组外的其他组为附加组或公共组(可以没有或者有多个,id命令查看,除最前面一个后面的都是附加组)
附加组在 /etc/group文件中指定
使用id 用户名查看用户uid,基本组和附加组:
[root@ysc ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(lisi),1005(besti)
#用户lisi uid=1001 #(基本组或私有)lisi=1001(系统默认新建用户时自动添加同名的组) #1005(besti)为附加组或公共组(可有没有或者多个)
注意:
用户和组之间是存在包含关系的。组中包含用户,用户一定要有一个主要组,并且主要组有且唯一,附加组可有可无,有且可以有多个,没有也没关系,须知系统会在你创建一个新用户时自动创建一个与用户同名的主要组(这是一种默认操作)。
12.2.2 Linux文件系统的权限
1、文件类型
d 目录(Directory):
目录文件用于组织和存储其他文件和子目录。
目录文件中包含了其他文件和目录的条目。
目录文件的权限控制着谁可以列出(读取)、创建、删除和访问其中的文件和子目录。
l 符号链接(Symbolic Link):
符号链接是一种特殊类型的文件,它包含对另一个文件或目录的引用。
符号链接可以用于创建文件和目录之间的链接。
权限控制着谁可以读取符号链接,而不是实际目标文件或目录。
s 套接字文件(Socket):
套接字文件用于进程间通信,特别是网络通信。
套接字允许不同进程通过网络进行通信。
这些文件通常与网络服务器和客户端应用程序相关。
b 块设备文件(Block Device):
块设备文件用于与块设备通信,如硬盘驱动器。
块设备通常按块(通常为512字节或更多)读取和写入数据。
例如,硬盘驱动器是块设备,用于存储和检索数据块。
c 字符设备文件(Character Device):
字符设备文件用于与字符设备通信,如终端设备、键盘等。
字符设备通常按字符(单个字节)读取和写入数据。
例如,终端设备是字符设备,用于文本输入和输出。
p 命名管道文件(Named Pipe):
命名管道是一种特殊类型的文件,用于进程间通信。
它们提供了一种在不同进程之间传递数据的机制。
命名管道通常用于将一个进程的输出连接到另一个进程的输入。
普通文件(Regular File):
普通文件是最常见的文件类型,包括文本文件、二进制文件、图像文件等。
可以包含文本、数据或程序代码。
普通文件的权限控制着谁可以读取、写入和执行这些文件。
2、文件权限
读取权限(Read,表示为r):
读取权限允许用户查看文件的内容。
对于目录文件,读取权限允许用户列出目录中的文件和子目录。
如果文件的读取权限被禁用,用户将无法查看文件的内容。
写入权限(Write,表示为w):
写入权限允许用户修改文件的内容。
对于目录文件,写入权限允许用户在目录中创建、删除和重命名文件和子目录。
如果文件的写入权限被禁用,用户将无法修改文件的内容或对目录进行更改。
执行权限(Execute,表示为x):
执行权限仅适用于可执行文件(二进制文件、脚本等)和目录。
对于可执行文件,执行权限允许用户运行该文件。
对于目录文件,执行权限允许用户进入目录,查看其中的文件和子目录。
如果文件的执行权限被禁用,用户将无法运行可执行文件或进入目录。
特殊权限(Set User ID,Set Group ID,Sticky Bit):
特殊权限是一种附加权限,通常用于可执行文件和目录。
Set User ID(SUID):当文件拥有SUID权限时,它将以文件所有者的权限运行,而不是运行它的用户的权限。
Set Group ID(SGID):当文件拥有SGID权限时,它将以文件所属组的权限运行。
Sticky Bit:对于目录,Sticky Bit权限可以防止其他用户删除不属于他们的文件。只有目录的所有者可以删除其中的文件。
文件所有者(Owner):
文件的所有者是创建文件的用户。
所有者可以更改文件的权限,也可以更改文件的所有者。
rwxrwxrwx前面三位
所属组(Group):
文件的所属组通常与创建文件的用户的默认组相关联。
所属组权限控制着属于同一组的用户对文件的访问。
rwxrwxrwx中间三位
其他用户(Others):
“其他用户” 权限适用于系统中的所有其他用户,不包括文件的所有者和所属组。
这些权限控制着未被列为文件所有者或所属组成员的用户对文件的访问。
rwxrwxrwx后面三位
3、改变权限位
基本语法: chmod命令的基本语法:chmod 权限文件名
权限表示:权限可以使用数字或符号来表示。数字表示权限:使用三个八进制数字,分别表示文件所有者、所属组和其他用户的权限。每个数字由三个位组成,分别表示读取4、写入2和执行1权限。例如,chmod 755 文件名 将文件权限设置为 -rwxr-xr-x。符号表示权限:使用符号表示,包括加号(+)、减号(-)和等号(=)。例如,chmod u+r 文件名 将文件所有者的读取权限打开。
文件所有者、所属组和其他用户:u:文件所有者。g:所属组。o:其他用户。a:所有用户(文件所有者、所属组和其他用户的组合)。
授予权限:使用加号(+)表示授予权限,例如,chmod u+r 文件名 将为文件所有者打开读取权限。可以一次添加多个权限,例如,chmod u+rw 文件名 将为文件所有者打开读取和写入权限。
撤销权限:使用减号(-)表示撤销权限,例如,chmod u-r 文件名 将从文件所有者那里撤销读取权限。可以一次撤销多个权限,例如,chmod u-rw 文件名 将从文件所有者那里撤销读取和写入权限。
设置权限:使用等号(=)表示设置权限,例如,chmod u=rw,g=rx,o= 文件名 将为文件所有者设置读取和写入权限,为所属组设置读取和执行权限,为其他用户设置没有权限。
递归更改权限:若要递归更改目录及其内容的权限,可以使用-R选项,例如,chmod -R 755 目录名 将递归更改目录及其内容的权限。
查看权限:使用ls -l命令可以查看文件的当前权限。
注意:
了解和正确管理文件权限是Linux系统中的重要任务,它有助于确保文件和目录的安全性,并控制着用户对系统资源的访问。请注意,更改文件的权限需要超级用户或文件所有者的权限。不正确的文件权限设置可能会导致安全问题或访问问题,因此在更改文件权限时要格外小心。
12.2.3 Linux的日志文件
1、什么是日志文件?
日志文件是实现黄金法则中“审计”功能的重要基础。Linux日志文件记载了各种信息,包括Linux内核消息、用户登陆事件、程序错误等。当系统遭受攻击时,日志文件可以帮助追踪攻击者的痕迹,日志对诊断和解决系统中的问题也有帮助。
2、日志的重要性
在一个完整的信息系统中,日志是以一个很重要的功能组成部分,当系统中出现一些管理员操作或者系统本身的报错行为时,日志就相当于系统这一天的工作汇报,系统每天都干了什么,有没有告警信息,哪些出了问题,问题可不可识别,在系统遭受安全攻击时,系统的登陆错误、异常访问等都会一日之的形式记录下来,通过分析这些日志,读懂这些系统的工作汇报你可以知道系统这一天遭受了哪些攻击、完成了哪些任务。同时查看日志也为安全事件发生以后,日后查明何人所为做了什么有了一个很好的取证信息来源,日志可以为审计进行审计跟踪。
3、为什么需要日志分析?
运维管理:作为一个无论是软件设备还是硬件设备的厂家工程师,能看懂设备上的日志是很重要的,从研发的方面来说,一个成功的软件,其全力开发的时间可能连其生命周期的四分之一都不到,也没有任何软件接入到运行环境中就是完美的,既然有问题,我们就要弄清楚问题的根源,寻找问题根源的地方就是在软件系统的日志,没有日志,运维就像一个没有失明的盲人,即使能够解决问题也是需要花费极大的精力去发现问题,并解决问题,但是如果直接查看日志的话,就可以直接在日志中把系统提示的错误信息找出来,避免了盲目搜索带来的时间浪费。所以说日志很重要。
安全设备:做个集成商运维工程师或者网络运维工程师的都清楚,市场上各式各样的安全设备很多,但是没有一个厂商的产品能够全面的覆盖全部的安全产品。一般一个机房建设安全的话,它包含的安全设备绝对不可能都是一家的,绝对有不一样的厂商,这个时候分析日志就变成了很繁重的工作。
日志格式:除了每个设备带来的海量数据管理员无法进行有效分析,而且不同厂商的标准不一样,日志格式不一样,这就对运维工程师的工作造成了很大的负担。
这就要求所有的软硬件设备必须要有日志输出且在整个集成系统中必须要有日志审计设备用于设备运行过程中的日志的分析、输入、并通过日志审计程序分析后输出系统日志是否发生异常。
12.2.4 Linux纵深防御体系
针对Linux系统可以构建出安全的基础系统环境,可以通过防火墙、虚拟专用网、入侵检测系统等保证网络层安全;可以通过Linux用户管理、文件系统管理等保障系统层安全。这些都是构建Linux纵深防御系统布克霍尔的重要组成部分。下图便是纵深防御体系的示意图。
12.3 Linux系统的访问控制
12.3.1 Linux系统访问控制概述
访问控制是按照访问者的身份来限制其访问对象的一种方法。
认证过程中,判断主体身份的方法主要有以下3种:
(1)你知道的信息:例如口令、某个隐私问题的答案等。
(2)你拥有的东西:例如USB-key、U盾等实物。
(3)你是谁(独一无二的身体特征):如指纹、虹膜、步态、键盘输入习惯等,属于人的一部分。
授权是判断主体是否有权限访问客体的过程。授权机制主要考虑以下3个问题:
(1)用什么数据结构来表达主体与客体之间的权限关系。
(2)如何设置和修改权限关系。
(3)如何强制保证这种权限关系。
访问控制有3种基本类型:自主访问控制(DAC)、强制访问控制(MAC)和基于角色的访问控制。
一、自主访问控制模型(DAC)
是资源的所有者,往往也是创建者,可以规定谁有权访问他们的资源。
安全性较低,不能抵御特洛伊木马的攻击。
DAC可以用访问控制矩阵来表示。
二、强制访问控制模型(MAC)
主体和客体都有一个固定的属性,系统用该安全属性来决定一个主体是否可以访问某个客体。
保护敏感信息一般用MAC,需要用户提供灵活的保护,更多的考虑共享信息时,使用DAC。
1.BLP模型(机密性)
向下读:当主体的安全级可以支配客体的安全级,且主体对客体有自主型读权限,主体可以读客 体。
向上写:当客体的安全级可以支配主体的安全级,且主体对客体有自主型写权限,则主体可以写入客体。
2.Bida模型(完整性)
向上读:主体可以读客体,当且仅当客体的完整级别支配主体的完整级别。
向下写:主体可以写客体,当且仅当主体的完整级别支配客体的完整级别。
三、基于角色的访问控制模型(RBAC)
系统内置多个角色,将权限与角色进行关联;用户必须成为某个角色才能获得权限。
12.3.2 Linux Capabilities
实现访问控制有两种方法:访问控制列表和访问能力列表。
而Capabilities作为一种通用的访问控制方法,不仅可以用在文件系统中,还可以用于管理其他资源。
以下是Linux支持的Capabilities:
12.3.3 AppArmor
AppArmor是一款与SELinux类似的安全框架,是Linux内核的一个安全模块,主要作用是控制应用程序的各种权限。
AppArmor有两种工作模式,分别是:
Enforcement(执行)模式: 在执行模式下,AppArmor强制执行配置文件中定义的策略。如果应用程序尝试执行未授权的操作,例如访问未在策略中明确允许的文件或目录,AppArmor将阻止这些操作。Enforcement模式是AppArmor最常用的工作模式,用于提供实际的安全保护。
Complain(投诉)模式: 在投诉模式下,AppArmor仅会记录但不阻止应用程序违反了安全策略的行为。这种模式更像是一种监视模式,用于审查应用程序的行为并生成相关日志,而不中断其运行。Complain模式通常用于开发和测试,以帮助识别和调整应用程序的行为,而不影响其正常运行。
在Complain模式下,系统管理员可以收集有关应用程序尝试访问受限资源的信息,然后基于这些信息更新AppArmor的配置文件,以便更好地适应应用程序的需求。一旦调整完毕,将AppArmor切换到Enforcement模式,以强制执行更新后的策略。这种迭代的过程有助于确保安全策略既足够严格又不影响应用程序的正常运行。
13.3.4 SELinux
SELinux(Security-Enhanced Linux) 是Linux内核的一个安全子系统,提供了强制访问控制(MAC)机制。它的设计目标是在操作系统和应用程序层面提供更细粒度的访问控制,以加强系统的安全性。以下是SELinux的一些关键特点和工作原理:
强制访问控制: SELinux引入了强制访问控制模型,与传统的自由访问控制(DAC)模型不同。在DAC中,权限由文件的所有者决定,而在SELinux中,访问控制由安全策略决定,提供更加细粒度和灵活的权限管理。
策略语言: SELinux使用策略语言定义如何强制执行访问控制规则。它使用了一种类似于自然语言的策略语言,其中包括类型、角色和规则等概念。管理员可以通过配置策略语言来定义系统中的访问规则。
多层次的安全性: SELinux引入了安全上下文的概念,通过标签为对象分配安全属性。这些安全属性包括了对象的类型、角色和用户等信息。这种多层次的安全性允许系统更细粒度地控制对对象的访问。
安全策略模块: SELinux的策略以模块的形式存在,可以加载或卸载。这使得系统管理员可以选择和定制适合其需求的策略。
Audit子系统: SELinux集成了Linux的Audit子系统,用于记录系统的安全相关事件,提供审计和追踪功能。
应用程序域: SELinux支持应用程序域,即将应用程序限制在特定的上下文中运行,减小了攻击面。
三种工作模式: SELinux有三种工作模式:Enforcing(执行模式)、Permissive(宽松模式)和Disabled(禁用模式)。在执行模式下,SELinux强制执行安全策略;在宽松模式下,它会记录但不阻止违规行为,用于审计和调试;在禁用模式下,SELinux不会对系统进行任何安全增强。
SELinux的引入加强了Linux系统的安全性。
12.4 可信计算和机密计算
secGear机密计算框架
随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RSIC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,长远考虑,还造成了机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。
以下是框架的示意图:
secGear机密计算统一开发框架技术架构如图所示,主要包括三层,共同组成openEuler机密计算软件生态底座:
Base Layer:机密计算SDK统一层,屏蔽TEE及SDK差异,实现不同架构共源码。 Middleware
Layer:通用组件层,机密计算软件货架,无需从头造轮子,帮助用户快速构建机密计算解决方案。 Server
Layer:机密计算服务层,提供典型场景机密计算解决方案。
二、Chatgpt帮助
三、总结
通过第十二章的学习,我深入了解了Linux系统的安全相关技术。首先,我了解了信息安全的设计原则和操作系统安全的设计目标,学习了Linux系统的安全机制,包括用户账号管理、文件系统权限、日志文件记录以及纵深防御体系等,这些知识点保障了系统的安全。在访问控制方面,深入研究了Linux系统的访问控制概念,介绍了Linux Capabilities、AppArmor和SELinux等安全工具。这些工具提供了多层次的安全保障,加强了对系统资源的访问控制。这章较为晦涩,但通过学习,我有了一个大概的了解与掌握。