Linux系统安全

1. Linux 的安全模型

Linux 可以分为内核层和用户层。用户层通过内核层提供的操作接口来执行各类任务。内核层提供的权限划分、进程隔离和内存保护的安全功能,是用户层的安全基础。

一旦内核安全被突破(比如黑客能够修改内核逻辑),黑客就可以任意地变更权限、操作进程和获取内存了。这个时候,任何用户层的安全措施都是没有意义的。既然 Linux 的内核安全这么重要,那我们是不是要在防护上付出大量的精力呢?

事实上,正如我们不需要在开发应用时(尤其是使用 Java 这类相对高层的语言时),过多地关心操作系统相关的内容一样,我们在考虑 Linux 安全时,也不需要过多地考虑内核的安全,更多的是要考虑用户层的安全。所以,对于 Linux 内核层的安全,我们只需要按照插件漏洞的防护方法,确保使用官方的镜像并保持更新就足够了。

既然,使用最多的是用户层,那我们就来看一下,用户层的操作都有什么。

在 Linux 中,用户层的所有操作,都可以抽象为“主体 -> 请求 -> 客体”这么一个流程。比如,“打开 /etc/passwd”这一操作的主体是实际的用户,请求是读,客体是 /etc/passwd 这个文件。

在这个过程中,Linux 内核安全提供了基于权限的访问控制,确保数据不被其他操作获取。

2. linux中的认证/授权/审计

2.1 Linux 中的认证机制

Linux 系统是一个支持多用户的操作系统,它通过普通的文本文件来保存和管理用户信息。这其中,有两个比较关键的文件:/etc/passwd和/etc/shadow。

在 Linux 中,/etc/passwd是全局可读的,不具备保密性。因此,/etc/passwd不会直接存储密码,而是用 x 来进行占位。那实际的用户密码信息,就会存储到仅 ROOT 可读的/etc/shadow中。

认证这个功能是由 Linux 内核来提供的,所以在用户层,我们需要关心的安全问题,就是弱密码导致的身份信息泄露。

2.2 Linux 中的授权机制

在 Linux 中,客体只有文件和目录两种,针对这两种类型的客体,Linux 都定义了读、写和执行这三种权限。

Linux 系统面临的安全威胁其实就是权限问题。也就是说,要么就是敏感文件的权限配置不当,导致这些文件可以被额外的用户访问或执行;要么就是应用存在漏洞或密码泄露,导致低权限用户可以获得更高的权限。

比如说,我们可以通过 mysqld 启动 MySQL 服务,mysqld 会将 MySQL 的进程分配到“mysql”这个用户。

类似地,当启动 Nginx 时,Nginx 会将 Worker 节点以 nobody 的用户身份来执行。

2.3 Linux 中的审计机制

在 Linux 系统中,系统的日志信息通常存储在 /var/log 目录下,部分应用程序也会把相关日志记录到这个目录中。系统日志主要分为 3 类,用户登录日志、特殊事件日志和进程日志。

用户登录日志主要是/var/log/wtmp和/var/run/utmp,用来保存用户登录相关的信息。用户登录日志本身为二进制文件,我们无法直接通过文本方式查看,但是可以配合who/users/ac/last/lastlog这样的命令来获取。

特殊事件日志主要包括/var/log/secure和/var/log/message。其中,/var/log/secure主要记录认证和授权相关的记录,如果有人试图爆破 SSH,我们就可以从这个日志中观察出来。/var/log/message由 syslogd 来维护,syslogd 这个守护进程提供了一个记录特殊事件和消息的标准机制,其他应用可以通过这个守护进程来报告特殊的事件。

进程日志:当通过 accton 来进行系统进程管理时,会生成记录用户执行命令的 pacct 文件。

那如何对日志进行监控呢? 2 种常见的日志分析工具 ELK 和 Zabbix,你可以利用这些工具来监控 Linux 的安全日志。也就是说,我们可以通过在这些分析平台配置恰当的规则(如 SSH 登录尝试失败 3 次以上),来及时发现黑客的部分入侵尝试,迅速产生报警。

3. 自主访问控制(DAC)与强制访问控制(MAC)

传统上,Linux 和 UNIX 系统都采用 DAC。SELinux 是 Linux 采用 MAC 机制的一个示例。

3.1 DAC

DAC基本上,就是依据程序的拥有者与文件资源的 rwx 权限来决定有无存取的能力。 不过这种 DAC 的存取控制有几个困扰,那就是:

  • root 具有最高的权限:如果不小心某支程序被有心人士取得, 且该程序属於 root 的权限,那么这支程序就可以在系统上进行任何资源的存取!真是要命!
  • 使用者可以取得程序来变更文件资源的存取权限:如果你不小心将某个目录的权限配置为 777 ,由於对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!

3.2 MAC

为了避免 DAC 容易发生的问题,因此 SELinux引入MAC的方法。

MAC可以针对特定的程序与特定的文件资源来进行权限的控管!也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root , 而得要看当时该程序的配置而定。

如此一来,我们针对控制的『主体』变成了『程序』而不是使用者, 控制项目就细的多了

举例来说, WWW 服务器软件的达成程序为 httpd 这支程序, 而默认情况下, httpd 仅能在 /var/www/ 这个目录底下存取文件,如果 httpd 这个程序想要到其他目录去存取数据时, 除了守则配置要开放外,目标目录也得要配置成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以,即使不小心 httpd 被 cracker 取得了控制权,他也无权浏览 /etc/shadow 等重要的配置!

4. Linux安全模块LSM

Linux安全模块(英语:Linux Security Modules,简称LSM)是Linux内核的一个轻量级通用访问控制框架,LSM只是一个框架,用户可根据实际需要动态加载各种具体的安全增强功能模块。

一方面,以Linus Torvalds为代表的内核开发人员对LSM提出了三点要求:

  • 真正的通用,当使用一个不同的安全模型的时候,只需要加载一个不同的内核模块
  • 概念上简单,对Linux内核影响最小,高效
  • 能够支持现有的POSIX.1e capabilities逻辑,作为一个可选的安全模块

另一方面,各种不同的Linux安全增强系统对LSM提出的要求是:
能够允许它们以可加载内核模块的形式重新实现其安全功能,并且不会在安全性方面带来明显的损失,也不会带来额外的系统开销。

为了满足这些设计目标,LSM采用了通过在内核源代码中放置钩子的方法,来仲裁对内核内部对象进行的访问,这些对象有:任务,inode结点,打开的文件等等。
用户进程执行系统调用(open system call),首先通过Linux内核原有的逻辑找到并分配资源(look up inode),进行错误检查(error checks),并经过经典的UNIX自主访问控制(DAC checks),「恰好」在Linux内核试图对内部对象进行访问之前,一个LSM的钩子(LSM hook)对安全模块所必须提供的函数进行一个调用,并对安全模块提出这样的问题”是否允许访问执行?”,安全模块根据其安全策略进行决策,作出回答:允许,或者拒绝进而返回一个错误。
lsm架构
LSM本身不提供任何具体的安全策略,而是提供了一个通用的基础体系给安全模块,由安全模块来实现具体的安全策略。其主要在五个方面对Linux内核进行了修改:

  1. 在特定的内核数据结构中加入了安全域(Opaque Security Fields)
  2. 在内核源代码中不同的关键点插入了对安全钩子函数的调用(Calls to Security Hook Functions)
  3. 加入了一个通用的安全系统调用(Security System Call)
  4. 提供了函数允许内核模块注册为安全模块或者注销(Registering Security Modules)
  5. 将capabilities逻辑的大部分移植为一个可选的安全模块(Capabilities)

LSM本身只提供增强访问控制策略的机制,而由各个安全模块实现具体特定的安全策略。
下面简要介绍一些已经实现的安全模块:

  • SELinux。这是一个Flask灵活访问控制体系在Linux上的实现,并且提供了类型增强,基于角色的访问控制,以及可选的多级安全策略。SELinux原来是作为一个内核补丁实现的,现在已经使用LSM重新实现为一个安全模块。SELinux可以被用来限制进程为最小特权,保护进程和数据的完整性和机密性,并且支持应用安全需求。
  • DTE Linux。这是一个域和类型增强在Linux上的实现。就像SELinux一样,DTE Linux原来是作为一个内核补丁实现的,现在已经使用LSM重新实现为一个安全模块。当这个安全模块被加载到内核上时,类型被赋给对象,域被赋给进程。DTE策略限制域之间和从域到类型的访问。
    Openwall 内核补丁的LSM移植。Openwall内核补丁提供了一系列的安全特性集合来保护系统免受例如缓冲区溢出和临时文件竞争这样的攻击。有安全模块正在被开发出来以支持Openwall补丁的一个子集。
  • POSIX.1e capabilities。Linux内核中已经存在有POSIX.1e capabilities逻辑,但是LSM把这个逻辑划分到了一个安全模块中。这样的修改使得不需要的用户可以从他们的内核中把这个功能略去;也使得capabilities逻辑的开发可以脱离内核开发获得更大的独立性。
  • LIDS。这是由国人谢华刚发起的项目。开始时作为一个入侵检测系统开发,后来逐渐演变为使用访问控制系统的形式来进行入侵预防,它通过描述一个给定的程序可以访问哪些文件来进行访问控制。同样的,LIDS原来是作为一个内核补丁实现的并附带了一些管理工具,现在已经使用LSM重新实现为一个安全模块。
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值