Ubuntu日和

【第85回】絶対にアカウントがBANされないオンラインストレージサービスをノーメンテナンスで運用する

 現在Windowsでは、Microsoftアカウントによるログインが事実上の強制となっている。さらにOneDriveによるデスクトップフォルダー等の自動同期も有効になっている。ただしOneDriveは無償では5GBしかないので、日常利用には厳しく、有償利用が基本となる。ちなみにOneDriveとOneDrive for Businessは別物である、といった難しさもある。

 ユーザーフォルダーは極めてプライベートなものであるため、やむを得ず社会通念上問題があるファイルが置かれることもある。Microsoftに限らず大手のクラウドストレージサービスはアップロードされたファイルを機械的にチェックしており、もしも引っかかってしまったらアカウントがバンされてしまう。そういうこともあると聞いている。単一のアカウントを複数のデバイスで使用している場合、その可能性はさらに跳ね上がる。

 であれば、自分でクラウドストレージサービスを運用すれば誰からもアカウントをバンされるおそれはないわけだが、今度はサーバーを自分でメンテナンスしなくてはならないということになる。

 さすがにサーバーの知識がゼロだと厳しいが、そこはクリアできたとすると、メンテナンスコストを極限までゼロにする方法は存在する。もちろん常に最新かつセキュアな状態に保った上でだ。

 今回はオープンソースのクラウドストレージサービスであるNextcloudを、可能な限りノーメンテナンスで運用する方法を紹介する。実際に筆者はこの方法で3年ほどノーメンテナンスノートラブルで運用している。Ubuntuのバージョンが22.04 LTSなので、そろそろメンテナンスを行なう必要を感じているが、実はそれをスキップする方法もある。

筆者が運用しているNextcloudサーバー。2023年3月4日にセットアップしてから、手動によるセキュリティアップデート等は行なっていない

事前に考えておくこと

 サーバーの設定前にいくつか考えておくべきことがある。

どこに置くか

 まずは当然のことであるがサーバーの置き場をどこにするかを考える必要がある。今となってはVPSサービスを利用するのが最初の選択肢となるであろう。もちろん自宅サーバーにしても構わない。その場合、インターネット経由でのログインが難しくなるが、今となってはクリアする方法も複数存在する。

 今回はさくらのVPSを使用するが、筆者が実際に運用しているのはKAGOYA JAPANのVPSサービスだ。Nextcloudのように大してハードウェアスペックが必要ないわりにストレージの使用量が多いサーバーにピッタリのプランがある。

止めてもいい時間

 ノーメンテナンスではあるが、ノンストップではない。よって、あらかじめ止めてもいい時間を考えておく。通常人間には睡眠時間があるので、特に大きな問題にはならないはずである。複数人で使用するにしても、必ず止めてもいい時間はあるはずだ。どうしても0でないといけないという場合は、残念ながら見送り、大手のクラウドストレージサービスを検討しよう。

Nextcloudのインストール

 VPSサービスを使用する場合、たいていはUbuntu 24.04 LTSのテンプレートがあるのでこれを選択する。さくらのVPSの場合、デフォルトでパケットフィルター(ファイアウォール)が有効になっているが、これを無効にする。Ubuntuのファイアウォール機能(UFW)を使用するからだ。

VPSのパケットフィルターは無効にする

 では、Nextcloudをインストールしよう。次のコマンドを実行する。

$ sudo apt install snapd
$ sudo snap install nextcloud

 インターネット経由の場合、TLSでのログインが必須なので、Let’s Encryptの設定をする。

$ sudo nextcloud.enable-https lets-encrypt

 上記のコマンドを実行すると、https://letsencrypt.org/repository/に同意すること、ドメイン名を使用していること、80番ポートと443番ポートが空いていることの確認が表示される。問題がなければ“y”を入力してエンターキーを押す。続けてメールアドレスとドメインを入力する。

 Webブラウザを起動し、Nextcloudサーバーにアクセスする。ユーザーとパスワードを入力すれば、あとは指示に従えば初期設定が完了する。

Nextcloudの初期設定

ファイアウォールの設定

 あとはひたすらセキュリティの設定となる。とはいえ、OpenSSHの鍵認証を使用する方法などは省略する。まずは次のコマンドを実行してファイアウォールを有効にする。

$ sudo ufw limit 22
$ sudo ufw allow 443
$ sudo ufw enable

snapパッケージの更新タイミング

 snapパッケージ、今回はNextcloudだが、基本的には自動的にアップデートされる仕組みとなっている。ただし更新のタイミングは一定ではない。これだと不便なので、更新のタイミングをあらかじめ固定しておくのがおすすめだ。前述の止めてもいい時間がここで登場してくる。

 たとえば午前3時の場合、次のコマンドを実行する。

$ sudo snap set system refresh.timer=03:00

パッケージの自動アップデート

 パッケージの自動アップデートは、/etc/apt/apt.conf.d/50unattended-upgradesファイルを編集することによって可能となる。diffを見るのが分かりやすい。

--- /etc/apt/apt.conf.d/50unattended-upgrades.orig      2023-03-04 12:17:46.091755328 +0000
+++ /etc/apt/apt.conf.d/50unattended-upgrades   2026-02-23 03:16:12.898367828 +0000
@@ -10,8 +10,8 @@
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
-       "${distro_id}ESMApps:${distro_codename}-apps-security";
-       "${distro_id}ESM:${distro_codename}-infra-security";
+//     "${distro_id}ESMApps:${distro_codename}-apps-security";
+//     "${distro_id}ESM:${distro_codename}-infra-security";
 //     "${distro_id}:${distro_codename}-updates";
 //     "${distro_id}:${distro_codename}-proposed";
 //     "${distro_id}:${distro_codename}-backports";
@@ -80,27 +80,27 @@

 // Remove unused automatically installed kernel-related packages
 // (kernel images, kernel headers and kernel version locked tools).
-//Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
+Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

 // Do automatic removal of newly unused dependencies after the upgrade
-//Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
+Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

 // Do automatic removal of unused packages after the upgrade
 // (equivalent to apt-get autoremove)
-//Unattended-Upgrade::Remove-Unused-Dependencies "false";
+Unattended-Upgrade::Remove-Unused-Dependencies "true";

 // Automatically reboot *WITHOUT CONFIRMATION* if
 //  the file /var/run/reboot-required is found after the upgrade
-//Unattended-Upgrade::Automatic-Reboot "false";
+Unattended-Upgrade::Automatic-Reboot "true";

 // Automatically reboot even if there are users currently logged in
 // when Unattended-Upgrade::Automatic-Reboot is set to true
-//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
+Unattended-Upgrade::Automatic-Reboot-WithUsers "true";

 // If automatic reboot is enabled and needed, reboot at the specific
 // time instead of immediately
 //  Default: "now"
-//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
+Unattended-Upgrade::Automatic-Reboot-Time "04:00";

 // Use apt bandwidth limit feature, this example limits the download
 // speed to 70kb/sec

 ESMリポジトリは次に述べるUbuntu Proで使用するもので、通常は使用しないのでコメントアウトしている。あとはなんとなく分かるだろう。アップデートによって不要になったカーネルパッケージと依存パッケージを自動削除し、再起動が必要な場合は4時に、ユーザーがログインしていても自動的に実行する、という設定になっている。

 同時にこちらのコマンドを実行しておくことを推奨する。

$ echo 'APT::Get::Never-Include-Phased-Updates "true";' | sudo tee /etc/apt/apt.conf.d/99-Phased-Updates

 端末からaptコマンドを実行していると気づくが、必ずしも全部の更新を適用しているわけではなく、Phased Update(段階的アップデート)という仕組みで、多くのユーザーにとって問題がないアップデートを適用している。

 上記のコマンドを実行すると、Phased Updateの対象となっているパッケージはインストールしなくなる。換言すると、多くのユーザーにとって問題がないと思われるパッケージのみを適用し、その分安全性を確保するというわけだ。昨今のWindowsほどではないが、Ubuntuでもごく稀に問題のあるアップデートが提供されることがある。json-cのときはひどい目に遭った。

Ubuntu Pro

 Ubuntu Proに関しては第50回で軽く紹介したが、Ubuntuアカウントを取得してアクティベーションするとサポート期間が10年間に延びるというものだ。ついでに再起動不要のカーネルパッチを使用できる。

 それはいいじゃないかと思われがちだが、ここではおすすめしない。というのも、snapパッケージを使用する限りUbuntuのバージョンは可能な限り新しいほうがいいという経験則によるものだ。以前カーネルの非互換によるsnapパッケージ(LXD)の動作不良を経験したことがあるからだ。

 トラブルが起きたときに対処するのはなかなか難しいが、Ubuntuのアップグレードはあらかじめスケジュールできる。新しいカーネルを使うことによって避けることができるトラブルは、避けておいたほうがいいのだ。

バックアップ

 データというものは、得てして消えたら困るものが消えたら困るタイミングで消えるものである。従ってしっかりとバックアップを取っておくに越したことはない。VPSに置いてあったら消えることはないと安易に考えがちだが、そのようなことは決してない。実際にデータを飛ばされた経験者であるところの筆者が断言するのだから間違いない。そのサービスは即刻使用をやめているため、今回紹介した2社ではないということは明言しておく。

 snapパッケージ版Nextcloudにはnextcloud.exportというコマンドがあり、これを実行すると/var/snap/nextcloud/common/backups以下にバックアップが作成される。これをどこかに置いておくとそれがバックアップになるということだ。

 筆者は次のようなスクリプトを定時に実行し、自宅のNASにバックアップを取っている。

#!/bin/sh

BACKUP_PATH=/var/snap/nextcloud/common/backups
BACKUP_TO=ikuya@example.com:/media/backup/nextcloud/

nextcloud.export
STATUS=$?
if [ $STATUS = "0" ];then
  BACKUP_DIR=$(ls $BACKUP_PATH)
else
  exit 1
fi
if [ -n "$BACKUP_DIR" ]; then
  BACKUP_FROM=$BACKUP_PATH/$BACKUP_DIR/
  rsync -az --delete-after -e "ssh -i /root/.ssh/id_rsa" "$BACKUP_FROM" "$BACKUP_TO"
  rm -rf "$BACKUP_FROM"
else
        exit 1
fi

 とはいえクラウドストレージでしか使用しないのであれば、データは常に手元にあることとなる。VPSによってはバックアップサービスを提供しているものもあり、お金で解決する方法もある。バックアップの必要性やその方法は、個々人によって違ってくるだろう。

Nextcloudデスクトップアプリ

 Nextcloudデスクトップアプリは、Ubuntu(というかLinux)向けにはAppImageによる提供だが、はっきりいって使いにくい。PPAからインストールすることを強くおすすめする。

応用例

 第26回第27回でSambaサーバーを構築する方法を紹介したが、自動アップデートに関してはこのような場合でも適用できる。現にうちのNASサーバーもノーメンテナンスで運用している。