Ubuntu 18.04 に Nextcloud をインストールしてみたので、その覚書です。基本的に Nextcloud公式ドキュメントを参考にしながら作業をしていきます。

公式: Installation and server configuration — Nextcloud 15 Administration Manual 15 documentation

 

 

Nextcloud とは

Nextcloudとは、オープンソースのオンラインストレージサービスを提供できるソフトウェアで、サーバや、WindowsやAndroid、Mac用のクライアント用アプリがあります。類似のソフトウェアで、Owncloud もあります。類似しているというより、Owncloud は Nextcloud の兄貴分に当たります。Nextcloud は Owncloud からフォークされて開発されています( 詳しい話は、wiki にあります)。

誤解を恐れずに、簡潔に言えば、「Dropbox」のプライベート版と思っていただいていいです。Windows用のクライアントからは、Nextcloud上のファイルやフォルダを、あたかもローカルファイルのように扱うことが出来て、大変便利です。

もし、VPS等を契約されているならば、インストールして損はない、と思います。

 

前提

以下の作業が既に終わっているということを前提にして記事を進めます。

 

ゴール

  • 使用するバージョンは、Nextcloud15 (現在のバージョンは15.0.7)
  • Nextcloud を tar ボールからインストール(他にも Snap を利用したインストール方法もあります)
  • Webサーバのサブディレクトリでアクセスできるように設定
  • インストール先は、/var/lib/nextcloud
  • URL は https://www.example.com/nextcloud/ でアクセス。

 

Nextcloud のインストール要件

Nextcloud15のインストール要件です。

 

オペレーションシステム

  • Ubuntu 18.04 LTS (推奨)
  • Red Hat Enterprise Linux 7 (推奨)
  • Debian 8, 9
  • SUSE Linux Enterprise Server 11 with SP3 & 12
  • openSUSE Leap 42.1 +
  • CentOS 7

 

データベース

  • MySQL or MariaDB 5.5+ (推奨)
  • Oracle Database 11g
  • PostgreSQL 9/10
  • SQLite

 

Webサーバ

  • Apache 2.4 with mod_php or php-fpm (推奨)
  • ngix with php-fpm

 

PHP

  • 7.0
  • 7.1
  • 7.2
  • 7.3

 

MariaDBの設定

 

インストール

詳細は、Ubuntu 18.04 + LAMP 環境構築 (3) – MariaDB 10.3 を参照。

 

ISOLATION LEVELとBINLOG FORMAT

Nextcloud で MySQL / MariaDB を利用する場合は、以下の要件が必須となります。

  • ストレージエンジンは InnoDB
  • DB の トランザクション分離レベルが "Read COMMITED"
  • Binary Logging を無効にするか、あるいは、BINLOG_FORMAT = ROW を設定する。
  • 文字コード Utf8mb4 を使用。

/etc/my.cnf などに次のような設定を追加します。

[mysqld]
...
transaction_isolation = READ-COMMITTED
binlog_format = ROW
...

 

MySQL 4-byte サポート

/etc/my.cnf などに次のような設定を追加します(デフォルトで設定されているはずです)。

[mysqld]
...
innodb_file_per_table=1
...

 

my.cnf の例

本家サイトの my.cnf の例を適用してみます。

ここでは、/etc/mysql/my.cnf に直接書くのを避けて、mariadb.cnf 上で設定します。これが作法としてよいかどうかは確認していませんが・・

理由としては、単純に my.cnf の末尾で mariadb.cnf がインクルードされるので、同じ変数がそれぞれにあった場合は my.cnf の値が mariadb.cnf の値で上書きされることを期待しているからです1

# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
[server]
# DNSによる名前解決によらず、IPアドレスのみ使用する
skip-name-resolve
# コネクションプール用のバッファ領域のサイズ
innodb_buffer_pool_size = 128M
# バファープールインスタンスの数(但し、`innodb_buffer_pool_size` を1Gバイト以上に設定した場合にのみ有効)
innodb_buffer_pool_instances = 1
# ログバッファーのファイルへの書き込み方法
# 2 はトランザクション毎にログファイルに書き込まれ、1秒毎にディスクにフラッシュされるが、システムクラッシュや停電で、最大1秒、トランザクションが失われる可能性がある。(デフォルトは1)
innodb_flush_log_at_trx_commit = 2
# ログを書き込む際に利用されるバッファサイズ
innodb_log_buffer_size = 32M
# InnoDBがダーティーページをディスクにフラッシュする、バッファープール内におけるダーティーページの割合
innodb_max_dirty_pages_pct = 90
# qyery_cacheのタイプ。デフォルトは1(ON)
query_cache_type = 1
# query_cacheの最大値、デフォルトは1(1M)
query_cache_limit = 2M
# query_cache によって割り当てられたブロックの最小サイズ、デフォルトは4096(4k)
query_cache_min_res_unit = 2k
# クエリ結果をキャッシュするために割り当てられたメモリの量。デフォルトは1048576(1M)
query_cache_size = 64M
# 一時テーブルの最大サイズ。デフォルトは16777216(16M)
tmp_table_size= 64M
# MEMORYテーブルの最大サイズ。デフォルトは16777216(16M)
max_heap_table_size= 64M
# スロークエリログを使用可能に(デフォルトは0)
slow-query-log = 1
# スロークエリログファイル名
slow-query-log-file = /var/log/mysql/slow.log
# slow_queriesステータス変数を増やす、クエリーの秒数
long_query_time = 1

[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8mb4

[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci
#character_set_server   = utf8
#collation_server       = utf8_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_file_per_table=1
# Import all .cnf files from configuration directory
!includedir /etc/mysql/mariadb.conf.d/

MariaDBを再起動します。

$ sudo systemctl restart mysql

 

Nextcloud 用にデータベースを作成する

Nextcloud で利用するデータベース名と、それにアクセスするユーザー名とそのパスワードを設定します。

MariaDBにログインする。

$ mysql -u root -p

データベースを作成。

MariaDB [(none)]> CREATE DATABASE ncdb_1901 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.001 sec)

Nextcloudのデータベースを使用するためのユーザを作成。

MariaDB [(none)]> CREATE USER 'ncdbuser'@'localhost' IDENTIFIED BY 'p@ssw0rd';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON ncdb_1902.* TO 'ncdbuser'@'localhost' IDENTIFIED BY 'p@ssw0rd';
Query OK, 0 rows affected (0.002 sec)

 

PHP の設定

 

PHP のインストール

詳細は、Ubuntu 18.04 + LAMP 環境構築 (4) – PHP 7.2 を参照。

 

必要とされるPHPモジュール

  • ctype
  • curl
  • dom
  • gd
  • iconv
  • json
  • libxml (Linux package libxml2 must be >=2.7.0)
  • mbstring
  • openssl
  • pdo_mysql
  • posix
  • session
  • simplexml
  • XMLReader
  • XMLWriter
  • zip
  • zlib

また、以下のモジュールも推奨されています。

  • fileinfo (→ すでに導入済み)
  • bz2 (php7.2-bz2)
  • intl (php7.2-intl)

 

モジュールの追加

ほとんどのモジュールはすでに導入されているので、次のようにして追加のモジュールをインストールします。

$ sudo apt install php7.2-bz2 php7.2-intl

 

pdo_mysql の設定

先のPHPの設定通りの場合、php-fpmを使用するので、/etc/php/7.2/fpm/conf.d/20-pdo_mysql.iniに、以下のように設定を記載します。

# configuration for PHP MySQL module
extension=pdo_mysql.so

[mysql]
mysql.allow_local_infile=On
mysql.allow_persistent=On
mysql.cache_size=2000
mysql.max_persistent=-1
mysql.max_links=-1
mysql.default_port=
mysql.default_socket=/var/lib/mysql/mysql.sock  # Debian squeeze: /var/run/mysqld/mysqld.sock
mysql.default_host=
mysql.default_user=
mysql.default_password=
mysql.connect_timeout=60
mysql.trace_mode=Off

 

Nextcloud のインストール

  • Dowload for server をクリックする。

  • Details and download options をクリックする。

  • .tar.bz2 のダウンロードリンクと、MD5チェックサムのダウンロードリンクをコピーして、次のようにする。
$ cd ~/
$ wget https://download.nextcloud.com/server/releases/nextcloud-15.0.7.tar.bz2
$ wget https://download.nextcloud.com/server/releases/nextcloud-15.0.7.tar.bz2.md5

MD5チェックサムを確認する。

$ md5sum -c nextcloud-15.0.7.tar.bz2.md5 < nextcloud-15.0.7.tar.bz2
nextcloud-15.0.7.tar.bz2: OK

ファイルを展開して、ディレクトリに配置する。

$ tar jxf nextcloud-15.0.7.tar.bz2
$ sudo mv nextcloud /var/lib/

Nextcloud のファイルのオーナー・グループを変更する。

$ sudo chown -R www-data:www-data /var/lib/nextcloud

 

Apache Web サーバーの設定

次のファイルを作成し、編集します。

/etc/apache2/sites-available/nextcloud.conf

内容は次のとおりです。http://サイトのURL/mycloudへのアクセスを/var/lib/nextcloudのディレクトリへのエイリアスとした設定です。

Alias /mycloud "/var/lib/nextcloud/"

<Directory /var/lib/nextcloud/>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted

    <IfModule mod_dav.c>
        Dav off
    </IfModule>

    SetEnv HOME /var/lib/nextcloud
    SetEnv HTTP_HOME /var/lib/nextcloud
</Directory>

サイトの設定を有効にします。

$ sudo a2ensite nextcloud.conf

すでに有効にしているモジュールもありますが、以下のモジュールを有効にします。

$ sudo a2enmod rewrite
$ sudo a2enmod headers
$ sudo a2enmod env
$ sudo a2enmod dir
$ sudo a2enmod mime
$ sudo a2enmod setenvif

最後にapache2 を再起動します。

$ sudo systemctl restart apache2

 

インストールウィザードの実行

ブラウザからURLにアクセスします。

https://www.example.com/mycloud

任意の管理者ユーザー名と、パスワードを入力し、セットアップを完了します をクリックします。

管理者ユーザー名とパスワードは今後も必要になるので、忘れないようにしてください。

 

ModSecurityを併用している場合

modSecurity を併用している場合、ログイン後、ロード中のサークルが回ったまま、一向にページが帰ってこなくなります。

ここで、Apache2 のエラーログを見ると、以下のように ModSecurity のエラーがズラズラと出てくることがわかると思います。

[Thu Apr 18 16:29:44.183725 2019] [:error] [pid 31511:tid 140221505050368] [client 192.168.10.199:56716] [client 192.168.10.199] ModSecurity: Warning. Match of "within %{tx.allowed_methods}" against "REQUEST_METHOD" required. [file "/usr/share/modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf"] [line "46"] [id "911100"] [msg "Method is not allowed by policy"] [data "PROPFIND"] [severity "CRITICAL"] [ver "OWASP_CRS/3.1.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [tag "OWASP_CRS/POLICY/METHOD_NOT_ALLOWED"] [tag "WASCTC/WASC-15"] [tag "OWASP_TOP_10/A6"] [tag "OWASP_AppSensor/RE1"] [tag "PCI/12.1"] [hostname "www.example.com"] [uri "/nextcloud/remote.php/dav/files/nextcloud/"] [unique_id "XLgnaMiY-WVujWqUqJqfzgAAAEg"]
[Thu Apr 18 16:29:44.194844 2019] [:error] [pid 31511:tid 140221505050368] [client 192.168.10.199:56716] [client 192.168.10.199] ModSecurity: Rule 7f87e6405748 [id "932110"][file "/usr/share/modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"][line "261"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.example.com"] [uri "/nextcloud/remote.php/dav/files/nextcloud/"] [unique_id "XLgnaMiY-WVujWqUqJqfzgAAAEg"]
[Thu Apr 18 16:29:44.250403 2019] [:error] [pid 31511:tid 140221505050368] [client 192.168.10.199:56716] [client 192.168.10.199] ModSecurity: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/usr/share/modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "93"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [severity "CRITICAL"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "www.example.com"] [uri "/nextcloud/remote.php/dav/files/nextcloud/"] [unique_id "XLgnaMiY-WVujWqUqJqfzgAAAEg"]
[Thu Apr 18 16:29:44.569523 2019] [:error] [pid 31511:tid 140221505050368] [client 192.168.10.199:56716] [client 192.168.10.199] ModSecurity: Warning. Operator GE matched 5 at TX:inbound_anomaly_score. [file "/usr/share/modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf"] [line "86"] [id "980130"] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5 - SQLI=0,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): Method is not allowed by policy; individual paranoia level scores: 5, 0, 0, 0"] [tag "event-correlation"] [hostname "www.example.com"] [uri "/nextcloud/index.php"] [unique_id "XLgnaMiY-WVujWqUqJqfzgAAAEg"]
[Thu Apr 18 16:29:44.583148 2019] [:error] [pid 31511:tid 140221387618048] [client 192.168.10.199:56715] [client 192.168.10.199] ModSecurity: Warning. Match of "within %{tx.allowed_methods}" against "REQUEST_METHOD" required. [file "/usr/share/modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf"] [line "46"] [id "911100"] [msg "Method is not allowed by policy"] [data "PROPFIND"] [severity "CRITICAL"] [ver "OWASP_CRS/3.1.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [tag "OWASP_CRS/POLICY/METHOD_NOT_ALLOWED"] [tag "WASCTC/WASC-15"] [tag "OWASP_TOP_10/A6"] [tag "OWASP_AppSensor/RE1"] [tag "PCI/12.1"] [hostname "www.example.com"] [uri "/nextcloud/index.php/apps/files/"] [unique_id "XLgnaMiY-WVujWqUqJqf0AAAAEw"]
[Thu Apr 18 16:29:44.592673 2019] [:error] [pid 31511:tid 140221387618048] [client 192.168.10.199:56715] [client 192.168.10.199] ModSecurity: Rule 7f87e6405748 [id "932110"][file "/usr/share/modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"][line "261"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.example.com"] [uri "/nextcloud/index.php/apps/files/"] [unique_id "XLgnaMiY-WVujWqUqJqf0AAAAEw"]
[Thu Apr 18 16:29:44.635339 2019] [:error] [pid 31511:tid 140221387618048] [client 192.168.10.199:56715] [client 192.168.10.199] ModSecurity: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/usr/share/modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "93"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [severity "CRITICAL"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "www.example.com"] [uri "/nextcloud/index.php/apps/files/"] [unique_id "XLgnaMiY-WVujWqUqJqf0AAAAEw"]
[Thu Apr 18 16:29:44.792224 2019] [:error] [pid 31511:tid 140221387618048] [client 192.168.10.199:56715] [client 192.168.10.199] ModSecurity: Warning. Operator GE matched 5 at TX:inbound_anomaly_score. [file "/usr/share/modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf"] [line "86"] [id "980130"] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5 - SQLI=0,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): Method is not allowed by policy; individual paranoia level scores: 5, 0, 0, 0"] [tag "event-correlation"] [hostname "www.example.com"] [uri "/nextcloud/index.php"] [unique_id "XLgnaMiY-WVujWqUqJqf0AAAAEw"]

このログのの細かい部分はあまり良くわかってはいませんが、注目すべきポイントがあります。それは、idmsgclienturi です。

client は、Webサーバにアクセスしているクライアントです。この時点では、自身のホスト名なりIPアドレスが表示されているはずです。

id は、ModSecurity のルールセットで定義されているポリシーのIDです。

ちなみに一番最初の行は、[ id "911100"] で、msg"Method is not allowed by policy となっています2

要するに、自身のIPからアクセスした場合に記録されているこれらのIDについては、ポリシーが適用されないようにする必要があります (くれぐれも悪意の第三者からのアクセスについてのエラーを除外しないように・・)。

 

除外リストを作成する

次の記事、”ModSecurity Web Application Firewall for NextCloud” を参考に、/etc/modsecurity/modsecurity_crs_99_whitelist.conf を作成して、その中に次のような除外フィルタを定義します。

<Directory /var/lib/nextcloud/>
    # VIDEOS
    SecRuleRemoveById 958291             # Range Header Checks
    SecRuleRemoveById 981203             # Correlated Attack Attempt

    # PDF
    SecRuleRemoveById 950109             # Check URL encodings

    # ADMIN (webdav)
    SecRuleRemoveById 960024             # Repeatative Non-Word Chars (heuristic)
    SecRuleRemoveById 981173             # SQL Injection Character Anomaly Usage
    SecRuleRemoveById 981204             # Correlated Attack Attempt
    SecRuleRemoveById 981243             # PHPIDS - Converted SQLI Filters
    SecRuleRemoveById 981245             # PHPIDS - Converted SQLI Filters
    SecRuleRemoveById 981246             # PHPIDS - Converted SQLI Filters
    SecRuleRemoveById 981318             # String Termination/Statement Ending Injection Testing
    SecRuleRemoveById 973332             # XSS Filters from IE
    SecRuleRemoveById 973338             # XSS Filters - Category 3
    SecRuleRemoveById 981143             # CSRF Protections ( TODO edit LocationMatch filter )

    # COMING BACK FROM OLD SESSION
    SecRuleRemoveById 970903             # Microsoft Office document properties leakage

    # NOTES APP
    SecRuleRemoveById 981401             # Content-Type Response Header is Missing and X-Content-Type-Options is either missing or not set to 'nosniff'
    SecRuleRemoveById 200002             # Failed to parse request body

    # UPLOADS ( 5 MB max excluding file size )
    SecRequestBodyLimit 4294967296
    SecRequestBodyNoFilesLimit 4294967296

    # GENERAL
    SecRuleRemoveById 960017             # Host header is a numeric IP address

    # REGISTERED WARNINGS, BUT DID NOT HAVE TO DISABLE THEM
    #SecRuleRemoveById 981220 900046 981407
    #SecRuleRemoveById 981222 981405 981185 981184
    # Added below by shiro@rough-and-cheap.jp
    SecRuleRemoveById 949110 911100 980130
</Directory>

<Directory /path/to/nextcloud> には、実際にNextcloudをデプロイしたパスを指定します。この場合は、この物理パスから下の部分へのリクエストに関しては、上記で指定したルールが除外されます。

特定のURIに対して除外させたい場合は、<LocationMatch /path/of/uri> とすることで、特定のURIのみに適用させることもできます。

保存後、Apache2を再起動します。

$ sudo systemctl restart apache2

 

ModSecurity の crs-setup.conf を編集

ModSecurity の /usr/share/modsecurity-crs/crs-setup.conf に一部のアプリケーション向けの除外リストがあるので、それを有効にするのも手かもしれません。

# crs-setup.conf の351行目あたり、コメントアウト
SecAction \
 "id:900130,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_exclusions_drupal=1,\
  setvar:tx.crs_exclusions_wordpress=1,\
  setvar:tx.crs_exclusions_nextcloud=1,\
  setvar:tx.crs_exclusions_dokuwiki=1"
#  setvar:tx.crs_exclusions_cpanel=1"

 

Nextcloud にログインする

セキュリティポリシーの除外リストを適用させることができたら、再度ログインを試みます。

ログインに成功すると、次のような画面になります。

 

URL を綺麗にする

次のように設定することで、URL中のindex.phpを除去してくれます。
mod_envmod_rewriteモジュールがインストールされている必要があります。また、.htaccesswww-dataユーザーが書き込めるようにしておく必要があります。

その上で、config.phpに次の設定を変更します。

<?php
$CONFIG = array (
    :
  'overwrite.cli.url' => 'https://www.rough-and-cheap.jp/ourcloud',
  'htaccess.RewriteBase' => '/ourcloud',
    :
);

occコマンドで、.htaccessファイルを更新します。

$ sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess

 

その他

ログイン直後のページ右上の、ユーザーのイニシャルが入った丸いアイコンをクリックし、[設定] をクリックすると、「設定」画面に入ることができます (設定画面に入るには、パスワードを要求されます)。

左側ペインの[管理] 項目にある[概要] をクリックすると、バージョン情報に加えて、「セキュリティ & セットアップ警告」 という画面に遷移します。

ここの「セキュリティ & セットアップ警告」 に警告が出ている場合、解決をしておく必要があります。

以下は、その例です。

 

X-Frame-Options not set to SAMEORIGIN

warning “X-Frame-Options not set to SAMEORIGIN”

クリックジャッキング対策 を元に、mod_headers を設定してください。

 

Your web server is not yet ..

Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken.

ModSecurity を併用している場合 の設定で回避できます。

それでもなお、ModSecurity のエラーが発生する場合は、ホワイトリストにIDを追加してください。

 

Strict-Transport-Security

"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。

参考: Enable HTTP Strict Transport Security

次の、<IfModule mod_headers.c> ... </IfModule> の節を追加します。

Alias /ourcloud "/var/lib/nextcloud/"

<Directory /var/lib/nextcloud/>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted

    <IfModule mod_dav.c>
        Dav off
    </IfModule>

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

    SetEnv HOME /var/lib/nextcloud
    SetEnv HTTP_HOME /var/lib/nextcloud
</Directory>

 

Service discovery

Your web server is not properly set up to resolve "/.well-known/caldav". Further information can be found in the documentation.
Your web server is not properly set up to resolve "/.well-known/carddav". Further information can be found in the documentation.

参考: Service discovery - General trouble shooting

次の節を、/etc/apache2/sites-available/default-ssl.conf に追加。

<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>

 

PHP OPcacheが適切に設定されていません...

PHP OPcacheが適切に設定されていません。よりパフォーマンスを向上させるには、php.iniで次の設定を推奨します

/etc/php/7.2/fpm/php.iniに、Opcache 関連の設定が有効になっているか確認します。

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

設定が反映されない場合、

$ sudo systemctl restart php7.2-fpm

で、php7.2-fpm を再起動してみる。

 

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

メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。

参考: Server tuning — Nextcloud 15 Administration Manual 15 documentation
参考: Memory caching — Nextcloud 15 Administration Manual 15 documentation

php-apcu をインストール。

$ sudo apt install php-apcu

config.php に次の項目を追加する。

$ sudo vi /var/lib/nextcloud/config/config.php
<?php
$CONFIG = array (
    :
  'memcache.local' => '\OC\Memcache\APCu',
);

/etc/php/7.2/fpm/php.ini に、次の行を追加する。

apc.enable_cli = 1

 

Some columns in the database are missing...

Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running 'occ db:convert-filecache-bigint' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read the documentation page about this.

  • filecache.mtime
  • filecache.storage_mtime

次のコマンドを実行してください。

$ sudo -u www-data php /var/lib/nextcloud/occ db:convert-filecache-bigint

 

まとめ

この文書をまとめるにあたって、再度インストールを検証したのですが、いろいろグダグダで失敗しまくりました。

ログイン画面でループになってしまうような場合は、ネットワーク関係の設定の見直し

  • /etc/netplan/01-netcfg.yaml
  • /etc/hosts
  • /etc/hostname

の記載間違いがないかをよく確認したほうがいいかもしれません。

また、ModSecurity については、インストール時にはいったん Off にしておいて、インストール後有効にして調整、のほうがいいかもしれません。

あと、公式のインストールガイドは、たいへん見にくいですよね。やっている間に頭がこんがらがってきてしまいました。

まぁ、とにかく自己責任でおねがいします。。

 

 

 


  1. MariaDB の設定をどこに書くのか、my.cnfmariadb.confconf.d/以下のディレクトリか、mariadb.conf.d/以下のディレクトリか、その最適な解がまだよくわかっていませんが・・。 

  2. ちなみにこのルールセットは、/usr/share/modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf にあります。id の頭3文字 ( 911 ) が、ルールセットのファイル名に対応しています。 


 

 

zaturendo

中小企業社内SE。

1件のコメント

Nextcloudセキュリティ対策 | DAICHU Laboratory · 2019年11月27日 11:41 AM

[…] Ubuntu 18.04 に Nextcloud をインストール […]

コメントを残す

アバタープレースホルダー

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