Maison >Opération et maintenance >Sécurité >Comment analyser la configuration Drupal
Configuration Drupal
Drupal est un système de gestion de contenu PHP open source avec une architecture assez complexe. Il dispose également d’un modèle de sécurité solide. Grâce aux contributions et au maintien des développeurs de la communauté, il existe de nombreuses documentations détaillées et méthodes pour renforcer la configuration de sécurité des sites Drupal.
N'oubliez pas que Drupal est requis pour faire fonctionner votre site Web. Pour protéger l’ensemble du système contre les pirates informatiques, nous devons nous occuper de l’ensemble du système. Il comprend certains paramètres de serveur courants, la configuration des serveurs Web, PHP et des bases de données. De plus, tous les autres services sur le serveur doivent être configurés correctement.
Il fournit quelques conseils et points clés qui peuvent aider les administrateurs de serveurs et de sites Web à auditer la sécurité de l'ensemble du système. Nous devons comprendre qu’il est impossible de créer un système absolument sécurisé, mais si vous respectez certains principes, cela contribuera à sécuriser votre système.
Commençons par les règles de sécurité communes. La plupart d'entre eux conviennent non seulement au développement Drupal et à la prise en charge de l'infrastructure liée à la sécurité de l'infrastructure d'exploitation du site Web Drupal, mais également à de nombreuses autres situations :
Utilisez une solution développée par une communauté avec une large base d'utilisateurs. Il gère les bibliothèques open source, les distributions Linux populaires et bien plus encore. Vérifiez toujours l’intégrité du code téléchargé.
Suivez le principe du minimalisme et essayez de ne pas utiliser d'autres services. Si vous en avez vraiment besoin, installez un nouveau logiciel et désinstallez tous les services dont vous n'avez pas besoin.
Évitez d'écrire du code personnalisé. Avant de commencer, réfléchissez bien à la question de savoir si cette situation peut être évitée. La réalité liée au développement Drupal est de rechercher des solutions toutes faites sur drupal.org avant d'écrire un module personnalisé.
L'accès est refusé par défaut. Les droits d'accès pertinents ne devraient être accordés que lorsque cela est nécessaire.
Ajoutez des rôles avec les autorisations requises. Chaque rôle doit être documenté en détail. De cette façon, il devrait être facile de prendre en charge et d’étendre l’ensemble du cadre d’autorisations.
N'utilisez pas les privilèges root. Sur les systèmes d'exploitation basés sur Linux, utilisez l'accès root uniquement lorsque cela est nécessaire et faites-le via sudo. En d’autres termes, vous ne devez pas vous connecter et exécuter en tant que root.
Effectuer des inspections de sécurité et un entretien réguliers sur le système. Vous devez analyser et analyser soigneusement toutes les situations suspectes.
Sauvegarde ! Vous devez toujours être en mesure de restaurer votre système à n'importe quel état antérieur. De plus, vous devez vous assurer que votre système dispose de sauvegardes valides et utilisables.
N'exposez pas le serveur au réseau public tant qu'une maintenance de sécurité appropriée n'a pas été effectuée.
Ces principes peuvent être appliqués à n'importe quel système et service, quels que soient les logiciels et le matériel qu'ils utilisent. Nous discutons ensuite de points clés plus spécifiques.
En plus de Drupal qui exécute le site Web, PHP, le serveur Web et la base de données doivent également être configurés. Vous devrez peut-être également installer certains plug-ins de service pour étendre les capacités de recherche, utiliser la mise en cache, etc.
Comme vous pouvez le constater, il y a beaucoup de choses qui doivent être configurées correctement et entretenues régulièrement. Sur la base de la situation ci-dessus, nous pouvons distinguer dans une certaine mesure les services suivants qui doivent assurer la sécurité :
Serveur (configuration commune)
Serveur Web
PHP
Base de données
Drupal
La sécurité de tout service disponible sur Internet commence par la configuration de base du serveur. Pour les serveurs basés sur Linux, il peut utiliser les méthodes de configuration suivantes :
Modifier la configuration de la connexion à distance
Utiliser iptables pour configurer le pare-feu
En modifiant le configuration de la connexion au serveur, . L'objectif principal est de rendre ce processus différent du processus normal par défaut.
Par exemple, tout système Linux a un superutilisateur nommé root. Un attaquant peut pirater le mot de passe par défaut de root via ssh, etc. Cependant, si l'administrateur du serveur désactive la connexion root, ces tentatives échoueront. Au lieu de root, nous pouvons créer un nouvel utilisateur et lui accorder les autorisations nécessaires.
La plupart des modifications apportées sont liées aux paramètres ssh. Ils se trouvent généralement dans le fichier /etc/ssh/sshd_config. Configuration associée :
Port 2345Protocol 2PermitRootLogin noPasswordAuthentication noUseDNS noAllowUsers user
Il permet de se connecter au serveur via ssh en utilisant un nom d'utilisateur valide utilisant le port 2345 (non par défaut, 22 par défaut). Il désactive également la connexion root et l'authentification par mot de passe.
La désactivation de la vérification du mot de passe est une étape importante pour améliorer la sécurité de l'ensemble de votre système. L'authentification sans mot de passe est plus sécurisée. Pour vous connecter au serveur, vous devez générer une clé ssh sur votre ordinateur local, puis copier la clé publique sur le serveur. Plus de sécurité.
iptables est le pare-feu par défaut pour les systèmes Linux. Il peut être utilisé pour gérer les connexions aux ports spécifiés. Si nous voulons conserver le site Web sur le serveur, en plus du port ssh, nous devons également ouvrir les ports http et/ou https.
Par défaut, aucune règle n'est établie sur le système d'exploitation. Taper la commande sudo iptables -L
(Ubuntu) renverra ce qui suit :
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),因为黑客将首先尝试默认的用户名。为了更高的安全性,甚至可以完全禁用管理员帐户。
另一件好事是检查你网站上的用户活动并锁定非活跃帐户。用户过期模块提供了定义特定用户帐户将被锁定的功能。此外,它可以锁定在一段时间内处于非活跃状态的帐户。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!