我有一台服务器运行着很多 Drupal 站点。其中一些较旧,运行 Drupal 5,而一些较新,运行 Drupal 6。我们也开始实现 Drupal 7。
我们的组织使用一个标准的网站管理密码,我们仅在内部分发给我们的员工以维护这些网站。这可能是也可能不是最佳安全实践,但这是我们此时做事的方式。请假设这不会改变。
我们遇到的问题是,当我们有员工流失时,我们必须更改此密码并将更改应用到我们运行的每个站点,以确保该员工不能破坏我们客户的任何站点。这对于解雇更为重要,但我们也将其作为最佳实践用于辞职。
过去,我运行了一个基本的 PHP 脚本,该脚本在我们的数据库服务器上使用 mysql_list_dbs 来遍历每个数据库并更改名称 = admin 的用户表的传递字段。基本上:
while ($row = mysql_fetch_object(mysql_list_dbs($sql_connection))) {
mysql_query("UPDATE users SET pass=MD5('$newpassword') WHERE name='admin'", $row->Database);
}
这工作得很好,但有两个问题:
- 它很老套,我讨厌老套的东西。我宁愿做一些利用“官方方式”做事的事情
- Drupal 7 使用与 D5 和 D6 不同的散列系统,因此这不适用于 Drupal 7 站点。现在我必须在更新之前首先检查 pass 的现有值是否与旧密码的哈希匹配,这样我就不会不小心破坏 Drupal 7 站点。与此同时,我还没有想出如何为 Drupal 7 站点实现这一点。
所以我正在寻找替代解决方案。我真的认为我需要使用一个 bash 脚本,该脚本要么从 httpd.conf 遍历虚拟主机,要么使用 find 或某种方式,将 cd 放入安装平台的“站点”文件夹中的每个站点安装目录(我们有一个相当困惑的设置*) 并运行 drush upwd admin --password=$newpassword
这将完全独立于平台,并允许 Drupal 定义更改密码时发生的情况。
我意识到 Aegir 实际上可能是一个很好的解决方案,但我们还没有准备好实现 Aegir,我正在寻找更多快速而肮脏的中间解决方案。感谢您提供的任何意见。
*只是我们困惑设置的一个示例:
/www
/cliena
/drupal-5.x
/sites
/clienta.com <-- contains settings.php for Client A
/clientb
/drupal-5.x <-- contains old code base for Drupal 5 site that's been migrated I shoudld probably have my drush/bash script ignore these sections....
/drupal-6.x <-- contains code base for current Drupal 6 site
/sites
/clientb.com <-- contains settings.php for Client B
/clientc
/drupal-6.x
/sites
/default <-- contains settings.php for clientc.com
/sub1.clientc.com <-- contains settings.php for sub1.clientc.com
/sub2.clientc.com <-- contains settings.php for sub2.clientc.com
/sub3.clientc.com <-- contains settings.php for sub3.clientc.com
/client_sites
/drupal-5.x
/sites
/clientd.com <-- contains settings.php for clientd.com
/cliente.com <-- contains settings.php for cliente.com
/clientf.com <-- contains settings.php for clientf.com
...等等...您明白了。 a 迁移到 Aegir 是有序的,但需要一段时间才能清理干净。
最佳答案
您可以改进并继续编写以下脚本...
for FILE in $(find /www -type f -name system.module); do
C_PATH=`dirname $FILE`
C_VERSION=`grep "define('VERSION'," $FILE | awk -F "'" {'print $4'}`
print "--- DEBUG --- "
print "Current path: $C_PATH"
print "Current version: $C_VERSION"
# Your logic here...
done
[]的
费利佩
关于php - Bash 脚本为分布在多个版本的服务器上的多个 Drupal 站点更新管理员用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229564/