Nextcloud 18 -> 19 アップグレード時のセキュリティ&セットアップ警告を解決

Nextcloud 18 がEoL になっていたので,Nextcloud 18.0.14 から Nextcloud 19.0.7 にアップグレードしました.

表 1. Maintenance and Release Schedule · nextcloud/server Wiki
release date end of life current version next version

20

2020-10-03

2021-10

20.0.7 (2021-02-02)

20.0.8 (2021-02-25)

19

2020-06-03

2021-06

19.0.8 (2021-01-27)

19.0.9 (2021-02-25)

18

2020-01-16

2021-01

18.0.14 (2021-01-27)

End of Life

$ sudo -u www-data php $NEXTCLOUDPATH/occ app:update --all
$ sudo -u www-data php $NEXTCLOUDPATH/updater/updater.phar
$ sudo -u www-data php $NEXTCLOUDPATH/occ app:update --all

以前実行したときと比べて「セキュリティ&セットアップ警告」の内容が違っていたのでメモしておきます.

警告を解決

警告メッセージ全体
セキュリティ&セットアップ警告
サーバーのセキュリティとパフォーマンスにとって重要なことは、すべてが正確に設定されていることです。あなたの助けとなるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンク先のドキュメントを参照してください。

セットアップに関して警告がいくつかあります。
PHPのメモリ制限が推奨値の512MB以下です。
"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。
テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。
テーブル "oc_properties"のインデックス "properties_path_index"が見つかりません。
データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。
このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
intl
bcmath
gmp
データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
filecache_extended.fileid
mounts.storage_id
mounts.root_id
mounts.mount_id
インストールガイド ↗を再確認して、 ログ にあるすべてのエラーや警告を確認してください。

「このインスタンスには推奨されるPHPモジュールがいくつかありません。」

php

このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
intl
bcmath
gmp

該当パッケージを導入してhttpdを再読込します.

$ sudo apt install php-intl php-bcmath php-gmp (1)
$ sudo service apache2 reload (2)
  1. 対応パッケージの導入
  2. apache httpd 再読込

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

データベースにいくつかのインデックスがありません。

db index

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。
テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。
テーブル "oc_properties"のインデックス "properties_path_index"が見つかりません。

メッセージの通りoccコマンドでインデックスを作成します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.

$ sudo -u www-data php $NEXTCLOUDPATH/occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.
Check indices of the oc_properties table.
Adding properties_path_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「データベースにはオプションのカラムがいくつかありません。」

db collum

データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。

メッセージの通りoccコマンドでカラムを追加します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.

$ sudo -u www-data php $NEXTCLOUDPATH/occ db:add-missing-columns
Check columns of the comments table.
Adding additional reference_id column to the comments table, this can take some time...
Comments table updated successfully.

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「データベース内のいくつかの列で、big intへの変換が行われていません。」

db big init

データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
filecache_extended.fileid
mounts.storage_id
mounts.root_id
mounts.mount_id

メッセージの通りoccコマンドでbig intへの変換をします.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.
途中時間がかかる旨のメッセージが表示されます.y を指定することで処理を続行します.siteの規模や利用状況によって実行時間を考えましょう.

$ sudo -u www-data php $NEXTCLOUDPATH/occ db:convert-filecache-bigint
Following columns will be updated:

* filecache_extended.fileid
* mounts.storage_id
* mounts.root_id
* mounts.mount_id

This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「PHPのメモリ制限が推奨値の512MB以下です。」

php memory

PHPのメモリ制限が推奨値の512MB以下です。

phpの memory_limit の値を /etc/php/7.4/apache2/php.ini を編集して修正します.その後httpdの再読込を行います.

$ sudo vim /etc/php/7.4/apache2/php.ini (1)
$ sudo git -C /etc diff /etc/php/7.4/apache2/php.ini (2)
diff --git a/php/7.4/apache2/php.ini b/php/7.4/apache2/php.ini
index ef89b713..407ee04d 100644
--- a/php/7.4/apache2/php.ini
+++ b/php/7.4/apache2/php.ini
@@ -406,7 +406,7 @@ max_input_time = 60

 ; Maximum amount of memory a script may consume (128MB)
 ; http://php.net/memory-limit
-memory_limit = 128M
+memory_limit = 512M

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Error handling and logging ;
$ php --php-ini /etc/php/7.4/apache2/php.ini -i | grep memory_limit (3)
memory_limit => 512M => 512M
$ sudo service apache2 reload (4)
  1. vimで設定ファイルを修正
  2. 編集内容確認
  3. 設定確認
  4. apache httpd を再読込

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「”Strict-Transport-Security” HTTPヘッダが最低でも “15552000” 秒に設定されていません。」

hsts

"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
$ sudo vi /etc/apache2/sites-available/nextcloud.conf (1)
$ sudo git -C /etc diff /etc/apache2/sites-available/nextcloud.conf (2)
diff --git a/apache2/sites-available/nextcloud.conf b/apache2/sites-available/nextcloud.conf
index 2844232c..4a064d52 100644
--- a/apache2/sites-available/nextcloud.conf
+++ b/apache2/sites-available/nextcloud.conf
@@ -135,6 +135,10 @@
                #               nokeepalive ssl-unclean-shutdown \
                #               downgrade-1.0 force-response-1.0

+               <IfModule mod_headers.c>
+                       Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
+               </IfModule>
+
        </VirtualHost>
 </IfModule>

$ sudo apache2ctl configtest (3)
Syntax OK
$ sudo service apache2 reload (4)
  1. apacheの該当のサイト設定修正
  2. 設定確認
  3. 文法チェック
  4. apache httpd再読込

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「Webサーバーは適切にホスト名が引けるように設定されていません。」

well known

Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。

専用のドメインではなくサブディレクトリ( nextcloud )で運用しているNextcloud なので,ドメインのドキュメントルートに以下のような .htaccess ファイルを用意します.caldav/carddavだけでなく一緒に他のものも設定しました.専用の(サブ)ドメインならこの問題は出ないと思います.

$ sudo -u www-data vi $HTTPROOTPATH/.htaccess (1)
$ cat $HTTPROOTPATH/.htaccess (2)
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
  RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>
  1. NextcloudのhttpdのROOT直下の .htaccess ファイルを編集
  2. 編集内容を確認.

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「メモリキャッシュが設定されていません。」

memcache

メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
A memcache is not required and you may safely ignore the warning if you prefer.

この設定は必須ではなさそうですが,RAMは余っているので設定します.

いくつか種類があるようですが,今回はAPCuを設定しました.

$ sudo apt install php-apcu (1)
$ sudo -u www-data vim $NEXTCLOUDPATH/config/config.php (2)
$ sudo git --git-dir=/var/git/nextcloud --work-tree=. diff config/config.php (3)
diff --git a/config/config.php b/config/config.php
index f62133e..62d137d 100644
--- a/config/config.php
+++ b/config/config.php
@@ -41,4 +41,5 @@ $CONFIG = array (
   array (
   ),
   'mail_sendmailmode' => 'smtp',
+  'memcache.local' => '\OC\Memcache\APCu',
 );
  1. APCuのパッケージを導入
  2. Nextcloudの設定ファイルを編集して設定を追加
  3. 設定確認

「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.

「すべてのチェックに合格しました。」

ok

:)

環境

今回のホストの環境はUbuntu 20.04 LTS amd64のapache httpd 2.4, mysql server 8, php 7.4です.

$ dpkg-query -W php7.4-common php7.4-apcu apache2 mysql-server
apache2 2.4.41-4ubuntu3.2
mysql-server    8.0.23-0ubuntu0.20.04.1
php7.4-apcu
php7.4-common   7.4.3-4ubuntu2.4
$ lsb_release -dr
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
$ uname -m
x86_64

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です