Manual:Securing database passwords/zh

From Linux Web Expert

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

LocalSettings.php 默认包含 MySQL 数据库用户 ID 和密码。 将这些凭据保存在 LocalSettings.php 中是有风险的,因为在极少数情况下,PHP 文件可以作为纯文本向外界公开这些凭据:

  • PHP 在服务器上被禁用
  • PHP 本身崩溃
  • 您在该域的任何地方都有 CGI search.pl(一个常见的 CGI 搜索脚本)。漏洞描述。

如果在这些罕见的情况下你想保护你的 MySQL 用户名和密码,它们不应该是 LocalSettings.php 文件的一部分。

Webroot 之外的 MySQL 密码

永远不要将 MySQL 密码放在 Web 根目录中的文本文件中。 您可以通过以下方式避免这样做:

  • 在您的网络根目录之外创建一个目录。 例如,如果您的网站位于“/htdocs/www-wiki”,则在您的 Web 根目录之外创建一个名为“external_includes”的目录:
    • mkdir /external_includes
  • 在您刚刚创建的目录中创建一个名为“mysql_pw.php”的文件,并将每个 mysql 用户名、密码、主机名和数据库名称的变量放在单独的行中,每个变量都设置为实际值。 例如,使用 nano 作为你的编辑器:
    • nano /external_includes/mysql_pw.php
    • 使用实际值代替括号中的“mysql_”填充符,键入以下行:
<?php
  $wgDBserver = "[mysql_host]";
  $wgDBname = "[mysql_db_name]";
  $wgDBuser = "[mysql_user]";
  $wgDBpassword = "[mysql_password]";
  
  // more confidential data...
?>
  • 注意不要在文本后留下空格(空行)。
  • 保存并关闭文件。 在 nano 中是:Ctr+O(保存)和 Ctr+X(关闭)

检查您的发行版以获取网络服务器的用户。 这有所不同,示例包括“apache”、“www-data”、“nobody”、“httpd”。 然后像这样设置密码文件的权限:

  • chgrp apache mysql_pw.php
  • chmod 640 mysql_pw.php (删除其他人的访问权限和网络服务器的写入权限)
  • (对于 LocalSettings.php,可能重复 g-rxw ... )
  • 确保文件所有者有 r(或 chmod 400 LocalSettings.php
  • 编辑您的 LocalSettings.php 文件并在文件开头添加以下行:
require_once "/external_includes/mysql_pw.php"; //require_once "[FULL ABSOLUTE PATH TO mysql_pw.php]";
  • 现在从 LocalSettings.php 中删除这些变量:
$wgDBserver
$wgDBname
$wgDBuser
$wgDBpassword

这样,如果有人能够访问和显示 LocalSettings.php,他们将看到的只是一些设置,而不是您的 MySQL 数据库的密码、用户名等,并且包含该信息的真实文件对 Web 服务器是禁止访问的。 如上所述,您仍然需要确保 LocalSettings.php 对 apache 用户只读。

如果您正在进行这些更改并且由于您的 Web 服务器提供商不允许您而无法访问用户,那么,在 FTP 中,您必须为“external_includes”设置的最低权限是:drwx--x--x (711)。 对于文件“mysql_pw.php”,您必须设置 rw-r--r-- (644),否则您的 wiki 将无法运行。 不过,您的密码是安全的,因为包含关键信息的文件无法通过网络访问。
如果你不能在你的 Web 根目录之外创建任何文件,你仍然可以通过上面的过程并在你的 Web 根目录中使用像“.htdbpasswd”而不是“mysql_pw.php”这样的文件名来获得一些保护,因为大多数网络服务器都配置为拒绝访问任何以 .ht* 开头的文件

参见

  • 用于发送电子邮件的设置 $wgSMTP 包含用户名和密码。 它可以用同样的方式保护