php – Bash脚本更新分布在多个版本的服务器上的多个Drupal站点的管理员用户密码

我有一台服务器运行了很多Drupal站点.其中一些是较旧的并运行Drupal 5,而一些是较新的并运行Drupal 6.我们也开始实现Drupal 7.

我们的组织使用一个标准的网站管理密码,我们仅在内部分发给我们的员工以维护这些网站.这可能是也可能不是最好的安全措施,但这是我们此时的工作方式.请假设这不会改变.

我们遇到的问题是,当我们有员工流动时,我们必须更改此密码并将更改应用于我们运行的每个站点,以确保员工不会破坏我们客户的任何站点.这对于解雇更为重要,但我们也将其作为最佳实践进行辞职.

在过去,我运行了一个基本的PHP脚本,它在我们的数据库服务器上使用mysql_list_dbs来遍历每个数据库并更改名称= admin的users表的pass字段.基本上:

while ($row = mysql_fetch_object(mysql_list_dbs($sql_connection))) {
  mysql_query("UPDATE users SET pass=MD5('$newpassword') WHERE name='admin'", $row->Database);
}

这工作得非常好,但它有两个问题:

>这是hacky,我讨厌hacky的东西.我宁愿做一些利用“官方方式”做事的事情
> Drupal 7使用与D5和D6不同的散列系统,因此这对Drupal 7站点不起作用.现在我必须首先检查pass的现有值是否与更新前的旧密码的哈希相匹配,这样我就不会意外地破坏Drupal 7站点.与此同时,我还没有想出如何为Drupal 7网站实现这一点.

所以我正在寻找替代解决方案.我真的认为我需要使用一个bash脚本,它可以从httpd.conf迭代虚拟主机,或者使用find或者某种方式,cd进入非常安装平台的“sites”文件夹中的每个站点安装目录(我们有一个非常凌乱的设置*)并运行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

……等等……你得到了照片.迁移到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

[]的

费利佩

上一篇:的Drush 9别名文件应位于Drupal 8中?


下一篇:hyperledger fabric first network 只关闭停掉节点 不删除证书