Rumah >Operasi dan penyelenggaraan >Keselamatan >Bagaimana untuk menganalisis konfigurasi Drupal
Konfigurasi Drupal
Drupal ialah sistem pengurusan kandungan PHP sumber terbuka dengan seni bina yang agak kompleks. Ia juga mempunyai model keselamatan yang kukuh. Terima kasih kepada sumbangan dan penyelenggaraan pembangun dalam komuniti, terdapat banyak dokumentasi dan kaedah terperinci untuk mengukuhkan konfigurasi keselamatan laman web Drupal.
Ingat, Drupal diperlukan untuk menjalankan tapak web anda. Untuk melindungi keseluruhan sistem daripada penggodam, kita perlu berurusan dengan keseluruhan sistem. Ia termasuk beberapa tetapan pelayan biasa, konfigurasi pelayan web, PHP dan pangkalan data. Selain itu, sebarang perkhidmatan lain pada pelayan perlu dikonfigurasikan dengan betul.
Ia menyediakan petua dan perkara penting yang boleh membantu pentadbir pelayan dan tapak web mengaudit keselamatan keseluruhan sistem. Kita harus faham bahawa adalah mustahil untuk mencipta sistem yang benar-benar selamat, tetapi jika anda mematuhi beberapa prinsip, ia akan membantu menjadikan sistem anda selamat.
Mari kita mulakan dengan peraturan keselamatan biasa. Kebanyakannya boleh digunakan bukan sahaja untuk pembangunan Drupal dan menyokong infrastruktur berkaitan keselamatan tapak web Drupal yang menjalankan infrastruktur, tetapi juga untuk banyak situasi lain: Penyelesaian dibangunkan komuniti. Ia mengekalkan perpustakaan sumber terbuka, pengedaran Linux yang popular dan lebih baik lagi. Sentiasa semak integriti kod yang dimuat turun.
Ikut prinsip minimalisme dan cuba untuk tidak menggunakan sebarang perkhidmatan lain. Jika anda benar-benar memerlukannya, pasang perisian baharu dan nyahpasang sebarang perkhidmatan yang anda tidak perlukan.
Elakkan menulis kod tersuai. Sebelum anda memulakan, pertimbangkan dengan teliti sama ada keadaan ini boleh dielakkan. Realiti yang berkaitan dengan pembangunan Drupal adalah untuk mencari penyelesaian siap pakai di drupal.org sebelum menulis modul tersuai.
Akses ditolak secara lalai. Hak akses yang berkaitan hendaklah diberikan hanya apabila perlu.
Tambahkan peranan dengan kebenaran yang diperlukan. Setiap peranan mesti didokumenkan secara terperinci. Dengan cara ini, ia sepatutnya mudah untuk menyokong dan memanjangkan keseluruhan rangka kerja kebenaran.
Jangan gunakan keistimewaan root. Pada sistem pengendalian berasaskan Linux, gunakan akses root hanya apabila diperlukan dan lakukan ini melalui sudo. Dengan kata lain, anda tidak sepatutnya log masuk dan jalankan sebagai root.
Lakukan pemeriksaan dan penyelenggaraan keselamatan pada sistem dengan kerap. Anda harus menganalisis dan menganalisis semua situasi yang mencurigakan dengan teliti.
Sandarkan! Anda mesti sentiasa boleh memulihkan sistem anda kepada mana-mana keadaan sebelumnya. Selain itu, anda perlu memastikan bahawa sistem anda mempunyai sandaran yang sah dan boleh digunakan.
Jangan dedahkannya kepada rangkaian awam sehingga pelayan telah menjalani penyelenggaraan keselamatan yang betul.
Prinsip ini boleh digunakan pada mana-mana sistem dan perkhidmatan, tanpa mengira perisian dan perkakasan yang digunakannya. Kami selanjutnya membincangkan perkara penting yang lebih khusus.
Selain Drupal menjalankan tapak web, PHP, pelayan web dan pangkalan data juga perlu dikonfigurasikan. Anda juga mungkin perlu memasang beberapa pemalam perkhidmatan untuk melanjutkan keupayaan carian, menggunakan caching, dsb.
Pelayan (konfigurasi biasa)
Pelayan Web
PHP
Pangkalan Data
Drupal
Pelayan (Tetapan Biasa)
Tukar konfigurasi log masuk jauh
Gunakan iptables untuk menyediakan tembok api
Kebanyakan perubahan pada ini adalah berkaitan dengan tetapan ssh. Mereka biasanya terletak dalam fail /etc/ssh/sshd_config. Konfigurasi berkaitan:
Port 2345Protocol 2PermitRootLogin noPasswordAuthentication noUseDNS noAllowUsers user
Ia membenarkan sambungan ke pelayan melalui ssh menggunakan nama pengguna yang sah menggunakan port 2345 (bukan lalai, lalai 22). Ia juga melumpuhkan log masuk akar dan pengesahan kata laluan.
Melumpuhkan pengesahan kata laluan ialah langkah penting untuk meningkatkan keselamatan keseluruhan sistem anda. Pengesahan tanpa kata laluan adalah lebih selamat. Untuk log masuk ke pelayan, anda perlu menjana kunci ssh pada mesin tempatan anda dan kemudian menyalin kunci awam ke pelayan. Lebih keselamatan.
Sediakan tembok api menggunakan iptables
iptables ialah tembok api lalai untuk sistem Linux. Ia boleh digunakan untuk menguruskan sambungan ke port tertentu. Jika kita ingin menyimpan laman web pada pelayan, sebagai tambahan kepada port ssh, kita juga perlu membuka port http dan/atau https.
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),因为黑客将首先尝试默认的用户名。为了更高的安全性,甚至可以完全禁用管理员帐户。
另一件好事是检查你网站上的用户活动并锁定非活跃帐户。用户过期模块提供了定义特定用户帐户将被锁定的功能。此外,它可以锁定在一段时间内处于非活跃状态的帐户。
Atas ialah kandungan terperinci Bagaimana untuk menganalisis konfigurasi Drupal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!