TrueNASの共有フォルダとNextcloudを連携させる

2022-10-08
  • B!

Nextcloud TrueNAS

TrueNASのプラグインはJail環境で動作するので、Nextcloudプラグイン内の各ユーザーストレージはTrueNASのSMB, AFPとは別のストレージ領域となる。しかし、今やろうとしていることは、TrueNAS本体にバックアップした写真をNextcloudプラグインで閲覧や管理ができるようにすることである。

Nextcloudにはプラグイン機能があり、「External storage support」プラグインを使うと、他のローカルディレクトリやCIFSなどのファイルをマウント可能になる。この方法を使い、FreeNASで運用している共有フォルダ用のディレクトリへJail側のNextcloudがアクセスできるようにする。

ここから先の説明は、Jail側からホストOSのローカルディレクトリへ直接アクセスできるような設定を行うことになる。すなわち部分的にJailのセキュリティを下げることになる点を考慮ながら、セキュリティの低下が他に波及しないようにTrueNASの共有フォルダ管理に注意する。

下準備

Nextcloudの「アプリ」機能がいわゆるプラグイン機能である。Nextcloudのアプリ設定から無効なアプリ欄にある「External storage support」を有効にする。すると、「外部ストレージ」設定メニューが使用可能になる。

ディレクトリの共有経路の設定

TrueNASで写真バックアップ用のデータセット(SMBの共有ルートディレクトリ)として使用しているディレクトリをNextcloudのJail側でマウントする。こうすることでNextcloudが動作しているJail側からTrueNASのファイルへアクセスを可能とさせる。Jailは閉じたプロセス空間とファイルシステム内での利用に限定されているので、ファイルシステムのマウントという形でアクセスを行う。

では、TrueNASの写真バックアップ用のデータセットをNextcloudでマウントする設定を行う。今回は、次のような設定をゴールにする。

ホストOSの /mnt/Pool001/photo_bak/z_dev_photos 
Jail内の /root/media/z_dev_photos としてマウントさせる

まずはじめに、Nextcloud側のJailに入り、マウントポイントのディレクトリを作成する。 NextcloudのJail内で /root/media/z_dev_photos ディレクトリをmkdirで作成。ホストOSからのフルパスで見ると、/mnt/Pool001/iocage/jails/nextcloud/root/media/z_dev_photos となる。

Jailの中へシェルで入る方法はこちらを参考に。

TrueNASやJailでsudoを使えるようにする

マウントポイントのディレクトリが作成できたらTrueNASのWeb管理画面を開き、JailのMOUNT POINTSメニューからマウントの設定を行う。

MOUNT POINTSの変更は該当のJailが停止している状態で行う。

パスの設定画面に切り替わったら、ホストのどこのディレクトリをJailのどこのディレクトリとしてマウントするかパスを設定する。

先ほど作成したディレクトリとホストOS側のディレクトリを紐つける。

Nextcloudの設定

管理 > 外部ストレージ (External Storage)で、ローカルストレージを追加する。ファイルパスは先ほどJail内に設定したマウントポイントのディレクトリを指定する。さらに、Nextcloud上で表示するフォルダ名称もできるので、日本語でわかりやすい名称を設定すると良いだろう。

設定が完了すると、Nextcloud上では外部ストレージの矢印のようなマークのついたフォルダとして表示される。これで内部のファイルへアクセス可能となる。

TrueNASとNextcloud双方向でファイル操作を行う権限設定

これまでの設定でホストOS内のファイルをJailのNextcloud側から閲覧することは可能になったが、双方から書き込みや変更するwrite権限を持たせるためにはもうひと工夫設定をしなければならない。理由はユーザー権限の問題。
  • ホストOS側のSMBやAFPはログインしたユーザー権限でファイルを操作する
  • Nextcloudはnginxのwwwグループ権限でファイルを操作する
グループwww権限で読み書きできるようにJail側のマウントポイントの持ち主をroot:www、パーミッションを755に変更しておく。以下のような状態にしてwwwグループであれば読み書きできる状態にする。
(TrueNAS側のシェルで)
% ls -al /mnt/Pool001/iocage/jails/<Jail名>/root/media
drwxr-xr-x   2 root  www     2 Jan 16  2022 z_dev_photos
さらに、TrueNAS OS側のデータストアのディレクトリも同様にGID wwwによる読み書きができるように権限の変更または追加を行う。TrueNASのWeb設定画面のPools設定から、データストアがwwwグループでも読み書きできるように設定する。

Jail内のユーザーとグループはホストOSと共用であるという仕様を利用して、グループwwwを共通の権限としてファイルアクセスすることでSMB, AFP, nextcloudいずれからもファイル操作ができるようになる。