プロジェクト

全般

プロフィール

Redmine4.2のファイルサーバ化。(Redmine_dmsf) ※脆弱性注意※

バージョン 18 (手動人形, 2024/08/02 15:22) → バージョン 19/19 (手動人形, 2024/10/18 15:13)

{{toc}}

### ## ※注意事項※

2024/05/29現在、 **Redmine 4.2に対応しているバージョンのDMSFプラグインはパストラバーサルの脆弱性があります。**

[https://jvn.jp/jp/JVN22182715/index.html](https://jvn.jp/jp/JVN22182715/index.html)

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

- Redmineを単独ユーザーで運用していない限りは、以下のオプションを強く推奨します。 筆者のようにRedmineを単独ユーザーで運用していない限りは、以下のオプションを強く推奨します。
- Redmine及びOS全体のバージョンアップを図る。
- 本プラグインを無効化する。

### ## はじめに

Redmine 5.1で運用したい場合は、以下を参照してください。

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/78

### ## 概要

Redmineをファイルサーバのように扱うプラグインをインストールします。

1. Redmine 4.2でも動く環境でのインストール手順
1. Redmine本体の設定を修正する手順
1. Windows 11でのWebDAVを有効にする手順

をそれぞれ追加しました。

### ## 備考

- この作業、下手すればRedmine全体が使えなくなる作業です。(実際にRedmineが使えなくなりました)
- そのため、DBのバックアップとリストアによる切り戻し手順も込みです。
- そもそも:WebDAVを有効化するかどうかは組織のセキュリティポリシーに関わる問題です。有効化すべきか否かは事前に了承を取ってください。
- **また、Redmineサーバ上のインターネット利用において、WebDavの使用は非推奨です。**
- 本サイトではWebDavを無効化しています。

### 2023/11/08追記

**MicrosoftはWebDavを「非推奨」とする方針を打ち出しました。**

https://forest.watch.impress.co.jp/docs/news/1544482.html

### ## プラグイン名

- Redmine_DMSF
- https://github.com/danmunn/redmine_dmsf

### 動作を確認した環境

- Redmine 4.2
- mysql Ver 8.0.31
- Windows 11 (WebDav設定)

### WebDav接続の前提

- Redmineがhttps化されていること。
- 証明書をWindowsにインポートしていること。

### 導入時

- 追加パッケージのインストール:要
- 設定ファイルの修正:要
- Gem追加:要
- DBマイグレーション:要
- Windows設定:要 (WebDav接続をする場合のみ)

## 実施した手順

### さっくりとならなかった手順

1. 念のためDBバックアップ
1. SSHログイン後、追加パッケージをインストール
1. 設定ファイルの書き換え
1. Redmineプラグインに移動
2. gitでレポジトリをダウンロード
2. 新規ジェムをインストール
2. DBマイグレーション
3. Webサービス再起動
3. Redmine設定変更
3. WebDAVサービス有効化(Windows作業)
3. 切り戻し手順(それでも失敗した場合)

### バックアップ取得

#### mysqldumpによるバックアップ

- 作業ディレクトリに移動

```bash
cd /hoge && pwd
``` # 任意のバックアップディレクトリに移動します

任意のバックアップディレクトリに移動します。

- DBバックアップ

```bash
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
```
それぞれ`-h ホスト名`、` `-u
# それぞれ -h ホスト名 -u redmine -p ユーザ` ユーザ オプション `db名`です。 db名です。
# パスワードはredmineインストール時に設定したDBユーザのものです
```


パスワードはredmineインストール時に設定したDBユーザのものです

環境が許すなら、AWSのようにシステム全体のバックアップを取った方が後腐れがありません。

#### ### 動作に必要な追加パッケージのインストールと設定

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

```bash
sudo aptitude install xapian-omega ruby-xapian libxapian-dev poppler-utils antiword unzip catdoc libwpd-tools libwps-tools gzip unrtf catdvi djview djview3 uuid uuid-dev xz-utils libemail-outlook-message-perl
```

#### ### Redmineコンフィグファイルの修正

- Redmineコンフィグ配置ディレクトリに移動 #### ディレクトリに移動します。

```bash
cd /home/www-data/redmine/config/ && pwd
# 自分の環境に合わせます。
```
自分の環境に合わせます。

-


####
additional_environment.rbの作成(この作業をしていないなら必要です)

```bash
sudo cp -pi additional_environment.rb.example additional_environment.rb
```

#### addtional_environment.rbの追記

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

```bash
cat <<- __EOF__ | sudo tee -a /home/www-data/redmine/config/additional_environment.rb
# Redmine DMSF's WebDAV
require File.dirname(__FILE__) + '/plugins/redmine_dmsf/lib/redmine_dmsf/webdav/custom_middleware'
config.middleware.insert_before ActionDispatch::Cookies, RedmineDmsf::Webdav::CustomMiddleware
__EOF__
```
配置ディレクトリは自分の環境に合わせます。

####


###
プラグインのインストール

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

- 作業ディレクトリに移動 リリースノートによれば、Redmine 4.2に対応しているバージョンはv3.0.5です。

```bash
cd /hoge && pwd
```

# 任意の作業ディレクトリに移動し、そのディレクトリにいることを確認します。

- パッケージ取得

```bash
wget https://github.com/danmunn/redmine_dmsf/archive/refs/tags/v3.0.5.zip
```


- アーカイブ展開

```bash
unzip v3.0.5.zip
```


- 所有者変更

```bash
sudo chown -R www-data:www-data redmine_dmsf-3.0.5
```


- ディレクトリ移動&名前変更

```bash
sudo mv redmine_dmsf-3.0.5/ /home/www-data/redmine/plugins/redmine_dmsf
``` # 移動先のディレクトリは自分の環境のプラグイン配置ディレクトリです。
# ディレクトリ名から-3.0.5を取り除くのを忘れないでください。


移動先のディレクトリは自分の環境のプラグイン配置ディレクトリです。ディレクトリ名から-3.0.5を取り除くのを忘れないでください。

- ディレクトリ移動確認

```bash
ls -ld /home/www-data/redmine/plugins/redmine_dmsf
# このディレクトリがあることを確認します
```

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

#### プラグインインストール Gemをインストールします。

- Redmineルートディレクトリに移動

```bash
cd /home/www-data/redmine/ && pwd
```

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

- bundle install

```bash
sudo -u www-data bundle install
```

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

```bash
cd /home/www-data/redmine/ && pwd
# 自分の環境に合わせます。

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

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

```bash
sudo systemctl restart apache2
```

以上でインストールは終わります。

###
## Redmine設定変更

#### WebDAV有効化

1. Redmineに管理者アカウントでログインします。
2. 管理>プラグイン>DMSFの「設定」をクリックします。
3. 以下のように修正します。
1. WebDAV:有効 (デフォルト)
2. WebDavアクセス制御:読み書き可能
4. 任意のプロジェクトに移動します。
5. 「設定」をクリックし、「文書管理」にチェックを入れます。
6. また、Redmine管理画面の「ロールと権限設定」で、ユーザのアクセス権を忘れないようにしてください。(「文書管理」のセクションです)

### ## Windows : WebDAVサービス有効化

1. Windows 11のスタート画面からwindows featuresと入力。Windowsの機能の有効化または無効化を起動します。
2. SMB 1.0/CIFS ファイル共有のサポート全てにチェックを入れます。
3. OKをクリックして再起動します。

### 多分必要な作業 - 証明書のインポート

Redmineの証明書をWindowsにインポートしておきます。

##
接続確認

1. エクスプローラーを開きます。
2. PCに移動し、右クリックから「ネットワークの場所を追加する」をクリックします。
3. 次へ > カスタムネットワークの場所を選択 >次へと進みます。
4. 「インターネットまたはネットワークのアドレスは以下のように指定します。
1. https://[ドメイン名]/dmsf/webdav/[プロジェクト識別子]
5. 「次へ」をクリック後、資格情報を確認されるので、Redmineのアカウントを入力します。
6. エクスプローラーウィンドウが表示され、ファイルの読み書きができれば設定完了です。

### ## おまけ:切り戻し手順

この作業、バージョン変更や設定ミスで軽くRedmine全体が機能不全に陥ります。そのため、切り戻し手順を記しておきます。

#### ### 通常の切り戻し

- Redmineルートディレクトリ移動 #### ディレクトリ移動

```bash
cd /home/www-data/redmine && pwd
# 自分の環境に合わせます。
```

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

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

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

- #### ディレクトリ削除

```bash
sudo rm plugins/redmine_dmsf -Rf
```

- #### Webサービス再起動

```bash
sudo systemctl restart apache2.service
```

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

1. プラグインのアンインストールを行い
2. プラグインを削除した

としても、不具合が発生します。筆者の具体例で言うと、 **チケットの作成や詳細表示で500 Internal Errorが発生しました。**

- DBをバックアップしたディレクトリに移動

```bash
cd /hoge && pwd
``` # mysqldumpを行ったディレクトリ

mysqldumpを行ったディレクトリに移動します。

- DBリストア

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

パスワードはredmineインストール時に設定したDBユーザのものです。

- Webサービス再起動

```bash
sudo systemctl restart apache2.service
```
クリップボードから画像を追加 (サイズの上限: 50 MB)