Nextcloud で 2FA を有効にしてセキュリティを向上させる

# TL;DR

何となく自分で運用している [Nextcloud](https://nextcloud.com/) に 2FA を設定してみようと思った。思い立ったからやってみただけで、導入の動機としては正直セキュリティ向上は二の次。
でも [Nextcloud](https://nextcloud.com/) をインターネットからアクセスできるようにしているのであれば、 2FA はパスワードクラックに対する強い対策になるので、セキュリティの観点からみると有効にしておいた方が良いでしょう。

# 環境とか

## 前提条件

*   Nextcloud の管理権限を持っている事。

## 利用バージョン

*   Nextcloud 13.0.4

# Nextcloud で 2FA アプリを導入

まずは Administrator 権限を用いて、 Nextcloud で 2FA を使えるように設定します。

## Nextcloud で 2FA を設定できるよう設定

Nextcloud で 2FA が有効になっていない場合は、 Administrator 権限で 2FA を行うためのアプリを有効化する必要があります。

画面右上のユーザーアイコンをクリックし、出てきたメニューから `アプリ` を選択します。

![ホーム画面.png](https://qiita-image-store.s3.amazonaws.com/0/251957/034c9330-18a2-9448-c085-cbc34caa14e8.png)

画面左側のメニューから `セキュリティ` をクリックし、右側に表示されたプラグインの一覧から `Two Factor TOTP Provider` を見つけ、 `有効にする` ボタンをクリックします。少し待つと自動的に `Two Factor TOTP Provider` がインストールされ、有効になります(ボタンの表示が `無効にする` に変化します)。

![セキュリティのアプリ一覧.png](https://qiita-image-store.s3.amazonaws.com/0/251957/63a99156-eda0-02d2-c701-daeb9185d316.png)

これだけで Nextcloud での 2FA 有効化は完了です。かんたん。

# ユーザーごとに 2FA を有効化

Administrator 権限を用いて、 Nextcloud で 2FA を使えるようにしたら、今度は各ユーザーごとに 2FA を利用するための設定を行います。

ちなみに公式のドキュメントは [Using two-factor authentication — Nextcloud 13 User Manual 13 documentation](https://docs.nextcloud.com/server/13/user_manual/user_2fa.html) を参照してください。バージョン 11 と 12 でも同様のドキュメントがあるので多分似た様な手順でできると思います。

## ユーザーの 2FA を有効化

Nextcloud での 2FA 有効化ができたら、ユーザー単位で 2FA を有効化します。

画面右上のユーザーアイコンをクリックし、出てきたメニューから `設定` を選択します。

![ホーム画面.png](https://qiita-image-store.s3.amazonaws.com/0/251957/034c9330-18a2-9448-c085-cbc34caa14e8.png)

画面左側のメニューから `セキュリティ` をクリックすると次の画面になります。

![Personal のセキュリティ画面-01.png](https://qiita-image-store.s3.amazonaws.com/0/251957/2fcb8916-de1b-05c5-4b91-e86284b8b899.png)

`第二要素バックアップコード` と `TOTP 第2認証` と記載されているのが先ほど有効化した `Two Factor TOTP Provider` アプリによる 2FA の項目です。 `TOTP有効化` にチェックを入れると次のように QR コードが表示されます。

![Personal のセキュリティ画面-02.png](https://qiita-image-store.s3.amazonaws.com/0/251957/5570bb81-dd2f-7acd-765c-cc05a2540596.png)
表示された QR コードを、スマホの「Google Authenticator」アプリ等で登録します。登録したアプリがワンタイムパスワードを出力するようになるので、アプリが出力した6桁の数字を `認証コード` と表示されているテキストエリアに入力し、 `検証` ボタンをクリックしてください。
※ 一応、スクリーンショットの QR コードにはモザイクをかけておきましたが、言うまでもなくこのキーは無効化してあります。

次の画面のように、 `TOTP有効化` にチェックが入れば設定したユーザーで 2FA を利用するための準備は完了です。

![Personal のセキュリティ画面-03.png](https://qiita-image-store.s3.amazonaws.com/0/251957/f7eb0f7b-625a-bf17-5f29-0827a3f3d400.png)

## 2FA を利用したログインを試す

実際に 2FA を用いてログインをしてみます。

まずは Nextcloud からログアウトします。次のような Nextcloud のログイン画面が表示されたら、従来通り `ユーザ名かメールアドレス` と `パスワード` を入力します。この時点ではまだワンタイムパスワードは利用しません。

![ログイン画面.png](https://qiita-image-store.s3.amazonaws.com/0/251957/e7620bd9-89aa-9878-c286-2071ff557717.png)

入力したログイン情報が正しければ、通常はファイルやディレクトリの一覧が表示されますが、2FA を有効にしている場合は次の画面が表示されます。

![ログイン画面-TOTP.png.png](https://qiita-image-store.s3.amazonaws.com/0/251957/ba8cd75f-402c-0703-37ed-7e9ebc5e692f.png)

この `認証コード` に、 [ユーザーの 2FA を有効化](#ユーザーの-2fa-を有効化) で登録したアプリが生成する6桁の数字のワンタイムパスワードを入力し、 `送信` ボタンをクリックします。認証コードが有効であればログインに成功し、ファイルやディレクトリの一覧が表示されます。

## バックアップコードの準備

ワンタイムパスワードを出力するデバイスが故障したり、紛失したりしてしまうとログインすることができなくなってしまいます。そこで、そのようなときに備えてバックアップコードを安全に保管しておくことが推奨されます。

バックアップコードは先ほど 2FA を有効化した下記の画面で、 `バックアップコードを生成する` ボタンをクリックすると表示されます。

![Personal のセキュリティ画面-03.png](https://qiita-image-store.s3.amazonaws.com/0/251957/f7eb0f7b-625a-bf17-5f29-0827a3f3d400.png)

バックアップコードが生成され、次の画面のように表示されます。

![00.07.Screenshot_2018-07-10 設定 - Nextcloud.png](https://qiita-image-store.s3.amazonaws.com/0/251957/745ebe1e-90af-ec23-abfe-d66b5980ef47.png)

生成されたバックアップコードはファイルへ保存したり、印刷したりしてください。いずれの場合も、安全に保管する必要があります。複数行にわたってバックアップコードが表示されますが、1行につき一つのバックアップコードとなります。1度使ったバックアップコードは無効化され、2度と利用することはできません。

※ スクリーンショットにバックアップコードを写したままにしていますが、言うまでもなくこのキーは無効化（ｒｙ

## バックアップコードを利用したログインを試す

バックアップコードを用いたログインを試してみます。

まずは Nextcloud からログアウトします。Nextcloud のログイン画面が表示されたら、従来通り `ユーザ名かメールアドレス` と `パスワード` を入力します。次の 2FA の画面が表示されますが、バックアップコードを有効にしている場合は `バックアップコードを使用する` というボタンが増えています。ここではバックアップコードを用いたログインを試すので、 `認証コード` を **入力せずに** `バックアップコードを使用する` ボタンをクリックします。

![ログイン画面-TOTP(バックアップコード).png](https://qiita-image-store.s3.amazonaws.com/0/251957/5f6aacd3-b2ec-365b-d30b-7d7ac3699ff5.png)

次のバックアップコード入力画面が表示されます。先ほど生成したバックアップコードのうち、どれか一つを入力し、矢印(→)ボタンをクリックてください。

![バックアップコード入力画面.png](https://qiita-image-store.s3.amazonaws.com/0/251957/f3c91834-2fde-febc-4622-5f32724798fb.png)

バックアップコードが正しければログインに成功し、ファイルやディレクトリの一覧が表示されます。

また、一度利用したバックアップコードは無効化されます。同じバックアップコードを利用しようとすると、次の画面のように `第二要素の認証でエラーが発生しました` と表示されログインに失敗します。

![バックアップコード入力画面(エラー).png](https://qiita-image-store.s3.amazonaws.com/0/251957/81f8c9e4-b3e9-fedd-e017-cc1c03559b72.png)

おしまい。