Russ Winter 知道如何正确安装、配置和保障网站安全。毕竟,这是他的工作,而且他擅长于此。Russ 也了解人,他非常擅长与我们共事。Russ 将幽默的类比与科技课程相结合,使学习变得更加轻松愉快。如果你跟随这个系列,你将保证学会正确的网站管理,或者了解澳大利亚。无论如何,这将值得你花时间。

为什么鸭嘴兽由这么多不同的部分组成?
(对于非澳大利亚人来说,翻译为:“我还需要了解什么才能成功运营一个 Joomla! 网站?”)

WOW!这是一个巨大的主题,有可能涵盖所有主题,从所有角度回答所有你的问题吗?不幸的是,答案将是“否”,很抱歉让任何人失望。能否涵盖大量主题,在广泛的范围内,通过一点自我研究跨网络或很可能是通过 Joomla! 网站我们将能够为你指明正确的方向并给你一个起点?“是的”,绝对可以!

除了一些显著例外,Joomla! 框架本身实际上在最近一段时间内一直是安全性最高、功能最一致的开放源代码应用程序之一,同时也有最活跃、最全面的支援系统支持它。然而,大多数社区遇到的困难很大程度上被证明是围绕着多种多样的托管配置和使用 Joomla! 的不同方法, hence the Platypus pun.

有一种观点认为:“但为了我能使用Joomla!我需要  <输入你的问题>  这可能会使我的网站或服务器暴露于风险之中”。这个说法在论坛帖子中总是名列前茅,涵盖了从权限、PHP设置、Web服务器配置甚至操作系统选择许多方面的Web服务,因此对于许多经验丰富的网站所有者来说,安全和网站完整性可能有点像地雷区。让我们看看是否可以至少澄清围绕这个说法及其底层组件和许多影响其结果的变量的误解或都市传说。

对于那些曾经经历过我在论坛上的激辩的人来说,我非常主张计划和准备,如果你看过我在论坛上的许多帖子,你会注意到问题解决并不总是我的首要任务,但确保它不再发生以及从经验中学习往往是的,通过这一点我意思是两件事。
 
    1. 做事情之前要计划
    2. 做完事情后为可能发生的事件做准备
    3. 为事情不如预期制定计划
    4. 为未来不可预见的效应准备恢复

让我们从头开始,为安装制定计划,虽然Joomla!安装程序使得这个过程非常简单,但仍然重要的是要完全理解安装过程中所做选择的要求和影响。这个计划不需要像“战争与和平”那样庞大,或者像“宾虚”那样的史诗,但应该涵盖关键点,并且如果你计划运行多个Joomla!实例或多个网站,可以重复使用。

首先,决定需要做什么,由谁来做,以及何时做,一种清单形式。


    1. 你有没有从JoomlaCode获取最新1.5版本,或者你已经从1.0迁移了?

    2. 你是否了解并清楚Joomla!的基本要求
        - 对于Joomla!1.5

    3. 你计划使用哪些扩展,并且是否了解它们的要求
        - 这些选择也可能决定你使用哪个版本的Joomla!

    4. 你的服务器是否有限制?
        - 你是否就此与你的主机提供商交谈过?PHP、MySQL、权限等

    5. 如果需要,你知道在哪里可以找到常见信息和帮助吗?
        - Joomla!帮助和常见问题解答,1.5版本的安装指南和Joomla!论坛

    6. 有问题吗?
        - 你有在论坛上搜索吗?许多常见问题和问题可以通过简单的搜索解决,你并不孤单。

这个计划将突出任何潜在的障碍,如果有,需要克服才能成功。它还将确保一些基本事项要么已经到位,要么至少列入待办事项清单,例如,你可能有的外部要求:

  • 托管环境要求
  • 要使用的MySQL数据库名称
  • 账户和数据库密码
  • 第三方扩展要求
  • Joomla!管理员账户访问和保护
  • 账户和密码约定


在安装完成后且在生产环境启动之前,准备应对某些可能发生的事件,这些事件可能包括:如果您的网站因服务器问题或硬件故障而损坏,或者通过漏洞被篡改。您的托管服务是否进行了可靠的备份?您知道备份存储在哪里吗?如何恢复备份?备份是否有效?备份多长时间进行一次?备份了哪些内容?存储在哪里?在紧急情况下如何访问备份?如果发生完全灾难,网站或服务器故障,您如何恢复?除了基本的备份策略外,您如何监控问题或潜在风险。托管服务是否部署了入侵检测或保护措施?您是否有权限访问站点日志?

测试环境和沙盒
如果您之前从未安装过Joomla!,那么现在多花一些时间来测试和准备安装或在自己的计算机上设置一个测试环境可能会在以后带来回报。有几个选项可以提供单一安装或一站式设置基本测试环境,有时也被称为沙盒。

对于Apple Mac,有MAMP;对于Linux,您可以使用LAMP;对于Windows,有WAMP,这些安装和使用都相对简单。随着您变得越来越熟悉或经验丰富,您可能希望单独安装每个用于网站托管所需的应用程序,这样可以更多地控制配置和设置,但通常每个独立的包都提供了大量的配置选项,因此您可能能够非常精确地重现您的实时网站环境。


这类包包含了开始使用基本网站托管风格环境所需的大部分内容,并为您提供了一个本地测试床,您可以在其中安装多个Joomla!副本进行测试和开发,而不必担心会损坏实时网站。这些沙盒环境还有一个额外的好处,就是提供了使用实时网站备份的机会,测试新的扩展或模板,以及在不影响实时网站的情况下熟悉Joomla!。

在某种程度上,本地沙盒也可以用作生产网站的本地备份,如果您确保本地副本与生产网站上的任何更改保持同步。


什么时候负鼠不是负鼠? 
(对于非澳大利亚人来说,翻译为:“什么时候鸭子不再是鸭子?”)

好的,让我们从顶部继续,这个讨论点总是一个非常争议性的话题,并且在论坛中被无限讨论,仍然存在很多混淆。让我们看看是否能在这里澄清一些事情; 


在Joomla!安装程序中,“可写”的含义是什么?
在安装过程中,Joomla!安装程序会检查托管环境中的多个条件,其中最有争议的是,某些目录为了完全运行,需要是“可写”的。

这就是我们所说的负鼠,即“可写”这个术语。不幸的是,随着时间的推移,这个术语通常被理解为权限必须是“777”或“全局可写”。实际上,这并不一定是正确的或必需的,而且在大多数情况下,这无疑会在您的网站甚至整个服务器上造成安全漏洞。

与任何Web应用程序一样,包括Joomla!,大多数情况下只需要目录对应用程序可读就足够用于正常运行并能够通过Web浏览器向最终用户交付内容。但是,如果网页或应用程序需要能够通过Web服务器向磁盘写回任何数据,那么就需要“可写”。不过,这个说法总是有“但是”的部分....(现在您可以看到混淆是如何出现的)这很大程度上取决于Web服务器的配置。世界上有许多不同的配置,我们都以略微不同的方式设置机器,符合自己的口味和经验,但托管公司通常使用的主要三种配置如下

1. 如果您的服务器已经安装了SuExec工具,这意味着共享的网页服务器可以以您自己的用户账号访问您的网站,因此如果需要将任何数据从网站写回,您自己账号的权限应该足够,在这种情况下,目录应该是755,文件应该是644,或者更小,Joomla!安装程序将会正确地将目录显示为“可写”。

2. 然而,如果没有安装SuExec工具,但是您的用户账号使用了网页服务器的组权限,或者网页服务器可以访问您账号的组权限,那么您可能需要将需要写入的目录设置为775,其他所有目录仍然设置为755,还有一些文件(可能需要写入的文件)设置为665,所有其他文件设置为644。

3. 如果您的托管服务器没有运行SuExec工具,并且网页服务器无法访问您的账号组权限,那么虽然这最初看起来对安全性很有好处,因为网页服务器无法以可写模式访问您的文件,但这现在强制使用了一些不太安全的权限来允许目录或文件写入操作。在这种情况下,为了使所需的目录或文件被视为可写,目录可能需要配置为“757”或“777”,一些文件为“646”、“666”甚至“777”。

如果选项2或3是您唯一的选择,为了降低提高权限的风险,您可以考虑使用Joomla! 1.5中的新FTP层。(我们将在后续文章中讨论并尝试解决权限和所有权查询问题。)

那么我们从这次练习中学到了什么?首先,也是最重要的一点,不是所有的服务器都一样,不是所有的管理员都有相同的经验,一些管理员可能在同一时间既好又坏。因此,在选择网页托管时,可以提前询问一些问题:

1. 您的服务器是否运行了phpSuExec或SuExec?

2. 为了允许对象被写入,可以设置的最大权限是什么?
- 在SuExec环境中,许多更好的托管服务完全禁用了“777”的使用,出于安全考虑,这是件好事

3. 您运行的是哪个版本的PHP,您在服务器上禁用了register_globals吗?
- 您在这里希望得到的回复是较新版本的PHP5,并且是的,我们在服务器级别禁用了register_globals,额外的评论“并且我们不允许用户级别启用它们”也是一个好兆头。

4. 您采取了哪些措施来保护我的网页空间不受通用入侵或攻击?
- 大多数负责任的托管服务不会透露他们入侵检测或保护方法的具体细节,但是每台服务器上使用硬件和软件防火墙、入侵检测和暴力破解应用程序总是好的,实施Apache mod_security和PHP suhosin都是好兆头,不要忘记像反垃圾邮件和反病毒应用程序这样的项目。

5. 对于我的网站,有哪些数据保护和备份程序?
- 许多主机使用硬件或软件RAID(我们稍后会详细介绍)来为服务器恢复目的保持磁盘的即时自动副本,尽管方便且是一个不错的功能,但RAID镜像并不能保护您的网站免受损坏或攻击,它们仅仅是复制到副本中。备份(这些稍后也会介绍)才是这里重要的部分,备份有多种类型,但需要注意的亮点是“持续数据保护”,这意味着当您的网站发生更改时,它们会持续备份并可以恢复到之前的版本。定期生成备份副本也很重要,这意味着您将拥有多个可以在需要时恢复的备份,所有备份都有不同的时间,比如每天、每周和每月都是常见的,这意味着您可以从昨晚,或者从现在到一周内的任何晚上,或者从上个月恢复网站。

什么是"SuExec"或"phpSuExec"?
好吧,这个术语需要分解为它的两个组成部分,"su"和"exec"或"php"。术语"su"代表"switch User"(切换用户),这个工具为WebServer提供了一个在当前运行的用户和托管账户下的用户之间切换的功能。因此,在临时基础上,WebServer可以利用与您相同的文件权限,如果您有权限允许写入特定文件,那么当WebServer代表您执行命令时,它会获取这些权限,而无需提升"组"或"其他"权限,并保持文件仍归您的账户所有。

工具中的"Exec"部分代表代表您的托管用户账户执行命令或操作,只要php base_directory设置正确配置,这就总是意味着当这些命令以您的用户身份执行时,它们只能在与您的账户相关的目录内操作,而不能在服务器上的其他目录(其他用户的账户)操作,从而保护您的文件不被其他用户访问。无论是设置为phpSuExec还是SuExec,都只是决定了它是仅适用于PHP还是适用于所有WebServer请求,无论预处理引擎是什么。纯粹的phpSuExec工具意味着只有在PHP请求时,WebServer才能在用户账户上操作,因此不会通过WebService暴露直接的操作系统命令,所以如果安装了phpSuExec,限制PHP可以运行的系统命令也是建议的。这是通过PHP指令"disabled_functions"完成的。

天哪,我只是想运行一个网站,而不是成为一个正宗的极客...   构成网站的部分有很多,有些需要掌握,有些需要特定的或通用的知识和经验,有些只需一般的了解。希望在这之后的系列文章中,事情会变得更容易理解,但回想一下学习骑自行车或开车,当时也有很多要掌握的,但你做到了(可能偶尔会摔一下),现在一切都很好。