这是关于保护LAMP堆栈的规范问题
保护LAMP服务器的绝对准则是什么?
这是关于保护LAMP堆栈的规范问题
保护LAMP服务器的绝对准则是什么?
Answers:
David的答案是服务器强化一般原则的良好基线。正如戴维指出的,这是一个巨大的问题。您采用的特定技术可能在很大程度上取决于您的环境以及服务器的使用方式。警告,这可能需要在测试环境中进行大量工作才能构建并正确完成。其次是将很多工作集成到您的生产环境中,更重要的是,将其集成到业务流程中。
但是,首先,请检查您的组织是否具有任何强化策略,因为这些策略可能是最直接相关的。如果不是,则根据您的角色,这可能是构建它们的绝佳时机。我还建议从下至上分别处理每个组件。
L
有很多好的指南可以帮助您。此列表可能会或可能不会帮助您,具体取决于您的分布。
该A
Apache可以是有趣的安全。我发现,与Apache或PHP相比,强化操作系统和维护可用性更容易。
M
P
This完全融入了“安全编程实践”的整个思想,这是其自身的一门完整学科。SANS和OWASP上有关该主题的信息非常荒谬,因此我不会在此处重复。我将专注于运行时配置,让您的开发人员担心其余的事情。有时,LAMP中的“ P”是指Perl,但通常是PHP。我假设是后者。
坦率地说,您已经提出了一个值得该主题的书籍的问题。但是,有些通用的基本准则很有效:
希望对您有所帮助。
这是我喜欢的一个很好的清单。
补充David的建议,您的安装越模块化,即意味着限制对专门为一项任务创建的某些用户/组的访问并限制其范围,则LAMP堆栈越安全:例如,有一个Apache用户用于具有相应权限设置的Apache文件/文件夹,而不是可以访问关键系统文件/文件夹的任何组。可以访问与要服务的网站关联的MySql表的用户,并且只能访问这些表。此外,您可以限制其访问权限,以使来自PHP调用的访问量最少。另外,请确保通过PHP文件使用/公开的MySQL用户名与其他用户使用的用户名或密码不同。
这意味着什么:如果apache用户或MySql用户受到威胁,则它们在apache可以访问的文件夹范围之外(在apache用户的情况下)和表外部都不会造成任何危害( (一个或多个)/数据库(对于MySQL数据库的用户而言)。
如果要以某种方式破坏MySQL用户,例如,他们将无法访问数据库并从MySQL删除所有数据库并破坏所有数据。在某些情况下,他们可能会删除表或在隔离的数据库中的某些表中插入信息,这就是为什么仅在绝对必要的情况下才授予表访问权限,并仅授予所需的权限的重要性……无需具有删除表特权或更新特权,则不必将其授予该用户。
另外,如果出于某种原因找到了MySQL的管理帐户用户名和密码,并且您使用的用户名与系统上的其他用户名不同,则它们必须首先破坏系统的安全性,然后才能进入数据库进行破坏。apache用户和对文件的访问也是如此。
时间示例!我将举一个系统示例来简化该想法。
说您的系统上有用户(应该通过umod -l或passwd -l等禁用root用户的安全性):john,barney,terence和lisa。
您可以在MySQL中使用bigbird的名称创建一个用户(确保使用哈希密码)。Bigbird仅具有选择权限和更新权限,而没有拖放或创建权限,当然也没有。 另外,您创建了另一个名为garfield的管理MySQL用户,用于在MySQL数据库上工作,并且从MySQL数据库中删除了根用户,以免对其造成威胁。加菲猫已被批准。MySQL权限(实际上,这只是重命名root)。
现在,您创建一个apache组或一个用户,我们将其称为apweb2。Appweb2不是其他组的成员,并且apache的所有文件/文件夹都存储在/ home / apweb2 /中。每个虚拟主机将具有其自己的子文件夹,并且每个这些主机的文档根目录都将设置为该子文件夹。符号链接将被禁用,以免意外提供对系统其余部分的访问。
另外,您可以将ssh访问权限仅限制为某些用户(或某些组,我喜欢将它们放在ssh组中,并使该用户只能使用ssh)。
另外,您可以选择哪些用户具有sudo特权来进一步限制操作。您可以进一步采取的另一步骤是,使所有无法使用sudo的ssh用户,可以创建可以使用不能使用ssh的sudo的特殊用户,以便一旦使用ssh,就必须登录另一个用户才能拥有访问sudo。
因此,通过模块化每个段,如果一个段被攻破,整个堆栈就不会被攻破,您可以解决第一个问题,而不必从头开始。
我发现来自SANS.org的该文档确实很有帮助http://www.sans.org/score/checklists/linuxchecklist.pdf