无论按照什么标准对Windows和Linux进行评估,都存在一定的问题:每个操作系统都不止一个版本。微软的操作系统有Windows98、 Windows NT、 Windows 2000、 Windows 2003 Server和Windows CE,而Linux的发行版由于内核(基于2.2、2.4、2.6)的不同和软件包的不同也有较大的差异。我们本文所使用的操作系统,都是目前的技术而不是那些"古老"的解决方案。
对于用户来说,Linux和Windows的不断更新引发了两者之间的竞争。用户可以有自己喜欢的系统,同时也在关注竞争的发展。微软的主动性似乎更高一些,这是由于业界"冷嘲热讽"的"激励"与Linux的不断发展。微软将在下几个月对Windows安全进行改观,届时微软会发布Windows XP的 Service Pack2。这一服务包增强了Windows的安全性,关闭了原先默认开放的许多服务,也提供了新的补丁管理工具,例如:为了避免受到过多无用的信息,警告服务和信使服务都被关闭。大多数情况下,关闭这些特性对于增强系统安全性是有好处的,不过很难在安全性与软件的功能性、灵活性之间作出折衷。
最显著的表现是:微软更加关注改进可用性的同时增强系统的安全性。比如:2003年许多针对微软的漏洞攻击程序都使用可执行文件作为电子邮件的附件(例如MyDoom)。Service Pack2包括一个附件执行服务,为Outlook/Exchange、 Windows Messenger和Internet Explorer提供了统一的环境。这样就能降低用户运行可执行文件时感染病毒或者蠕虫的威胁性。另外,禁止数据页的可执行性也会限制潜在的缓冲区溢出的威胁。不过,微软在Service Pack2中并没有修改Windows有问题的架构以及安全传输的部分,而是将这部分重担交给了用户。
Service Pack2的另一个新特性是能够卸载浏览器的多余插件,这需要终端用户检查并判断需要卸载哪些插件。 Outlook/Exchange可以预览电子邮件消息,因此用户可以在打开之前就将电子邮件删除。另一个应用安全的增强,防火墙在网络协议栈之前启动。对于软件开发者来说,远方过程调用中权限的改变,使得安全性差的代码难以工作正常。
Service Pack2也为Windows用户提供了许多华丽的新特性,但是问题仍然存在:这些特性会不会对管理员甚至是终端用户造成负担?是不是在增加了Windows操作系统代码安全性的同时让系统变得更加复杂?
Linux和Windows对于代码透明度这一哲学问题上是完全不同的。Linux符合GNU通用公用许可证,用户可以拷贝、复制并分发源代码。 Windows使用的是封闭源代码,因此微软的安全方法被称为"通过隐藏来保证安全"。2001年,微软为了响应客户与共享源代码计划的要求,提供了对 Windows源代码的访问权。现在,共享源代码计划有一百万的参与者,可以访问的源代码包括Windows2000、WindowsXP、 Windows Server2003、Windows CE 3.0、Windows CE 、C#/CLI实现和ASP.NET与Visual Studio.NET。共享源代码计划许可证的对象包括公司用户、政府、合作者、学术机构与个人。
Linux v2.6内核的一个主要变化,就是新增的Linux安全模块(LSM),用户不需要打内核补丁就能为Linux增加更多的安全机制。新版内核,在LSM 上建立了多个访问控制机制,其中包括美国国安局(NSA)的Securiy Enhanced Linux(SELinux)。由于国安局对操作系统安全与强制访问控制的兴趣,产生了SELinux。国安局的研究人员正在开发Linux的安全模块,可以支持2.6内核的类型加强、基于脚色的访问控制、多层次安全。SELinux使用了命为"域类型强制"的安全模型,可以将应用程序互相隔离,同时也与基本的操作系统隔离,从而限制入侵后程序或者网络服务造成的影响。
Linux v2.6还提供了对加密安全的支持,包括了IPSec使用的加密API。这样,在网络和存储加密时就可以使用多种算法(例如:SHA- 1、 DES、三重DES、MD4、HMAC、EDE、和Blowfish)。Linux对IPSec IPv4和IPv6协议的支持是一个很大的进步。由于安全抽象到了协议层,用户程序对潜在攻击程序的脆弱性有所降低。密码加密模块目前还不是Linux内核的一部分,如果Linux真的实现了这样的特性,就可以阻止未签名的模块被内核访问。
Linux 在LSM之上构建了多种访问控制机制,例如:为应用程序建立了单独的空间,使它们之间相互分离,也与基本的操作系统隔离,这样即使应用程序出现了安全问题也不会影响操作系统。Linux的基本安全也可以通过应用程序增强,比如Tripwire(可以定期对系统进行关键文件的完整性检查,如果文件的内容或者属性有变化就通知系统管理员)。