戴文的Linux内核专题:04 安全

Linux内核是所有Linux系统的核心。如果有任何恶意代码控制或破害了内核的任何一部分,那么系统会严重受损,文件可能被删除或损坏,私人信息可能被盗等等。很明显,保持内核安全涉及到用户的最大利益。值得庆幸的是,由于Linux内核极其安全,Linux是一个非常安全的系统。在用户比例上,Linux病毒比Windows病毒更少,并且Linux用户比Windows用户个人更少感染病毒。(这就是为什么许多公司使用Linux来管理他们的服务器的一个原因。) 然而,我们仍然没有借口去忽视内核的安全。Linux有几个安全特性和程序,但本文只讨论Linux安全模块(LSM)及其它的内核安全特性。

AppArmor(应用盔甲)最初是由Immunix写的安全模块。自从2009年以来,Canonical维护着这些代码(Novell在Immunix之后,Canonical以前管理这些代码)。这个安全模块已经从2.6.36版本进入Linux主分支之中。AppArmor限制了程序的能力。AppArmor使用文件路径来跟踪程序限制。许多Linux管理员称AppArmor是最容易配置的安全模块。然而,而许多Linux用户觉得这个模块与其它的替代品相比很糟糕。

安全增强Linux(SELinux)是AppArmor的替代品,它最初由美国国家安全局开发(NSA)。SELinux自从2.6版本就进入内核主分支中。SELinux是限制修改内核和用户空间的工具。SELinux给可执行文件(主要是守护进程和服务端程序)最小特权去完成它们的任务。SELinux也可以用来控制用户权限。SELinux不像AppArmor那样使用文件路径,而SELinux在追踪权限时使用文件系统去标记可执行文件。因为SElinux本身使用文件系统管理可执行文件,所以SELinux不能像AppArmor那样对整个文件系统提供保护。

注意:守护进程是在后台运行的程序

注意:虽然在内核中有AppArmor、SELinux及其它安全模块,但只能有一个安全模块被激活。

Smack是安全模块的另一种选择。Smack从2.6.25起进入内核主分支。Smack应能比AppArmor更安全,但比SELinux更容易配置。

TOMOYO,是另外一个安全模块,在2.6.30进入内核主分支。TOMOYO可以提供安全防护,但是它的主要用途是分析系统安全缺陷。

AppArmor、SELinux、Smack和TOMYO组成了四个标准Linux安全模块。这些都通过使用强制访问控制(MAC : mandatory access control)工作,这种访问控制是通过限制程序或者用户执行一些任务来实现的。安全模块还有某些形式的列表规定了它们可以做什么不可以做什么。

Yama在Linux内核中一个新安全模块。Yama还没有作为标准的安全模块,但是在将来他会成为第5个标准安全模块。Yama和其他安全模块一样使用相同的机制。

“grsecurity”是一系列Linux内核安全补丁的集合。多数补丁用于处理远程网络连接和缓冲区溢出的安全问题(以后讨论)。grsecurity中有一个叫PaX的有趣组件。PaX补丁允许内存里的代码使用最少的所需权限。例如,存储程序的内存段被标为不可写。想想看,为什么一个可执行的程序需要在内存中是可写的?通过这个补丁,恶意代码就不能修改目前正在执行的程序。缓冲区溢出是一种当程序由于bug或者恶意代码在内存上写入数据,并让它的内存边界超出到其他程序的内存页上的安全事件。当Pax被激活时,它会帮助阻止这些缓冲区溢出,因为程序没有写到其他内存页上的权限了。

Linux入侵检测系统(LIDS)是一个内核安全补丁,提供了强制访问控制(MAC)的特性。这个补丁就像扮演LSM模块的角色。

Systrace是一个减少和控制应用程序访问系统文件和系统调用的工具。系统调用是对内核的服务请求。比如,当一个文本编辑器写入一个文件到硬盘上时,程序将会发送一个系统请求让内核写入文件到硬盘中。

这些是在Linux安全系统中非常重要的组件。这些安全模块和补丁使内核免于受到恶意代码的攻击。没有这些特性,Linux系统将会变成一个不安全的操作系统。

 原文发布时间为:2013-11-01

时间: 2024-11-10 07:55:30

戴文的Linux内核专题:04 安全的相关文章

戴文的Linux内核专题:22 配置内核 (18)

戴文的Linux内核专题:22 配置内核 (18) 你好!准备好阅读下一篇文章了么?在本篇中,我们将会讨论辅助显示.辅助显示是一些小的LCD屏幕:大多数小于或等于128x64.接着,我们会讨论用户空间IO驱动,一些虚拟驱动,Hyper-V,开发中驱动,IOMMU,和其他一些内核特性. 第一个配置辅助显示的驱动是"KS0108 LCD Controller".KS0108 LCD Controller是由三星制造的图形控制器. 下面可以设置LCD并口地址(Parallel port wh

戴文的Linux内核专题:23 配置内核 (19)

戴文的Linux内核专题:23 配置内核 (19) 欢迎进入Linux内核系列文章的下一篇!我们正在接近配置过程的终点.在这篇文章中,我们将会讨论固件驱动和文件系统驱动. 这个分类中的第一个驱动是寻找启动盘(BIOS Enhanced Disk Drive calls determine boot disk).有时,Linux不会知道哪个盘是启动盘.这个驱动允许内核询问BIOS.Linux接着在sysfs上存储信息.Linux需要知道这些来设置bootloader. 即使BIOS EDD服务被编

戴文的Linux内核专题:28 编译与安装

戴文的Linux内核专题:28 编译与安装 你好!在花费了大量的时间在配置你需要的内核后,你现在可以编译它了.源代码是纯文本形式的C代码.这对人来可读但是对机器可不是这样.编译会将代码转换成计算机可理解的一种称之为二进制码的形式(1是 [开],0 是 [关]).编译同样会将所有内核代码文件变成一个内核的文件. 为了编译内核,在内核源代码相同目录下,在终端内输入"make".这会花费一些时间.完成之后,必须通过"make modules"来编译模块.为了从一开始就简化

戴文的Linux内核专题:26 配置内核 (22)

戴文的Linux内核专题:26 配置内核 (22) 你好!本篇我们将继续配置"kernel hacks",接着我们会配置整个安全系统. Alpha和s390处理器需要配置下一个特性(Force weak per-cpu definitions).这个特性修复了一个在这类处理器中普遍存在的寻址问题.其他的处理器无需启用这个特性. 内核转储可以用这个特殊的调试工具测试(Linux Kernel Dump Test Tool Module).这个软件会允许内核开发者触发一个假错误来导致内核转

戴文的Linux内核专题:16 配置内核 (12)

戴文的Linux内核专题:16 配置内核 (12) 欢迎来享受Linux内核配置系列下一部分.如你所猜到的那样,内核支持大量不同的硬件.协议和特性. 下一组我们要讨论的特性是"EEPROM support".电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory)是一种掉电或者意外关闭后不会擦除内容的存储器. 内核支持在I2C卡上的EEPROM芯片包括FRAMs.ROMs和SRAMs (I2C EEPROMs /

戴文的Linux内核专题:27 配置内核 (23)

戴文的Linux内核专题:27 配置内核 (23) 欢迎来到内核配置的下一章!本篇中我们会配置密码API,虚拟化和运行库.密码学指的是在需要的计算机之间加密和安全通信的科学.用户可能加密数据以保证是收件人而不是黑客收到数据. Linux内核需要在内核中启用"Cryptographic algorithm manager"(密码算法管理器).这个特性提供了操作内核的加密特性所需的软件. 当启用这个它,用户空间提供了配置加密特性(Userspace cryptographic algori

戴文的Linux内核专题:25 配置内核 (21)

戴文的Linux内核专题:25 配置内核 (21) 大家好!本篇我们将会配置Linux内核的网络文件系统支持.网络文件系统是一个可以通过网络远程访问计算机的远程文件系统. 首先,"NFS client support"驱动允许linux系统使用NFS网络文件系统.这里还有3个不同版本的NFS - (NFS client support for NFS version 2). (NFS client support for NFS version 3). (NFS client supp

戴文的Linux内核专题:02 源代码

在下载并解压内核源代码后,用户可以看到许多文件夹和文件.尝试去找一个特定的文件或许是一个挑战.谢天谢地,源代码以一个特定的方式组织的.这使开发者能够轻松找到任何文件或者内核的一部分. 内核源代码的根目录下包含了以下文件夹 arch block crypto Documentation drivers firmware fs include init ipc kernel lib mm net samples scripts security sound tools usr virt 还有一些文件

戴文的Linux内核专题:03 驱动程序【转】

转自:http://www.lai18.com/content/432194.html 驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序.没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件). Linux的内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序.驱动文件夹中的每个文件夹会在下面说明.在配置和 编译内核时,这样有助于你了解驱动程序.否则,用户可能会在编译时加入不必要的或者漏掉重要的驱动.驱动代码通常会包含一个单