我听说基于 Linux 的系统更安全。显然它们没有病毒,也不需要防病毒软件。甚至我的大学也声称这一点 - 他们拒绝在服务器上安装 Windows,这真是太可惜了,因为我们想使用 .NET 框架来创建一些网站。
我认为 Linux 更安全的唯一原因是它是开源的,因此理论上错误会更快地被发现和修复。
我对操作系统的工作原理了解一点,但还没有真正深入研究过 Linux 和 Windows 如何实现其操作系统。有人能解释一下基于 Linux 的系统更安全的区别吗?
答案1
我不认为操作系统是“安全的”。操作系统的特定配置对攻击具有一定程度的抵抗力。
我可能会因为在这里成为“微软辩护者”而受到指责,但这个帖子对于“Windows”的概括非常生硬,而这些概括并不正确。
Windows 1.0 - 3.11、95、98 和 ME 均基于 DOS。此操作系统系列在形式上没有任何安全性(受保护的地址空间、内核/用户模式分离等)。幸运的是,当我们今天谈论“Windows”时,我们谈论的不是这些操作系统。
Windows NT 系列操作系统(Windows NT 3.5、3.51、4.0、2000、XP、2003、Vista、2008 和 7)自 1992 年首次发布以来就具有非常合理的“设计内置”安全系统。该操作系统的设计考虑了 TCSEC“橙皮书”,虽然并不完美,但我认为它的设计和实施都相当合理。
Windows NT 从一开始就是“多用户”的(尽管直到 Windows NT 3.51 时代的 Citrix WinFrame 才实现了多个用户同时从同一台服务器接收图形用户界面的功能)。内核/用户模式分离,地址空间保护依赖于 MMU 和 CPU 的底层硬件功能。(我想说它非常“Unix-y”,但实际上它非常“VMS-y”。)
NTFS 中的文件系统权限模型相当“丰富”,尽管它在“继承”方面存在一些缺陷(或缺乏继承——请参阅如何解决 NTFS 移动/复制设计缺陷?),直到最近 10 年左右,Unix 风格的操作系统才实现了类似的功能。(Novell NetWare 在这一点上击败了微软,尽管我认为 MULTICS 击败了他们两家……>微笑<)
服务控制管理器,包括控制启动/停止/暂停服务程序的权限系统设计得非常好,并且比许多 Linux 发行版中的各种“init.d”脚本“架构”(更像是“君子协议”)在设计上更加强大。
执行对象管理器(参见http://en.wikipedia.org/wiki/Object_Manager_(Windows)),它与 /proc 文件系统和 /dev 文件系统的组合大致相似,具有与文件系统类似的 ACL 模型,并且比我所知道的任何 Linux 发行版上的 /proc 或 /dev 的权限模型要丰富得多。
虽然我们可以争论注册表的优点和缺点,但注册表中键的权限模型比设置 /etc 目录中文件权限的模型要精细得多。(我特别喜欢 Rob Short 在“代码背后”访谈中对注册表的评论:http://channel9.msdn.com/shows/Behind+The+Code/Rob-Short-Operating-System-Evolution Rob 最初是 Windows 注册表背后的主要人员之一,我认为可以肯定地说,他对事情的结果并不一定满意。)
Linux 本身只是一个内核,而 Windows 更类似于 Linux 发行版。您这样比较就像是在比较苹果和橘子。我同意 Windows 比某些基于 Linux 的系统更难“精简”。另一方面,某些 Linux 发行版也附带了许多“垃圾”。随着各种“嵌入式”Windows 版本的出现,可以(尽管不是向公众开放)构建与 Microsoft 默认行为不同的 Windows“发行版”(排除各种服务、更改默认权限等)。
各个版本的 Windows 都存在默认设置选择不当、允许未经授权的用户获取特权的错误、拒绝服务攻击等问题。Unix 内核(以及默认以 root 身份运行的大量基于 Unix 的应用程序)也存在同样的问题。自 Windows 2000 以来,微软在简化应用程序划分、以最低特权运行程序以及删除操作系统不需要的功能方面做得非常出色。
简而言之,我想说的是,在安全性方面,特定操作系统的具体配置比您使用的操作系统类型更重要。Windows 和 Linux 发行版在安全功能方面具有非常相似的功能。您可以在任一操作系统中应用可靠的安全技术(最小权限、可选组件的有限安装、加密安全身份验证机制等)。无论您实际上做或者不是——这才是最重要的。
答案2
另一件没有提到的事情是,Windows 的安全性比 Linux 的安全性更加不透明。
例如,我可以查看几个文本文件,并准确了解我的 Web 服务器正在运行什么。IIS?不太好 - 您可以通过 GUI 工具查看配置结果,但存在隐藏设置。然后,您必须使用一组不同的工具来查看文件的 ACL,等等。
这与 Windows 世界中的大多数程序一样 - 很难快速了解注册表与 ACL 之间究竟是什么影响了运行时环境。
答案3
不知道那个文件权限比较...当我是 UNIX/Linux 管理员时,NT4 的文件 ACL 比 UNIX/Linux 传统的“777”样式权限更细粒度。当然,权限并不是一切,我相信现代 Linux 发行版至少提供了细粒度的 ACL,即使它们不是默认实现的。在我看来,sudo 和 root 概念一直存在于 UNIX 中,尽管 Windows 一直在稳步添加这些概念,现在可能已经不相上下了。
我自己的看法是,由于 Linux 内核代码及其许多驱动程序和实用程序都是开放的,因此很可能经过了更广泛的审查,并且更频繁地修复了可能导致黑客可以利用的远程漏洞的编码错误。在我看来,这种理论认为,由于 Linux 不属于任何公司,因此它可以比公司更充分地探索安全目标。企业必须赚钱;而开源组织则没有这种限制。
进入 Linux 系统并简单地关闭整个窗口系统、RPC 守护程序等要容易得多 - 您可以将基于 Linux 或 BSD 的系统缩减为一个或两个开放端口,并安装最少的软件包,同时仍然非常容易地拥有一个非常有用的系统。这可能与 UNIX 作为开发人员操作系统的传统有关;一切都是模块化构建的,而不是过度互连。这会导致一个更可配置的系统,您可以简单地删除不相关的东西。我认为以这种方式强化 Windows 服务器并不容易。
OpenBSD 小组将这一理念发挥到了极致。该计划的首要目标是检查每一行代码是否存在安全漏洞。事实证明,由于这种近乎狂热(我使用这个词是出于尊重)的对细节的关注,OpenBSD 多年来发现的漏洞数量极少。
尽管各个公司都制作出色的软件(在我看来,MSSQL、Exchange、Windows Server 2003 都很棒),但目标却不同。
答案4
服务器安全不仅仅是操作系统。我认为服务器安全中更重要的因素是运行服务器的人,以及他们在锁定方面有多谨慎。
也就是说,如果大学是 Linux 商店,那么无论您在 Windows 服务器安全性方面找到什么数据,他们都不会让您使用 Windows 服务器。如果您想使用 .Net 框架,我会研究使用 Mono (www.mono-project.com)。