これを行うきっかけ
こちらの記事:
https://blog.redmine.jp/articles/redmine-security-scanner/
で運用中のRedmineに既知の脆弱性がないかをチェックできるWebサービスの存在を知ったからでした。
で、現在のRedmineのURLを調べてみたら
E。
何度見てもEです。多少自信はあったので、この結果はその鼻っ柱を打ち砕くものでした。
そこで、現在運用中のRedmineのバージョンアップを図り脆弱性に対応します。
環境
- Ubuntu 20.04 (AWS Lightsailで稼働中)
- 動かしていたRedmine:4.2.9
- Apache 2.4 / mod-passangerでRubyアプリを使用(Ruby 2.7系)
- MySQL 8.0.3
作業に備えての前提
- 本手順では「使用するDBの削除」を伴います。作業の際には慎重に行って下さい。
- Webサービスを止める/何も入っていないRedmineが途中でできるため、ユーザアクセスができない状況が発生します。
- また、筆者環境はfiles配下をクラウドストレージにマウントしています。手順は自身の環境に合わせてください。
さっくりとした手順
- スナップショットのバックアップ
- DBのバックアップ
- redmineのディレクトリを一度mvでリネームしてバックアップ。
- apache停止
- redmineのDBを消す。
- redmineのDBを新たに作る。(ユーザは全て権限があるので問題なし)
- apache再開
- ディレクトリを再作成し、新しい空のRedmineを作る。
- themesとpluginを再配置。filesのシンボリックリンクを貼り替える。
- themesとpluginを再配置した状態でDBマイグレーション。
- DBリストア。
データバックアップ
万一に備え、AWSからインスタンスのスナップショットを取得します。
mysqlによるDBバックアップ
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
# DB名やDBユーザは自信の環境に合わせます
データ退避
cd /var/lib
# Redmineが格納されているディレクトリの親ディレクトリに移動します
ls -ld redmine
# 退避対象のディレクトリがあることを確認します
sudo mv redmine redmine_$(date +%Y%m%d)
ls -ld redmine_$(date +%Y%m%d)
apache停止
ここでWebサービスを停止するのは、DBを削除するためです。
systemctl status apache2.service
sudo systemctl stop apache2.service
systemctl status apache2.service
DB削除
慎重に行って下さい。
sudo mysql -u root -p
show databases;
/* redmineのDBがあることを確認 */
drop database redmine;
show databases;
/* redmineのDBがないことを確認 */
CREATE DATABASE redmine character set utf8mb4;
show databases;
/* redmineのDBがあることを確認 */
exit
Redmine再インストール
ソースダウンロード
sudo mkdir /var/lib/redmine
sudo chown -R www-data:www-data /var/lib/redmine
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.2-stable /var/lib/redmine
# 4.2系の最新安定版をダウンロードします
退避させたディレクトリからconfigファイルコピー
sudo cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/database.yml /var/lib/redmine/config/database.yml
cat /var/lib/redmine/config/database.yml
#中身確認
sudo cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/configuration.yml /var/lib/redmine/config/configuration.yml
cat /var/lib/redmine/config/configuration.yml
#中身確認
Redmineインストール
cd /var/lib/redmine
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle exec rake generate_secret_token
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
apache再開
systemctl status apache2.service
sudo systemctl start apache2.service
systemctl status apache2.service
再開後の仮パスワード作成
対象のRedmineにアクセスします。
IDとパスワードがadmin / admin に戻っている状態のため、仮パスワードを発行します。
退避したディレクトリからデータを再配置
cd /var/lib/redmine_$(date +%Y%m%d)/plugins
sudo cp -pir ./* /var/lib/redmine/plugins/
# プラグイン一式をコピーします
cd /var/lib/redmine_$(date +%Y%m%d)/public/themes
sudo cp -pir ./* /var/lib/redmine/public/themes/
# テーマ一式をコピーします
シンボリックリンク貼り替え
これは筆者の環境が
- logディレクトリとfilesディレクトリを別の場所にリンクを張っているための措置です。
- それ以外の場合は上述した
/var/lib/redmine_$(date +%Y%m%d)
からfilesやlogをコピーして下さい。
cd /var/lib/redmine
sudo rm -rf files
sudo rm -rf log
sudo ln -sf /mnt/wasabi/redmine/files files
# wasabiクラウドストレージを利用しています。
sudo chown -h www-data:www-data files
sudo ln -sf /var/log/redmine log
# ログは/var/log配下で一括管理しています。
sudo chown -h www-data:www-data log
データ再マイグレーション
プラグイン再マイグレーション
cd /var/lib/redmine
sudo -u www-data bundle install
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
apacheリスタート
systemctl status apache2.service
sudo systemctl restart apache2.service
systemctl status apache2.service
DBリストア
cd /hoge
# mysqldumpを行ったディレクトリ
mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです
apacheリスタート
systemctl status apache2.service
sudo systemctl restart apache2.service
systemctl status apache2.service
動作確認
この状態でRedmineに管理者権限でログインします。手順通りなら
- テーマ
- 添付ファイル
- プラグイン
などが正常に動いていると思います。
バージョンアップ後の診断
2023/03/18現在のRedmine4.2系の最新安定版:4.2.10がインストールされ、A+ と診断されました。