カテゴリー: ガジェット Page 12 of 85

Redmine5.1のdmsfプラグインの脆弱性対応。(プラグインアップグレード)

概要

Redmineの文書管理プラグイン、dmsfに脆弱性が発表されたので、その対応を行います。

脆弱性概要

https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-000055.html

当該プラグインを有効にしている場合、Redmineにログインしているユーザーによって、Redmineの実行権限で可能な範囲で、サーバー上の任意のファイルを取得されたり削除されたりする可能性があります。

脆弱性対象

バージョン3.1.4より前のバージョン

筆者環境

  • Ubuntu 22.04
  • Apache2.4
  • MySQL 8.0.3
  • Redmine 5.1
  • dmsf 3.1.3

注意事項

脆弱性に対応したバージョンは、2024年5月現在、Redmine 4.2には対応していません。

筆者のようにRedmine 4.2を単独ユーザーで運用していない限りは、以下のオプションを強く推奨します。

  • Redmine及びOS全体のバージョンアップを図る。
  • 本プラグインを無効化する。

さっくりとはならない手順

  1. DBのバックアップ
  2. Webサービス停止
  3. 既存プラグインディレクトリの退避
  4. git cloneによるプラグイン入手
  5. DBマイグレーション
  6. Webサービス起動
  7. プラグインアップグレード確認

DBのバックアップを行います。

  • 作業用ディレクトリに移動
cd /hoge && pwd

任意のバックアップディレクトリを指定します。

  • DBのバックアップ取得
 mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
  1. -u ユーザ オプション db名です。自分の環境に合わせます。
  2. パスワードはDBのユーザパスワードです。

Apacheの停止を行います。

※ 利用者への注意喚起も行ってください。

  • 停止前のステータス確認
systemctl status apache2.service

active (running)を確認します。

  • Apache停止
sudo systemctl stop apache2.service
  • 停止後のステータス確認
systemctl status apache2.service

inactive (dead)を確認します。

既存プラグインを退避します。

  • redmineプラグインディレクトリに移動
cd /redmine/root/directory/plugins && pwd

ディレクトリは自分の環境に合わせます。

  • dmsfプラグイン退避
sudo mv redmine_dmsf /path/to/backup/directory/redmine_dmsf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • dmsfプラグイン退避確認
ls -ld /path/to/backup/directory/redmine_dmsf.$(date +%Y%m%d)

ディレクトリがあることを確認します。

プラグインをgit cloneします。

  • git clone
sudo -u www-data git clone -b v3.1.4 https://github.com/danmunn/redmine_dmsf

脆弱性に対応したv3.1.4を指定します。

  • clone確認
ls -ld redmine_dmsf

ディレクトリがあることを確認します。

プラグインのアップグレードを行います。

  • Redmineのルートディレクトリに移動
cd /redmine/root/directory && pwd

自分の環境に合わせます。

  • bundle install
sudo -u www-data bundle install
  • DBマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再開します。

  • 再開前のステータス確認
systemctl status apache2.service

inactive (dead)を確認します。

  • Apache再開
sudo systemctl start apache2.service
  • 停止後のステータス確認
systemctl status apache2.service

active (running)を確認します。

バージョンアップを確認します。

  1. Redmineに管理者権限でログインします。
  2. 管理>プラグインに進みます。
  3. DMSFプラグインが3.1.4になっていることを確認します。
  4. 既存の動作(チケットの発行/編集など)に問題が無いことを確認します。

おまけ:切り戻し手順

このプラグイン、アップグレードの失敗や手順ミスで軽くRedmine全体が機能不全に陥ります。そのため、切り戻し手順を記しておきます。

通常の切り戻し

ディレクトリ移動

  • Redmineのルートディレクトリに移動
cd /redmine/root/directory && pwd

自分の環境に合わせます。

プラグインアンインストール

sudo -u www-data rake redmine:plugins:migrate NAME=redmine_dmsf VERSION=0 RAILS_ENV=production

ディレクトリ削除

sudo rm plugins/redmine_dmsf -Rf

Webサービス再起動

sudo systemctl restart apache2.service

それでもダメだった切り戻し(DBリストア)

cd /hoge
# mysqldumpを行ったディレクトリ

mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです

sudo systemctl restart apache2.service

UbuntuサーバのSwap処理頻度を変更。

Ubuntuサーバを運用中、実メモリに余裕があるにもかかわらずスワップアウトが出ている事象を確認。

これを変更してみます。

環境

  • Ubuntu 20.04
  • メモリ4GB
  • スワップ6GB

事象と設定変更

現状確認

  • メモリ使用量の確認
free -h
  • 自分の環境の確認
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       1.8Gi       694Mi       176Mi       1.3Gi       1.6Gi
Swap:         6.0Gi       6.0Mi       6.0Gi
  • swappiness確認
cat /proc/sys/vm/swappiness

60を確認しました。

設定変更

sudo cp -pi /etc/sysctl.conf /path/to/backup/directory/systtl.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u /path/to/backup/directory/systtl.conf.$(date +%Y%m%d) /etc/sysctl.conf

差分がなければ(エラーなく実行できれば)バックアップ成功です。

  • sedによるファイル追記
sudo sed -i '$ a\vm.swappiness = 10' /etc/sysctl.conf

上記の参考サイトを元に、swappinessを10に指定します

  • 設定変更確認
diff -u /path/to/backup/directory/systtl.conf.$(date +%Y%m%d) /etc/sysctl.conf
  • 差分
+vm.swappiness = 10
  • 設定反映
sudo sysctl -p

vm.swappiness = 10と結果が返ってくることを確認します。

設定反映確認

cat /proc/sys/vm/swappiness

10に変更されていることを確認します。

まずはこの値で様子を見てみようと思います。

Redmineのプラグインをインストールするときに使うコマンド

概要

Redmineのプラグインを導入する際の基本的な手順をメモしておきます。

前提

こちらは筆者のメイン環境です。各自、自分の環境に合わせてください。

  • 既にRedmineがインストールされている状態
  • Ubuntu系OS
  • WebサーバとしてApache2を利用
  • Ruby on RailsでApacheと連携
  • RedmineはApacheの実行ユーザ(www-data)

インストールの基本

  1. A.プラグインを/redmine/root/directory/plugins配下に設置(必須)
  2. B.依存関係があるrubyプログラムをインストール(オプション)
  3. C.DBマイグレーション(オプション)
  4. D.Webサービス再起動(必須)
  5. E:動作確認(必須)

A-1:Zipファイルをダウンロードする場合の手順

A-1.1:作業用ディレクトリに移動します。

cd /hoge

任意のディレクトリを指定します。

A-1.2:ZIPファイルを入手します。

  • curl
  • wget
  • scpなどで転送
  • デスクトップを兼ねている場合はダウンロード

など、任意の手を用います。

A-1.3:ファイルを解凍します。

unzip plugin.zip

A-1.4:解凍されたファイル群のディレクトリの所有者を変更します。

sudo chown -R www-data:www-data plugin-hoge

バージョン番号が付与されているパターンが多いです

A-1.5:Redmineのプラグインディレクトリに配置します。

sudo mv plugin-hoge /redmine/root/directory/plugins/plugin

配置する際に、バージョン名などを消しておきます。

→ ここを行ったらB以降に進みます。


A-2:git cloneする場合の手順

A-2.1:Redmineのプラグインディレクトリに移動します。

cd /redmine/root/directory/plugins && pwd

自分の環境に合わせます。 (例:/var/lib/redmine)
筆者環境は/home/www-data/redmineです

A-2.2:git cloneを行います。

sudo -u www-data git clone git_repository 

大概はgithubのURLをそのまま(https://込み)です。

→ ここを行ったらB以降に進みます。


B: 依存関係があるrubyプログラムをインストールする場合の手順(オプション)

B-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

自分の環境に合わせます。

B-2. Bundle installを行います。

sudo -u www-data bundle install

Bundle complete!と出たらOKです。

→ ここを行ったらC以降に進みます。


B-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

自分の環境に合わせます。

C: DBマイグレーションを行う場合の手順(オプション)

C-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

自分の環境に合わせます。

C-2: DBのマイグレーションを行います。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

エラーが出てこなければOKです。

→ ここを行ったらD以降に進みます。


D:Webサービスの再起動

  • Apache再起動
sudo systemctl restart apache2.service
  • サービス稼働確認
systemctl status apache2.service

active (running)を確認します。


E: 動作確認

  1. Redmineに管理者権限でログインします。
  2. 管理>プラグインに進みます。
  3. インストールしたプラグインがあることを確認します。
  4. 他の機能が動くことを確認します。

Redmine 5.xにknowlegebaseをインストール。

筆者にとってRedmineのキラーアプリだったknowlegebase。その5.x対応版が出たので導入を行います。

https://github.com/yzzy/redmine_knowledgebase

環境

  • Ubuntu 22.04
  • Apache 2.4
  • MySQL 8.0.3
  • Redmine 5.1

導入時

  • Gem追加:要
  • DBマイグレーション:要

※Redmine 4.2で実施した設定ファイルの退避や修正は不要でした。

さっくりとした手順

  1. SSHログイン後、Redmineプラグインに移動
  2. gitでレポジトリをダウンロード
  3. 新規ジェムをインストール
  4. DBマイグレーション
  5. Webサービス再起動

ディレクトリに移動します。

cd /home/www-data/redmine/plugins && pwd

自分の環境に合わせます。

プラグインを配置します。

  • git clone
sudo -u www-data git clonehttps://github.com/yzzy/redmine_knowledgebase
  • clone確認
ls -ld redmine_knowledgebase/

このディレクトリがあることを確認します

Gemをインストールします。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine && pwd

自分の環境に合わせます。

  • bundle install
sudo -u www-data bundle install

DBのマイグレーションを行います。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine && pwd

自分の環境に合わせます。

  • マイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

動作後の確認

  1. Redmineに管理者アカウントでログインします。
  2. 任意のプロジェクトを選択して設定をクリックします。
  3. モジュール「knowledge」にチェックを入れて保存します。
  4. このように、プロジェクトにナレッジベースのタブが表示されていれば設定完了です。

Redmine: ガントチャートの見た目を調整。

https://atelier.reisalin.com/projects/ryza3/issues/gantt

メモ帳代わりのRedmineに『ライザのアトリエ3』のクエスト一覧を出しています。

ここのガントチャートが標準だと見切れてしまうので、プラグインで対応します。

プラグイン「redmine_gantt_tweak」

https://github.com/sk-ys/redmine_gantt_tweak

Redmineのプラグインディレクトリに移動します。

cd /home/www-data/redmine/plugins && pwd

自分の環境に合わせます。

git cloneを行います。

sudo -u www-data git clone https://github.com/sk-ys/redmine_gantt_tweak

www-dataはredmineの実行ユーザにします。

Redmine(Webサービス)の再起動を行います。

sudo systemctl restart apache2.service 

Redmineで設定を行います。

  1. プラグインを導入したRedmineサイトに管理者権限でログインします。
  2. 任意のプロジェクトに移動します。
  3. モジュール「Gantt Tweak」にチェックを入れて保存します。

保存後、「gantt teak」のタブが表示されるので、これをクリックします。

任意の幅(ここでは600)を指定して保存します。

保存後、ガントチャートに移動し、表示幅が広がっていることを確認します。

Redmineにダークモードを追加する。

概要

Redmineにダークモードを追加するプラグインを導入しました。

動作を確認した環境

  • Redmine 4.2
    • Ubuntu 20.04
  • Redmine 5.1
    • Ubuntu 22.04

ともにApache2.4 / MySQLです。

さっくりとした手順

  1. gitでリポジトリをcloneします。
  2. Webサービス(Redmine)の再起動を行います。
  3. 動作を確認します。

Redmineのプラグインディレクトリに移動します。

cd /home/www-data/redmine/plugins && pwd

自分の環境に合わせます。

git cloneをします。

sudo -u www-data git clone https://github.com/fraoustin/redmine_dark

サービス再起動を行います。

sudo systemctl restart apache2.service

動作確認

プラグインを入れたRedmineにアクセスすると、画面右上に「dark mode」が表示されるので、これをクリックします。

例:https://atelier.reisalin.com/

クリック後、画面が切り替わればOKです。

  • 再度「dark mode」をクリックすれば元に戻ります。
  • 本プラグインはブラウザから見た目を変更するため、全てのユーザ(未登録ユーザ含む)が利用可能です。

ufwのエラーに対処(ufwでipv6を無効化)

Linuxサーバのセキュリティを保つため、ufwの遮断スクリプトを用いています

ところが、「UFWが有効になっていない」というメッセージが出始めたため、その対処を行いました。

事象確認

  • ufw のステータス
sudo ufw status
  • 結果
ERROR: problem running ip6tables

対処

参考URL:https://www.reddit.com/r/linux4noobs/comments/nlb4ul/ufw_status_keeps_returning_problem_running/?rdt=58511

ファイルのバックアップを行います。

  • ufwファイルのバックアップ
sudo cp -pi /etc/default/ufw /path/to/backup/directory/ufw.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u /etc/default/ufw /path/to/backup/directory/ufw.$(date +%Y%m%d)

差分が無いことでバックアップができていることを確認します。

ファイルの書き換えを行います。

  • sedによるファイル書き換え
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
  • 書き換え確認
diff -u /path/to/backup/directory/ufw.$(date +%Y%m%d) /etc/default/ufw

差分

-IPV6=yes
+IPV6=no

設定を反映します。

  • ufwリロード
sudo ufw reload
sudo ufw status
  • 結果
状態: アクティブ

となっていればOKです。

考えられる原因

パッケージ全体のアップデートなどを行った関係で、IPv6の設定が強制になったためと思われます。

サーバにアクセスするIPアドレスの詳細を確認するシェルスクリプト。

Copilotを利用して、以下のスクリプトを抽出です。

  1. netstat -tan |grep ポート番号 を実行
  2. ポート番号は変数で指定可能
  3. IPアドレス一覧と件数を表示
  4. 詳細を表示しますか? → yの場合、IPアドレスが割り当てられている国やホストをIPアドレスごとに表示する
  5. 自分がアクセスしていることを考慮して、表示しないIPアドレスは変数で定義できるものとする
#!/bin/bash

# 定義された除外するIPアドレス(スペースで区切って指定可能)
EXCLUDE_IP="IPアドレスを入力"

# 使用するポート番号(スペースで区切って指定可能)
PORT="80 443"

# netstatを使用して指定されたポートに関連するIPアドレスを抽出
IP_LIST=$(netstat -tan | grep ":$PORT" | awk '{print $5}' | cut -d':' -f1 | grep -vE "($EXCLUDE_IP)" | sort | uniq)

# IPアドレスの件数を表示
echo "IPアドレス一覧:"
echo "$IP_LIST"
echo "件数: $(echo "$IP_LIST" | wc -l)"

# ユーザーに詳細表示を尋ねる
read -p "詳細を表示しますか? (y/n): " DETAIL

if [ "$DETAIL" = "y" ]; then
for IP in $IP_LIST; do
# whoisコマンドを使用してIPアドレスの詳細を取得
echo "IPアドレス: $IP の詳細:"
whois $IP | grep -E 'Country|OrgName' || echo "情報が見つかりませんでした。"
echo "-----"
done
else
echo "詳細表示はスキップされました。"
fi

前提としてwhoisコマンドがインストールされていることが条件。

これによって、

  • どこからアクセスしてくるのか
  • ホストの詳細はあるのか

の確認が可能です。

growi v7.0.xにアップデート後、画像アイコンが表示されない問題に対処。 

事象について

https://barrel.reisalin.com/books/growi/page/growi

この通りにv6.3.3→v7.0.xにアップグレードしたところ:

このように、画像アイコンが上手く表示されない事象が発生。

このエラーに対処します。

前提

上記の手順通り、growiv7.0.3にアップデートした状況です。

環境

  • Ubuntu 22.04
  • v6.3.3→v7.02.にアップデート
  • Apacheのリバースプロキシ

対処した手順

参考: GROWI 7.0.2 をインターネットに繋がらないオンプレミス環境に構築する際に苦労した件

growiサービスを停止します

  • growiのステータス確認(停止前)
systemctl status growi.service

※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します

  • growiのサービス停止
sudo systemctl stop growi.service
  • growiのステータス確認(停止後)
systemctl status growi.service

inactive (dead)を確認します

追加パッケージをインストールします

sudo aptitude install git-lfs

このパッケージが必要でした。

growiディレクトリに移動します

cd /opt/growi && pwd

自分の環境に合わせます。

lfsをpullします。

sudo git lfs pull

growiサービスを起動します。

  • 再開前のステータス確認
systemctl status growi.service

inactive (dead)を確認します

  • サービス再起動
sudo systemctl start growi.service
  • 再開後のステータス確認
systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

事象の解消確認

上記対処を行ったgrowiにブラウザでアクセスし、

アイコンが表示されれば対処完了です。 

ワンドと文具。

ハリー・ポッター スタジオツアーでの収穫は、山のようでした。

その中でも際立っているのがこちら。

ワンド

一番人気のアイテム、ワンド。

作中のキャラクター、杖職人オリバンダー翁が「杖が人を選ぶ」の言葉の通り、手に取ってしっくりくるものをチョイス。

一番自分の手に馴染んだのはスタジオツアー限定の「スリザリンのロケット」を模したワンドでした。

文具

文具系は、いくらあっても困らないマスキングテープと

スリザリンのボールペン。普段は万年筆を使うとは言え、使う機会はあります。

Page 12 of 85

Powered by WordPress & Theme by Anders Norén