У меня есть сервер, на котором работает довольно много сайтов на 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 или что-то, и так или иначе, компакт-диски в каждый каталог установки сайта внутри папки «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
... и так далее ... вы получите картину. Миграция в Эгир в порядке, но на это потребуется время.