>  기사  >  운영 및 유지보수  >  Drupal 구성을 분석하는 방법

Drupal 구성을 분석하는 방법

WBOY
WBOY앞으로
2023-05-15 21:22:11908검색

Drupal 구성

Drupal은 상당히 복잡한 아키텍처를 갖춘 오픈 소스 PHP 콘텐츠 관리 시스템입니다. 또한 강력한 보안 모델도 갖추고 있습니다. 커뮤니티 개발자들의 기여와 유지 관리 덕분에 Drupal 웹사이트의 보안 구성을 강화하기 위한 자세한 문서와 방법이 많이 있습니다.

귀하의 웹사이트를 운영하려면 Drupal이 필요하다는 점을 기억하세요. 해커로부터 전체 시스템을 보호하려면 전체 시스템을 다루어야 합니다. 여기에는 몇 가지 일반적인 서버 설정, 웹 서버 구성, PHP 및 데이터베이스가 포함됩니다. 또한 서버의 다른 서비스도 올바르게 구성해야 합니다.

서버 및 웹사이트 관리자가 전체 시스템의 보안을 감사하는 데 도움이 되는 몇 가지 팁과 핵심 사항을 제공합니다. 우리는 절대적으로 안전한 시스템을 만드는 것이 불가능하다는 것을 이해해야 합니다. 그러나 몇 가지 원칙을 준수한다면 시스템을 안전하게 만드는 데 도움이 될 것입니다.

안전 원칙

일반적인 안전 규칙부터 시작하겠습니다. 대부분은 Drupal 개발 및 Drupal 웹사이트 실행 인프라의 보안 관련 인프라 지원뿐만 아니라 기타 여러 상황에도 적합합니다.

  • 대규모 사용자 기반을 갖춘 커뮤니티에서 개발한 솔루션을 사용하세요. 오픈 소스 라이브러리, 인기 있는 Linux 배포판 등을 잘 유지 관리합니다. 다운로드한 코드의 무결성을 항상 확인하세요.

  • 미니멀리즘의 원칙을 따르고 다른 서비스를 이용하지 않도록 노력하세요. 꼭 필요한 경우 새 소프트웨어를 설치하고 필요하지 않은 서비스를 모두 제거하세요.

  • 맞춤 코드 작성을 피하세요. 시작하기 전에 이러한 상황을 피할 수 있는지 신중하게 고려하십시오. Drupal 개발과 관련된 현실은 사용자 정의 모듈을 작성하기 전에 drupal.org에서 기성 솔루션을 검색하는 것입니다.

  • 액세스는 기본적으로 거부됩니다. 해당 접근권한은 꼭 필요한 경우에만 부여해야 합니다.

  • 필요한 권한이 있는 역할을 추가하세요. 각 역할을 자세히 문서화해야 합니다. 이렇게 하면 전체 권한 프레임워크를 쉽게 지원하고 확장할 수 있습니다.

  • 루트 권한을 사용하지 마세요. Linux 기반 운영 체제에서는 필요한 경우에만 루트 액세스를 사용하고 sudo를 통해 수행하십시오. 즉, 루트로 로그인하여 실행하면 안 됩니다.

  • 시스템에 대한 정기적인 안전 검사 및 유지 관리를 수행하세요. 모든 의심스러운 상황을 주의 깊게 분석하고 분석해야 합니다.

  • 백업! 항상 시스템을 이전 상태로 복원할 수 있어야 합니다. 또한 시스템에 유효하고 사용 가능한 백업이 있는지 확인해야 합니다.

  • 적절한 보안 유지 관리가 완료될 때까지 서버를 공용 네트워크에 노출하지 마세요.

이러한 원칙은 사용하는 소프트웨어와 하드웨어에 관계없이 모든 시스템과 서비스에 적용될 수 있습니다. 우리는 좀 더 구체적인 핵심 사항을 논의합니다.

중요 보안 유지 객체:

Drupal이 웹사이트를 실행하는 것 외에도 PHP, 웹 서버, 데이터베이스도 구성해야 합니다. 검색 기능 확장, 캐싱 사용 등을 위해 일부 서비스 플러그인을 설치해야 할 수도 있습니다.

보시다시피 올바르게 구성하고 정기적으로 유지 관리해야 할 사항이 많이 있습니다. 위의 상황을 바탕으로 보안을 보장해야 하는 다음 서비스를 어느 정도 구분할 수 있습니다.

  • 서버(공통 구성)

  • 웹 서버

  • PHP

  • 데이터베이스

  • Drupal

서버(공통 설정)

인터넷에서 제공되는 모든 서비스의 보안은 서버의 기본 구성에서 시작됩니다. Linux 기반 서버의 경우 다음 구성 방법을 사용할 수 있습니다.

  • 원격 로그인 구성 변경

  • iptables를 사용하여 방화벽 설정

    원격 로그인 구성 변경

서버 로그인 구성, . 주요 목표는 이 프로세스를 일반적인 기본 프로세스와 다르게 만드는 것입니다.

예를 들어 모든 Linux 시스템에는 루트라는 이름의 슈퍼유저가 있습니다. 공격자는 SSH 등을 통해 루트의 기본 비밀번호를 해독할 수 있습니다. 그러나 서버 관리자가 루트 로그인을 끄면 이러한 시도는 실패합니다. 루트 대신 새 사용자를 생성하고 그에게 필요한 권한을 부여할 수 있습니다.

이에 대한 대부분의 변경 사항은 SSH 설정과 관련이 있습니다. 일반적으로 /etc/ssh/sshd_config 파일에 있습니다. 관련 구성:

Port 2345Protocol 2PermitRootLogin noPasswordAuthentication noUseDNS noAllowUsers user

포트 2345(기본값 아님, 기본값 22)를 사용하여 유효한 사용자 이름을 사용하여 SSH를 통해 서버에 연결할 수 있습니다. 또한 루트 로그인 및 비밀번호 인증도 비활성화됩니다.

비밀번호 확인을 비활성화하는 것은 전체 시스템의 보안을 향상시키는 중요한 단계입니다. 비밀번호 없는 인증이 더 안전합니다. 서버에 로그인하려면 로컬 컴퓨터에서 SSH 키를 생성한 다음 공개 키를 서버에 복사해야 합니다. 보안이 강화되었습니다.

iptables를 사용하여 방화벽 설정

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服务器

设置Web服务器的一些一般原则。使用这些规则对于你的网站运行非常重要。通过服务器的漏洞,攻击者可以任意执行文件,上传恶意脚本并以某种骚操作运行这些脚本。

能够访问运行的网站文件

主要的原则就是 网站文件应该由非root用户运行,并且不应该由Web服务器写入(敲黑板,划重点!)。在一些情况下,Drupal目录可供Web服务器用户写入,有关保护文件权限和所有权的详细信息,请看本文末尾的“相关链接”。

限制对Web服务器的某些功能的访问

有时,限制在Web服务器对网站的一些功能的访问可能是有用的。例如,在你拥有演示网站或没有注册功能的网站的情况下。你可以限制/user和/admin/ *。对于Apache Web服务器,可以使用mod_authz_host和mod_rewrite模块完成。切记,http身份验证不是一种安全的方法。因此,所描述的方法在特定情况下更适用。

删除不使用的Web服务器插件

服务器上的所有其他服务都存在潜在的安全风险。因此,你应该遵循最小化原则。如果你不需要什么,只需将其删除即可。

这同样适用于Web服务器。Apache和Nginx Web服务器有许多额外的插件,仔细检查已启用的扩展名列表,并删除所有未使用的扩展名。

使用HTTPS

使用HTTPS协议可以使网站和私人用户数据的访问更加安全。如今,当一些在线商店不对他们的支付交易使用加密,这是绝对不对的。而且,Google已经将HTTPS设置为排名指标。这意味着不使用HTTPS协议但还是能运行的网站,一些重要信息(信用卡,支付交易等)会对搜索排名产生负面影响。

理想情况是,如果你为与用户进行交互的所有网站加密。例如说登录和注册。用户输入密码。即使这些密码在所有浏览器中看起来都不可见(如**),它们也会以未加密的形式通过网络传递。因此,攻击者可以通过中间人方式等轻松拦截输入的数据。用户通常都是使用常用密码。这意味着也可能会影响你在对别的网站的账号。

HTTP认证

应该清楚在什么情况下可以使用HTTP身份验证。大多数情况下,你需要它来保护对网站的缓存并禁用爬虫对该网站的索引。但是,HTTP身份验证本质上是不安全的。它不使用任何加密算法。因此,浏览器和网站之间的流量不会被加密,攻击者只需复制可以用的HTTP头并将数据包其发送到Web服务器即可访问网站。

此外,强烈建议将htpasswd文件保留在文档根目录之外。设置此文件的只读权限(440)。

PHP

PHP与服务器的其他服务一样可能包含漏洞。这在很大程度上取决于PHP本身的设置以及当前使用的PHP版本。当然,你始终需要检查所有可用的更新并保持PHP更新。但是,在某些情况下,这可能非常困难甚至是不可能的。

一般来说,优化服务器上PHP安全性的所有工作可以分为三个部分:

  • 定期更新PHP版本

  • 避免使用不安全的代码,功能等

  • 优化PHP设置

    定期更新PHP版本

    这是比较容易理解的事情,但正如我所提到的,在某些情况下,更新可能非常困难甚至是不可能的。当你的应用程序中有很多祖传代码(它在新的PHP版本中不起作用)并且当前的业务不允许你花时间更新这段代码时就会主要,因为它是很耗费时间的操作。在这种情况下,你可以尝试使用下面的一些建议。

    避免使用不安全的代码

    编写安全代码是服务器安全的重要一步。你应该花一些时间定期查看你所有自定义代码。此外,没有人可以保证第三方库不包含任何漏洞。正如我所提到的,即使PHP本身也存在安全性问题(使用不安全的函数,缓冲区溢出等)。

    为了解决这些问题,有一个很好的玩意叫做Suhosin,它可以帮助你摆脱许多安全问题。Suhosin旨在保护服务器和用户免受PHP和PHP核心中已知和未知的缺陷的影响。它由两部分组成。第一部分是PHP核心的补丁,它提供了一些针对缓冲区溢出或格式化字符串漏洞的低级保护。第二部分是PHP扩展,它实现了一些额外的保护。

    Suhosin是一个非常强大的工具,可以保护你的服务器免受许多漏洞的侵害。蛋疼的是,它不适用于PHP7.事实上,Suhosin7 正在开发,但还没有完成。作者不建议在生产服务器上使用Suhosin7。

    优化PHP设置

    为优化PHP安全配置,我们可以采取的两个最简单的步骤是禁用未使用的模块,并最大限度地减少用户可以获得的有关当前PHP安装的信息。

    要查看所有已编译的PHP模块,请运行以下命令:

    $ php -m

    建议仅使用必要的模块来提高安全性。仔细检查整个列表哪些是你不需要的模块。删掉吧。

    保护PHP免受黑客攻击还要隐藏有关系统的信息。看看php.ini文件中的这个配置:

    expose_php = Off

    确保此参数配置。否则,PHP将发送版本号到X-Powered-Byhttp头中的。

    同样适用于网站上的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
2.控制系统资源
max_execution_time = 30 
max_input_time = 30 
memory_limit = 50M

你可以指定每个脚本的最长执行时间,最大内存量和最大数据读取时间。

3.关闭允许脚本包含其他URL的PHP函数
allow_url_include = Off allow_url_fopen = Off

如果启用了allow_url_fopen,PHP可以使用文件函数,例如file_get_contents。有了它,PHP可以从远程服务器下载文件。

4.禁用危险功能
 disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

在禁用之前,请确保你的网站不需要其中任何一个函数。

5.限制对文件的访问权限
open_basedir =“/var/www” #允许访问的目录

该open_basedir的配置允许你设置在PHP可以使用函数访问文件的目录如fopen,file_get_contents等。如果该文件是在这个目录之外,PHP将拒绝打开它。

6.临时路径
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

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

初始安装后,请确保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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제