Если вы храните конфиденциальные данные в Wiki Redmine, наверняка задумывались, что случится, если кто-то сможет получить доступ к серверу и загрузить БД.
Предлагаю вашему вниманию, разработанный нашей компанией, плагин redmine_wiki_encryptor. С помощью этого плагина Redmine будет расшифровывать на лету данные из таблиц Wiki, таким образом, даже если кто-то и получит дамп БД, без ключа ничего прочитать не сможет.
Установка и настройка redmine_wiki_encryptor
Делаем бэкап БД Redmine. Если что-то пойдет не так, есть риск потерять данные Wiki.
Загружаем плагин:
git clone git://github.com/olemskoi/redmine_wiki_encryptor.git /opt/redmine/plugins/redmine_wiki_encryptor
Устанавливаем гемы (подразумевается, что вы используете bundler для работы с гемами):
bundle install --without development test sqlite postgresql --path vendor/bundle
Выполняем миграции плагина:
bundle exec rake redmine:plugins:migrate RAILS_ENV="production"
Добавляем конфигурацию плагина в файл redmine/config/configuration.yml, секцию «production» параметры key (ключ, по которому будет выполнено шифрование — берегите его), algorithm (алгоритм шифрования — список поддерживаемых вашей системой алгоритмов можно получить командой «openssl list-cipher-commands»):
production:
wiki_encryptor:
key: 'mega-secret-key'
algorithm: 'des'
Останавливаем Redmine и шифруем данные Wiki:
bundle exec rake wiki_encryptor:encrypt RAILS_ENV="production"
Теперь все данные Wiki хранятся в зашифрованном виде.
Важно! Отключаем в настройках Redmine Кэширование форматированного текста, иначе в папке redmine/tmp/cache будет складываться кэш всех посещаемых wiki-страниц в открытом виде:
Удаляем cache:
rm -rf /opt/redmine/tmp/cache/*
И самое интересное. Потенциально у злоумышленника все же будет возможность расшифровать данные, ведь можно посмотреть ключ в конфигурации. Для исключения этого момента, можно запускать Redmine вручную, а пароль в конфиге не хранить.
После выполнения процедуры шифрования удаляем из файла конфигурации redmine/config/configuration.yml ключ (все, что после пробела) и, для упрощения, пользуемся скриптом типа следующего:
#!/bin/sh
# Проверяем, остановлен ли Redmine
/etc/init.d/redmine stop
# Считываем введенный пароль
echo -n "Password: "; read password;
# Добавляем в файл конфигурации пароль
sed -i "s/ key:/ key: '$password'/g" /opt/redmine/config/configuration.yml
echo
echo
# Запускаем Redmine
/etc/init.d/redmine start
# Ждем на всякий случай несколько секунд
sleep 3
# Удаляем пароль из конфигурации
sed -i "s/ key: '$password'/ key:/g" /opt/redmine/config/configuration.yml
Вот и все. Буду рад идеям и предложениям в комментариях!
В одной из следующих статей я напишу о двухфакторной sms-авторизации Redmine. Кому интересно, добро пожаловать на наш Хабра-блог.
Ссылки:
http://centos-admin.ru/ — сайт нашей компании
https://github.com/olemskoi/redmine_wiki_encryptor — плагин redmine_wiki_encryptor
Автор: olemskoi