Drupal設定
Drupal是一個開源的PHP內容管理系統,具有相當複雜的架構。它還具有強大的安全模型。感謝開發人員在社群的貢獻和維護,所以有很多詳細的文件和有關加強Drupal網站安全配置的方法。
切記,Drupal是經營網站所需的一部分。為了保護整個系統免受駭客攻擊,我們需要 要處理整套系統。它包括一些常見的伺服器設置,Web伺服器的配置,PHP和資料庫。此外,伺服器上的任何其他服務都需要正確配置。
它提供了一些提示和關鍵點,可以幫助伺服器和網站管理員審核整個系統的安全性。我們應該明白,打造一個絕對安全的系統是不可能的,但如果你堅持一些原則,它將有助於你的系統安全。
讓我們從常見的安全守則開始。它們中的大多數不僅適用於Drupal開發並且支援Drupal網站運行基礎設施的相關安全性,而且還適用於許多其他情況:
使用由一個擁有大量用戶群體的社區開發的解決方案。它可以很好地維護開源庫,流行的Linux發行版等等。始終檢查下載程式碼的完整性。
遵循最小原則,盡量不使用任何其他服務。如果你真的需要它,請安裝新軟體,並卸載所有不需要的服務。
避免編寫自訂程式碼。在開始之前,請仔細考慮是否可以避免這種情況。與Drupal開發相關的真實情況是在編寫自訂模組之前在drupal.org上搜尋現成的解決方案。
預設拒絕存取。只有在必要時,才應授予相關的存取權限。
新增具有所需權限的角色。每個角色都必須有詳細記錄。這樣,應該很容易支援和擴展整個權限框架。
不要使用root權限。在基於Linux的作業系統上,僅在需要時使用root存取權限,並透過sudo執行此操作。換句話說,你不應該以root使用者身分登入和執行。
定期對系統進行安全檢查和維護。你應該仔細分析所有可疑情況並對其作出分析。
備份!你必須始終能夠將系統還原為以前的任何狀態。此外,你需要確保系統進行有效可用的備份。
在伺服器進行適當的安全性維護之前,請勿暴露在公網上。
這些原則可以應用於任何系統和服務,無論它使用何種軟體和硬體。我們進一步討論更具體的關鍵點。
除了運行網站的Drupal之外,還需要設定PHP,Web伺服器和資料庫。你可能還需要安裝一些服務插件來擴展搜尋功能,使用快取等。
如你所見,有很多事情需要正確配置和定期維護。基於上述的情況,我們可以在一定程度上區分以下需要確保安全性的服務:
伺服器(常用的設定)
Web伺服器
PHP
資料庫
Drupal
網路上可用的任何服務的安全性始於伺服器的基本配置。對於基於Linux的伺服器,它可以使用以下的設定方法:
改變遠端登陸的設定
使用iptables設定防火牆
透過變更登入伺服器的配置,。主要目標是使這個過程與一般預設的過程有所區別。
例如,任何Linux的系統都有一個名為root的超級使用者。攻擊者可以透過ssh等爆破root的預設密碼。但是,如果伺服器管理員關閉root登錄,則此類嘗試將失敗。我們可以建立一個新用戶,而不是root用戶,然後授予他必要的權限。
大多數這個的變更都與ssh設定有關。它們通常位於/etc/ssh/ sshd_config檔中。相關配置:
Port 2345Protocol 2PermitRootLogin noPasswordAuthentication noUseDNS noAllowUsers user
它允許使用有效的使用者名稱透過ssh連接到伺服器使用2345連接埠(非默認,預設22)。它還會停用root登入和密碼身份驗證。
停用密碼驗證是提高整個系統安全性的重要步驟。無密碼身份驗證更安全。要登入伺服器,你需要在本機上產生ssh密鑰,然後將公鑰複製到伺服器。安全性更高。
iptables是Linux系統的預設防火牆。它可用於管理與指定連接埠的連線。如果我們想將網站保留在伺服器上,除了ssh連接埠之外,還需要開啟http和/或https連接埠。
預設情況下,作業系統上沒有建立規則。敲sudo iptables -L
指令(Ubuntu)將會回傳以下內容:
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
这意味着服务器接受来自任何端口上任何人的任何内容(策略默认ACCEPT)。我们可以只打开必要的端口并关闭其他没必要的端口。
sudo iptables -A INPUT -p tcp --dport 2345 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
这些命令是 接受2345,80和443端口的连接。尽管如此,我们仍然没有其他端口的其他限制。因此,你需要在最后添加一条规则,拒绝所有不需要的数据包。
sudo iptables -A INPUT -j DROP
就这样。应该记住,上面的配置可能会你使用不同的系统而有很大差异。这里的主要目标只是对基本原则的解释。更改网络配置时要小心!!!有时,你一不小心 它就拒绝任何连接。比如你不小心drop了你的ssh端口,2333。
设置Web服务器的一些一般原则。使用这些规则对于你的网站运行非常重要。通过服务器的漏洞,攻击者可以任意执行文件,上传恶意脚本并以某种骚操作运行这些脚本。
主要的原则就是 网站文件应该由非root用户运行,并且不应该由Web服务器写入(敲黑板,划重点!)。在一些情况下,Drupal目录可供Web服务器用户写入,有关保护文件权限和所有权的详细信息,请看本文末尾的“相关链接”。
有时,限制在Web服务器对网站的一些功能的访问可能是有用的。例如,在你拥有演示网站或没有注册功能的网站的情况下。你可以限制/user和/admin/ *。对于Apache Web服务器,可以使用mod_authz_host和mod_rewrite模块完成。切记,http身份验证不是一种安全的方法。因此,所描述的方法在特定情况下更适用。
服务器上的所有其他服务都存在潜在的安全风险。因此,你应该遵循最小化原则。如果你不需要什么,只需将其删除即可。
这同样适用于Web服务器。Apache和Nginx Web服务器有许多额外的插件,仔细检查已启用的扩展名列表,并删除所有未使用的扩展名。
使用HTTPS协议可以使网站和私人用户数据的访问更加安全。如今,当一些在线商店不对他们的支付交易使用加密,这是绝对不对的。而且,Google已经将HTTPS设置为排名指标。这意味着不使用HTTPS协议但还是能运行的网站,一些重要信息(信用卡,支付交易等)会对搜索排名产生负面影响。
理想情况是,如果你为与用户进行交互的所有网站加密。例如说登录和注册。用户输入密码。即使这些密码在所有浏览器中看起来都不可见(如**),它们也会以未加密的形式通过网络传递。因此,攻击者可以通过中间人方式等轻松拦截输入的数据。用户通常都是使用常用密码。这意味着也可能会影响你在对别的网站的账号。
应该清楚在什么情况下可以使用HTTP身份验证。大多数情况下,你需要它来保护对网站的缓存并禁用爬虫对该网站的索引。但是,HTTP身份验证本质上是不安全的。它不使用任何加密算法。因此,浏览器和网站之间的流量不会被加密,攻击者只需复制可以用的HTTP头并将数据包其发送到Web服务器即可访问网站。
此外,强烈建议将htpasswd文件保留在文档根目录之外。设置此文件的只读权限(440)。
PHP与服务器的其他服务一样可能包含漏洞。这在很大程度上取决于PHP本身的设置以及当前使用的PHP版本。当然,你始终需要检查所有可用的更新并保持PHP更新。但是,在某些情况下,这可能非常困难甚至是不可能的。
一般来说,优化服务器上PHP安全性的所有工作可以分为三个部分:
定期更新PHP版本
避免使用不安全的代码,功能等
优化PHP设置
这是比较容易理解的事情,但正如我所提到的,在某些情况下,更新可能非常困难甚至是不可能的。当你的应用程序中有很多祖传代码(它在新的PHP版本中不起作用)并且当前的业务不允许你花时间更新这段代码时就会主要,因为它是很耗费时间的操作。在这种情况下,你可以尝试使用下面的一些建议。
编写安全代码是服务器安全的重要一步。你应该花一些时间定期查看你所有自定义代码。此外,没有人可以保证第三方库不包含任何漏洞。正如我所提到的,即使PHP本身也存在安全性问题(使用不安全的函数,缓冲区溢出等)。
为了解决这些问题,有一个很好的玩意叫做Suhosin,它可以帮助你摆脱许多安全问题。Suhosin旨在保护服务器和用户免受PHP和PHP核心中已知和未知的缺陷的影响。它由两部分组成。第一部分是PHP核心的补丁,它提供了一些针对缓冲区溢出或格式化字符串漏洞的低级保护。第二部分是PHP扩展,它实现了一些额外的保护。
Suhosin是一个非常强大的工具,可以保护你的服务器免受许多漏洞的侵害。蛋疼的是,它不适用于PHP7.事实上,Suhosin7 正在开发,但还没有完成。作者不建议在生产服务器上使用Suhosin7。
为优化PHP安全配置,我们可以采取的两个最简单的步骤是禁用未使用的模块,并最大限度地减少用户可以获得的有关当前PHP安装的信息。
要查看所有已编译的PHP模块,请运行以下命令:
$ php -m
建议仅使用必要的模块来提高安全性。仔细检查整个列表哪些是你不需要的模块。删掉吧。
保护PHP免受黑客攻击还要隐藏有关系统的信息。看看php.ini文件中的这个配置:
expose_php = Off
确保此参数配置。否则,PHP将发送版本号到X-Powered-By
http头中的。
同样适用于网站上的PHP报错。他们可以提供有关你的服务器的一些额外信息(Web服务器版本,目录结构等)。因此,强烈建议在生产服务器上禁用此功能。
display_errors = Off log_errors = On error_log = /var/log/httpd/php_scripts_error.log
上面的设置允许你关闭显示网站发生的报错。此外,它们还会将错误记录到指定的日志中。
这些是初步步骤,可以帮助你提高在服务器上使用PHP的安全性,即使没有对系统进行任何重大修改。现在让我们谈谈你可以添加到PHP配置(php.ini文件)的一些特定配置:
file_uploads = Off #禁用文件上传
但是如果需要文件上传的功能,最好限制文件大小。
file_uploads = on upload_max_filesize = 1M
max_execution_time = 30 max_input_time = 30 memory_limit = 50M
你可以指定每个脚本的最长执行时间,最大内存量和最大数据读取时间。
allow_url_include = Off allow_url_fopen = Off
如果启用了allow_url_fopen,PHP可以使用文件函数,例如file_get_contents。有了它,PHP可以从远程服务器下载文件。
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
在禁用之前,请确保你的网站不需要其中任何一个函数。
open_basedir =“/var/www” #允许访问的目录
该open_basedir的配置允许你设置在PHP可以使用函数访问文件的目录如fopen,file_get_contents等。如果该文件是在这个目录之外,PHP将拒绝打开它。
session.save_path =“/tmp”
确保临时路径位于网站根目录之外。此外,它不能被其他系统用户读取或写入。
采取什么措施来确保数据库安全性主要取决于应用程序的基础结构。例如,Drupal的数据库抽象层使你能够在不同的数据库之间进行选择。它可以是MySQL,SQLite或PostgreSQL。此外,Drupal支持流行的MySQL分支,例如MariaDB和Percona。你应该了解每个系统可能有不同的安全规范。
还取决于你安置数据库的位置。最简单的(在安全性方面)是在拥有网站的同一台服务器上安装数据库。但是,这种方法可能会影响整个系统的性能,因此服务器管理员可能决定在另外的服务器上安装数据库(站库分离)。对于高负载应用尤其如此。
完成服务器环境配置后,你应该做的第一件事是检查你的架构是否足够强大,并且不容易被DoS攻击破坏。事实上,即使在其工作负载的高峰期,服务器也应该有一些资源储备。
正如我之前提到的,数据库安全性设置的具体情况具体取决于所选的数据库 在本文中,我们来看一些一般性措施:
数据库访问
如果数据库是在本地安装的,则可以禁用从网络访问它。如果你的数据库位于单独的服务器上,则应该可以设置它将侦听的IP地址。如果在Web服务器和数据库服务器之间共享LAN,则仅设置LAN IP地址(无法通过Internet访问)。可以通过编辑my.conf文件来完成。下面是为数据库和网站使用相同服务器时的配置示例。bind-address=127.0.0.1
数据库,用户和权限
查看数据库,用户和权限,以查找任何安全的缺陷。不要为用户提供超出实际需要的权限
PHPMyAdmin和类似工具,确保在使用完后禁用图形工具再使用数据库。如果你打算继续使用这些工具,请尝试尽可能难以访问它们。例如,你可以通过.htaccess限制对PHPMyAdmin的访问,并通过白名单允许从某些可信IP地址进行访问。此外,你可以尝试使用MySQL Workbench等本地工具,而不是使用Web类型的。
Drupal有一个非常复杂的架构。为了确保这个复杂系统的安全性,最好将所有相关工作分成小部分。在此操作期间,你将遇到仅需要执行一次的配置(设置文件权限,配置settings.php文件等)。将会有一些需要定期关注的任务(更新Drupal和模块)。也许其他人会要求你与Drupal社区密切合作。
以下是你应该记住的两个关键时刻:
确保Drupal安全并不是一件容易的事情,但它对任何网站都非常重要。所以,你一定要努力做到这一点。安全需要你用心的关注。
确保Web服务器对Drupal文件没有写入权限。只有缓存文件,上传,session和临时目录才需要写入权限。以下命令授予对公共文件目录(Ubuntu或者 Debian)的写权限:
$ chown -R www-data:www-data sites / default / files
如果你的网站允许上传文件,请注意如何确保使用这些文件的过程。仅允许上传某些文件类型。相对安全的是文本文件和图片。但是,这并没有改变用户可以上传恶意代码的事情,例如具有.jpg或.txt扩展名的文件。要避免此问题,你可以尝试安装ClamAV模块,该模块可以扫描上传的文件以查找病毒和其他恶意代码。
初始安装后,请确保settings.php文件没有写入权限。有关此信息可在相关公告(admin/reports/status in Drupal 8)中找到。
在settings.php中,你可以设置一个重要选项,以防止特殊的攻击(https://www.drupal.org/node/1992030)。这种类型的攻击称为HTTP POST Header攻击。为了保护Drupal 7网站免受他们的影响,请在你的设置中添加基本URL参数:
$ base_url ='http://www.example.com';
Drupal 8中类似的配置是:
$settings['hash_salt'] = file_get_contents('/home/example/salt.txt');
Drupal提供了一种监控网站状态的机制。这里我的意思是最近的日志消息和报告。尝试定期检查这些日志并修复发现的问题。报告非常有用,尤其是在安装网站后。例如,如果你忘记添加可信主机设置或者对settings.php文件具有写访问权限,它可以通知你。
只需查看“最近的日志消息”页面,即可跟踪某些类型的可疑活动。举一个例子,想象一下当你注意到新用户注册激增时的情况。
不要忘记禁用PHP错误的回显。普通用户不应该看到它们。虽然你可能会在“最近的日志消息”页面上看到这些错误,但请记住它不会捕获所有PHP错误。因此,有时请检查你的服务器日志文件。
Drupal核心和贡献模块的变化
这部分是关于Drupal核心和贡献模块的黑客攻击。实际上,一个众所周知的事实是,新开发人员可能会偷工减料并将他们的代码或一些更改直接放入Drupal核心或已安装的贡献模块中。这可能会导致Drupal本身的不可预测行为,以及漏洞的出现,或者恶意存放后门。
为了摆脱这些问题,我建议使用Hacked!模块。该模块扫描当前安装的Drupal,贡献的模块和主题,并将所有内容与drupal.org中的相应版本进行比较。如果你安装了Diff模块,请使用Hacked!会告诉你有什么放生了改变。这让hacked!模块是任何网站宝贵的分析工具。
Drupal具有直观且可自定义的权限模型。权限是此类系统中最简单的元素。一组权限可以按角色类型分组。然后可以将此角色类型分配给特定用户。在更新Drupal核心和贡献模块期间可能会出现新的权限和角色类型。你应定期检查(例如更新后)为你的网站上的每个用户分配的角色类型以及这些角色类型中包含的权限。尝试最小化每个角色中包含的权限。不要为用户提供超出实际需要的权限。
一个好的配置是使用非默认用户名(例如不是admin或root),因为黑客将首先尝试默认的用户名。为了更高的安全性,甚至可以完全禁用管理员帐户。
另一件好事是检查你网站上的用户活动并锁定非活跃帐户。用户过期模块提供了定义特定用户帐户将被锁定的功能。此外,它可以锁定在一段时间内处于非活跃状态的帐户。
以上是如何分析Drupal配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!