当我在网上搜索有关 Linux 安全性的信息时,最典型的解释是:Linux 是安全的,因为访问内核和安装新应用程序需要 root 密码——因此,外部恶意软件只要管理员是唯一知道密码的人。
好的,听起来不错。但是,当密码是唯一介于受限访问和系统完全控制之间的东西时,系统真的那么安全吗?我的意思是黑客想到的各种访问系统的技巧,尤其是泄露数据(密码)的技巧。
当我在网上搜索有关 Linux 安全性的信息时,最典型的解释是:Linux 是安全的,因为访问内核和安装新应用程序需要 root 密码——因此,外部恶意软件只要管理员是唯一知道密码的人。
好的,听起来不错。但是,当密码是唯一介于受限访问和系统完全控制之间的东西时,系统真的那么安全吗?我的意思是黑客想到的各种访问系统的技巧,尤其是泄露数据(密码)的技巧。
“Linux”(作为所有安装的集合)通常不仅仅是一个拒绝外部访问的密码。
首先,有一套统一的自主访问控制:读/写/执行权限,用于用户/组/其他所有人。传统上,这些权限是实际使用的,而不是被忽略和/或变通的。此外,某些安装子集已安装、配置和运行SELinux,以便执行更细粒度的访问控制列表样式的权限。
其次,服务器通常以指定的特殊用户身份运行。NTP进程以用户“ntp”身份运行。例如,Web 服务器进程以用户“http”运行,MySQL数据库以用户“mysql”运行。上面描述的任意访问控制几乎总是阻止 NTP 用户 ID 做更多的事情,而不仅仅是读取一些 HTTP 用户 ID 的文件。
第三,软件安装基础高度分散。有大量不同的分布。之后,并不是每个安装都运行 Apache HTTPD 或 sendmail SMTP 服务器。有替代方案,通常只有多个安装与给定的服务器。软件版本也高度分散。由于每个发行版都编译和维护自己选择的 Web 服务器,两个安装运行具有相同错误甚至相同编译选项的服务器的情况非常非常罕见。
因此,例如,通过WordPress密码猜测来追踪 Linux 机器的人可能会猜到 WordPress 密码。这可能会让攻击者以用户“http”或“apache”的身份运行。尽管这可能是糟糕和可怕的,但这并不是一切。“http”或“apache”用户几乎可以肯定根本无法覆盖很多文件,只能覆盖 HTML 和 DocumentRoot 目录中的文件。这将需要另一个飞跃,猜测某些发行版的“root”密码,或者利用本地权限升级,来获得某种通用文件访问权限。
这确实是多层的,但请注意,这主要是文化和传统,也是一种“群体免疫”。某些漏洞利用组合总是有可能在给定系统上产生 root 访问权限,但这种组合可能不适用于许多其他系统。
当我在网上搜索有关 Linux 安全性的信息时,最典型的解释是:Linux 是安全的,因为访问内核和安装新应用程序需要 root 密码——因此,外部恶意软件只要管理员是唯一知道密码的人。
你是对的,使系统安全的不是密码,而是工具和文化(但我们不要完全忽视密码)。您越容易让人们设置和管理用户组、帐户和权限,就越容易让系统变得安全。
在早期的 Windows 版本(1)中,拥有一个具有所有权限的用户帐户是常态。没有密码,完全的管理员权限。这基本上意味着乔叔叔可以做任何他需要做的事情,而不必担心诸如提升特权之类的事情。这也意味着任何能够以他的名义执行的代码都可以自由控制机器。如果他们愿意的话,这取决于个别程序来实施故障保险和“你真的,真的确定吗?”框。
相比之下,Unix/Linux 在设计上一直是多用户系统。它们的构建理念是存在具有不同安全要求的不同角色:
管理员维护系统。他们可能需要升级操作系统、修改程序、添加/删除组和权限……所有这些意味着他们需要几乎不受限制的访问。
用户是系统服务的日常消费者,上面的乔叔叔。他们使用软件写信、阅读文件、上网、玩游戏等等。他们可以在一定程度上安装软件,但仅限于他们自己的影响范围内;他们不能修改系统软件或库。
运行的服务通常也有自己的用户帐户,因为它们往往有非常有限的、明确定义的需求。MySQL将需要一些它可以写入的目录、一个可以打开的网络端口等等,但它不需要访问 Uncle Joe 的文档或覆盖/修改软件(甚至它自己)的能力。
因此,即使正在运行的服务(例如 HTTP 服务器)受到威胁,如果它本身没有在最高权限下运行,它所能造成的持久损害的数量也是有限的。这种在有限特权下运行的心态使它成为一个更安全的系统。
好的,听起来不错。但是,当密码是唯一介于受限访问和系统完全控制之间的东西时,系统真的那么安全吗?我的意思是黑客想到的各种访问系统的技巧,尤其是泄露数据(密码)的技巧。
这有点像说保险库不安全,因为拥有这种组合的人可以进入。
不过,你说得有道理。成为root,获得完全访问权限。
任何有人需要特殊访问权限的系统都会为该人留下被冒充的空间。这就是为什么任何受密码保护的系统的第一条规则是不要泄露密码。
您可以使用一些缓解策略来限制受损 root 帐户的损害,例如仅将特定 IP 地址范围列入白名单、每隔一段时间更改一次密码,或者不考虑密码而禁止某些角色提升为 root。
这并不完美。但它肯定胜过乔叔叔的无密码管理员帐户。
(1)但是 Windows Vista 和更高版本不也做出这种区分吗?甚至在 Windows Vista 之前,具有单独权限的单独帐户也可用,但根据我的经验,并不常用。
没有安全的系统。只有系统可能对特定类型的攻击足够安全,并且攻击场景可能会迅速变化。
Linux 作为桌面系统从低采用率中获利,这意味着您不是大规模攻击的有吸引力的目标。此外,它还提供了更好的安全边界分割,也就是说,通常仅单击确定以管理员身份执行某些操作是不够的。您还必须显式设置文件的可执行权限以使其成为可执行文件,因为此属性不是像 Windows 中那样从文件名派生而来。
Linux 作为服务器系统也可以是安全的,但不幸的是,许多管理员只是相信 Linux 是安全的,而不是安全的。例如,他们不会每天更新系统上的所有软件、检查日志文件等。这通常使 Linux 成为攻击易受攻击的 Web 应用程序(WordPress 插件等)的容易目标。一旦攻击者以这种方式获得本地用户的访问权限,通常也很容易成为 root。近年来,Linux 的提权漏洞已经足够多,可以利用。
因此,Linux 可以为许多任务提供足够的安全性,但不要相信炒作,只需安装系统然后忘记它。并且不要相信 Windows 是不安全的——最近的版本也可以变得足够安全,但你仍然必须知道你在做什么并保持一切都是最新的。
根据要求,一些关于如何保持系统(Linux 和 Windows)足够安全的提示。网上可能有更多资源,但根据我的经验,这些是要点:
我认为这个 Q/A 站点可能不是讨论整个 Linux 安全性的最佳场所,但是:
选择一个好的 root 密码当然是最重要的,尤其是当您允许其他用户访问您的系统时。最后,它只是另一层安全性。
否则,最好不要对 root 帐户的保护期望过高。