为什么基于 Linux 的操作系统被认为比 Windows 更安全?

ech*_*aze 19 security linux windows

我听说基于 Linux 的系统更安全。显然他们没有病毒,也不需要防病毒软件。甚至我的大学也声称这一点 - 他们拒绝在他们的服务器上安装 Windows,这真是一种耻辱,因为我们想使用 .NET 框架来创建一些网站。

我认为 Linux 更安全的唯一原因是因为它是开源的,所以理论上错误会被更快地捕获和修复。

我对操作系统的工作原理有所了解,但还没有真正深入研究 Linux 和 Windows 如何实现其操作系统。有人可以解释使基于 Linux 的系统更安全的区别吗?

Eva*_*son 55

我不认为操作系统是“安全的”。操作系统的特定配置对攻击具有特定程度的抵抗力。

我可能会因为在这里成为“微软的辩护者”而受到抨击,但这个帖子非常倾向于对不正确的“Windows”的概括。

Windows 1.0 - 3.11、95、98 和 ME 基于 DOS。这一系列操作系统在形式上没有任何安全性(受保护的地址空间、内核/用户模式分离等)。幸运的是,当我们今天谈论“Windows”时,我们不是在谈论这些操作系统。

自 1992 年首次发布以来,Windows NT 系列操作系统(Windows NT 3.5、3.51、4.0、2000、XP、2003、Vista、2008 和 7)已经“设计”了一个非常合理的安全系统。设计时考虑到了 TCSEC“橙皮书”,虽然不完美,但我确实认为它的设计和实施相当不错。

  • Windows NT 从一开始就是“多用户”(尽管直到 Windows NT 3.51 时代的 Citrix WinFrame 才出现多个用户同时从同一服务器接收图形用户界面的功能)。存在内核/用户模式分离,地址空间保护依赖于 MMU 和 CPU 的底层硬件功能。(我会说它非常“Unix-y”,但实际上它非常“VMS-y”。)

  • NTFS 中的文件系统权限模型非常“丰富”,虽然它有一些相对于“继承”(或缺乏继承——请参阅如何解决 NTFS 移动/复制设计缺陷?)的问题,但直到在过去 10 年左右的时间里,Unix 风格的操作系统已经实现了类似的功能。(Novell NetWare 在这一点上击败了微软,虽然我认为 MULTICS 击败了他们两个......>微笑<)

  • 服务控制管理器,包括控制访问启动/停止/暂停服务程序的权限系统设计得非常好,在设计上比各种“init.d”脚本“架构”(更像“绅士协议”)要健壮得多") 在许多 Linux 发行版中。

  • 执行对象管理器(见 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 都有其选择不当的默认设置、允许未经授权的用户获得特权的错误、拒绝服务攻击等。同样的问题。自 Windows 2000 以来,Microsoft 做了一项了不起的工作,它使划分应用程序、以最低权限运行程序以及删除不需要的操作系统功能变得更加容易。

简而言之,我想我想说的是,在安全方面,给定操作系统的特定配置满足您的需求,比您使用的操作系统类型更重要。Windows 和 Linux 发行版在安全功能方面具有非常相似的功能。您可以在任一操作系统中应用可靠的安全技术(最低权限、可选组件的有限安装、加密安全身份验证机制等)。不管你是否真的这样做了——这才是最重要的。

  • *慢拍* +1 (3认同)

chr*_*ris 16

另一件未提及的事情是 Windows 中的安全性比 Linux 中更加不透明。

例如,我可以查看几个文本文件,并准确了解我的 Web 服务器正在运行的内容。信息系统?没有那么多 - 您可以通过 GUI 工具查看配置结果,但存在隐藏设置。然后,您必须使用一组不同的工具来查看文件上的 ACL,等等。

Windows 世界中的大多数程序都是一样的 - 很难快速了解注册表和 ACL 之间究竟是什么影响了运行时环境。


Kyl*_*yle 11

不知道文件权限比较...当我是 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 在我的书中都很棒),只是有不同的目标。

  • 是的; Windows ACL 比没有 ACL 的 Linux/Unix 粒度更细(尽管大多数现代版本确实可以选择使用 ACL)。显着的区别在于人们倾向于以管理员身份登录 Windows——这仍然是公司提供的 XP 笔记本电脑的标准设置——而 Linux/Unix 上的人不会以 root 身份执行大多数操作。与 Windows 相比,这限制了在 Linux/Unix 上可以造成的损害 - 默认情况下。如果有人一直以 root 身份运行,则所有赌注都将取消(除非他们迟早会发生令人遗憾和后悔的事故)。 (5认同)
  • 我完全不同意。自 Windows NT 4.0 以来,我已经使用有限的用户帐户部署了数以千计的桌面。“RunAs”有点类似于“sudo”,自 Windows 2000 以来一直存在于操作系统中(“右键单击,运行方式功能”)。我会说用户帐户控制是一个愚蠢的功能,不应该包含在操作系统中。微软做错了事,让作为“管理员”运行变得“更安全”,而不是让它变得更加困难和痛苦,同时鼓励开发人员编写不糟糕的软件(即需要“管理员”权限)。 (3认同)
  • 我的客户站点上的 Vista 用户永远不会看到 UAC,因为他们以受限用户帐户的身份运行。如果您以“管理员”身份运行,则只会看到 UAC。您可以使用组策略禁用 UAC,但您永远不需要。 (2认同)

Sau*_*iya 9

在我看来,如果配置得足够好,基于 Linux 的系统比 Windows 系统更安全。其中一些原因是:

  1. 透明和丰富的简单网络工具:例如,Linux管理员通过在shell上输入“iptables -L -n”可以很容易地看到当前的防火墙配置。您还可以通过从其他 Linux 机器运行“nmap”来查看机器上打开了哪些端口。这使生活变得更加轻松,因为您可以非常准确地指定允许访问哪些端口以及从哪些地址等。

  2. 一个位置的文本日志文件:一个位置“/var/log”中的基于文本的日志文件易于备份和分析。还有像 logwatch 这样可以监视这些日志文件并向您发送重要行的工具使事情变得非常容易。我们甚至可以编写自己的工具来分析日志文件并找到我们感兴趣的信息。如果我们不希望日志出现在同一台服务器上,日志甚至可以导出到远程 syslog 服务器。

  3. 不用担心病毒:Linux 中的病毒较少是因为基于 Linux 的系统较少,还是因为所有用户都喜欢 Linux,或者因为 Linux 更安全。原因并不重要。如果最终 Linux 的病毒威胁较小,那么 Linux 是一件好事。我亲眼看到人们在同一台机器上安装了两个防病毒软件、反间谍软件和反广告软件。所有这些保护工具都会占用大量 CPU 和内存。

  4. 支持多种编程语言:在 Linux 中编写代码非常容易。C、C++、Python、Perl、Java 等无需安装任何附加包即可工作。(如果您安装像 Fedora 这样的大型发行版,这是 DVD 版。)它增加了安全性,因为我们可以通过编码执行重复性任务。因此,如果出错并且出现问题,则所有帐户都会出现问题,并且很容易检测和修复。如果我们必须手动对大量帐户/目录进行相同的更改,我们可能会在一两个错误中出错,并且可能需要很长时间才能找到此类错误。我们也可以纠正错误并使用代码查找简单的错误。由于所有配置文件、用户信息文件、日志文件等都是文本文件,因此可以很容易地编写我们想要实现的任何内容,并且有很多方法可以完成相同的事情。

  5. 开源代码:由于可能很多人都看过该代码,因此 Linux 附带的应用程序中很少包含某些间谍软件/广告软件。如果安全性对某些服务非常重要,您还可以查看源代码并查看它是如何工作的。如果你确切地知道它是如何工作的,那么你就会知道它的局限性以及它何时会被打破。事实上,如果有众所周知的安全限制,这些限制会记录在手册页、软件包网站和配置文件的注释中。开发人员没有什么可说的,如果您在这种情况下使用我们的工具,那么它是有风险的。对于销售软件的组织来说,告诉软件限制可能不会有利可图,这会使他们的软件看起来很糟糕,并可能降低销售/利润。

  6. 免费和互操作性:虽然这与安全性无关。对于成本很重要的大学,基于 Linux 的系统比基于 Windows 的系统经济得多,并且无需购买操作系统的许可证,以及安装操作系统后我们将安装的其他软件。就互操作性而言,我们可以从 Linux 机器连接到其他操作系统并轻松共享文件。在linux中我们可以挂载很多文件系统,包括FAT、NTFS、HFSPLUS。我们可以使用 ftp、http、ssh、samba、nfs 等共享东西,所有这些东西都可以安装,或者可以用一个命令安装。其他操作系统通常只提供一种共享内容的选项。

但是如果没有正确配置基于 Linux 的系统会导致更多的问题,那么你可以想象。许多用户可以同时登录机器,几乎所有的事情都可以从 shell 中完成。如果防火墙配置不当,很容易留下后门、木马。攻击者可以删除日志文件或篡改它们以隐藏其踪迹。攻击者可以在被攻击的机器上编码,因为一旦攻击者拥有 shell 访问权限,所有编辑器、编译器、调试器都可以随时使用。所有服务器 ftp、http 都可以从用户帐户运行,但不能在安全端口 (1-1024) 上运行。因此攻击者可以下载http服务器代码,编译它并在端口6000上运行http服务器,使其看起来像X服务器。

因此,如果管理员知道他在做什么,或者至少在进行一些新更改之前不费心地在手册页和文档中查找信息,那么 Linux 系统会更加安全。


Ada*_*and 6

服务器安全不仅仅是操作系统。我会说服务器安全的一个更大的因素是运行服务器的人,以及他们对锁定事物的谨慎程度。

也就是说,如果大学是一家 Linux 商店,无论您在 Windows 服务器安全性上找到什么数据,他们都不会让您使用 Windows 服务器。如果您想使用 .Net 框架,我会使用 Mono (www.mono-project.com) 进行调查。


vdb*_*oor 6

透明度

  • 运行ps auxf,您就知道在哪个帐户下运行了哪些服务。
  • 运行netstat -lnp您就知道哪些程序打开了哪些 TCP 端口。
  • 运行iptables -L你就知道你的防火墙有什么规则了。
  • 运行stracelsof检查进程活动。
  • 运行ls -lahtree -pug,您会确切地知道完整文件夹具有哪些所有权和权限。
  • 日志已存在/var/log,可以通过简单的“搜索文件”进行检查。
  • 没有隐藏设置。一切都是人类可读的/etc。搜索文本文件,或归档它们,或应用版本控制(subversion/git)真的很容易。

清除权限系统

  • 在基础中,只有文件权限。没有“对正则表达式键的权限”、继承的 ACL 权限、每个进程的安全上下文或其他隐藏功能。
  • 权限位很简单:
    • 写入文件 = 编辑文件内容
    • 写入文件夹 = 创建/重命名/删除文件节点。
    • 粘性 = 仅编辑自己的文件。
    • 具有执行或 setuid 权限的文件被突出显示(在ls彩色模式下)。
  • 一个简单的“查找所有文件”揭示了用户拥有的权限。
  • 此外,ACL 只能在需要时使用。
  • 默认情况下,用户帐户只有两个地方可以写入文件:他们的$HOME/tmp.

高级安全选项

  • SELinux / AppArmor 可以限制进程只访问一组特定的文件(在文件权限之上)
  • Chroot jail 使管理员能够运行与其他程序完全隔离的程序。就好像它安装在一个空硬盘上一样,只有它真正需要的文件。
  • 使用sudo,可以授予用户和进程仅运行少数管理命令的权限。

入口和特权提升的单点

  • 一个进程不能自己获得更多的权限。唯一的方法是运行另一个“SetUID Root”程序,例如sudo或联系首先检查 PolicyKit 的 DBus 服务。可以使用单个“搜索所有文件”命令找到这些 SetUID 程序。
  • 进程之间的 IPC 受到相当大的限制,从而减少了攻击向量。
  • 访问系统(文本控制台、远程桌面、RPC、删除命令调用等)都通过ssh. 这是一个带有公钥/私钥检查的 SSL 隧道。

安全的后台进程

  • 后台服务尽快以较低的权限运行。Apache、Dovecot 和 Postfix 等服务会尽快将传入连接移交给低权限进程。
  • 默认锁定。Microsoft 现在也在 Windows Server 2008 中采用了这种方法。

好的审计工具

  • 喜欢的工具nmapncat进行安全审计容易。
  • 可以从命令行审核后台服务。
  • 日志审计工具很常见。
  • 编码安全服务更容易,因为可以以模块化方式完成。
  • 有很多免费的入侵检测工具可用。
  • 命令行工具设计为可编写脚本,因此管理员可以自动执行任务。

良好的安全更新

  • 操作系统的每个部分都会收到安全更新。当通过包管理器安装 Apache、Python 或 PHP 时,它们也会得到更新。
  • 安全更新修复的内容非常开放,因此您可以弄清楚这对您有何影响。
  • 软件包都共享相同的库。他们不运送单独的副本,留下可利用的版本。
  • 没有补丁星期二,等待黑客已经在野外利用漏洞的修复。
  • 开发人员很容易测试和部署安全更新。
  • 无需安排重新启动即可进行更新。当现有进程继续访问磁盘上的旧数据时,可以替换文件。之后您可以找出哪些服务需要重新启动 ( lsof | grep =)。
  • 整个操作系统无需重装即可升级!

这里提到的所有东西都是交付的或每个主流 Linux 发行版,即 Red Hat、Debian、openSUSE 或 Ubuntu。


Den*_*asi 5

Linux 从一开始就被设计为多用户系统,因此它的权限系统比 Windows 强得多。它还旨在让您不以管理权限(root 访问权限)运行,因此所有程序都设计为不需要权限。这意味着如果您的帐户被盗用,则整个系统都不会被盗用。

部分原因也可能是因为运行 Linux 的人(一般来说)技术含量更高,因此不太可能犯导致计算机被黑客入侵的愚蠢错误。

  • 好的,我已经使用 Linux 12 年以上,使用类 UNIX 操作系统的时间更长。尽管我喜欢 Linux,但你不能说它比 Windows 拥有更强大的*权限*系统。它比早期的 Windows 版本具有更好的安全模型(即,并不总是管理员),但 WinNT 和更高版本具有强大的权限系统,但使用起来效果不佳。最近的 Linux 版本有 selinux,它更强大,但这是一个相对较新(如果非常强大)的补充。 (7认同)
  • 多用户和单用户操作系统之间的一些区别:http://jdurrett.ba.ttu.edu/courseware/opsys/os01a.htm (2认同)

chm*_*eee 5

'安全是关于控制'

在我看来,在 Windows 中您的控制权比在 Linux 中要少。强化 Windows 是......更难:)。尽管任何工具都取决于使用者的技能,但我会考虑以下几点:

  • Windows 具有更多高危漏洞和更多自动利用(病毒、僵尸网络)
  • Windows 管理员是(或应该是)偏执狂(因为害怕被入侵)并且已经做出了某种强化
  • Linux 系统管理员有时过于信任操作系统的安全性而忘记了加固
  • 一旦被黑,在 Linux 系统中你可以做的比在 Windows 系统中做的更多,因为有更强大的命令行工具

因此,尽管我确实更喜欢 Linux 而不是 Windows,但我认为您不应该相信默认安装。