アカウント、二要素認証、APIトークン
Bucket & Code Server IDEには独自のアカウントがあります。同じ名前とパスワードでパネル、Git、SVN、Bucket、エディターにログインします。QTSのアカウントではログインできません。このガイドでは二要素認証、その有効時にgitとWebDAVクライアントで使うパスワード、スクリプト用APIトークン、パスワードの誤入力によるロックからの復旧を説明します。
- ロールviewer、member、developer、admin
- 2FAスマートフォンのコード
- クライアントアクセストークン、アプリパスワード
- トークンスクリプトとCI用
- ロックアクセスの復旧
画像は、このガイドどおりに各項目を入力したパネルです。開発者の名前は ola 、管理者は ewaです。QRコードにはぼかしをかけ、キー、アプリパスワード、トークンにはサンプルを使っています。二要素認証とアプリパスワードの画像は、パネルのテストデータによるものです。
01ロール
| ロール | 許可される操作 |
|---|---|
| viewer / member | viewerはパネルを閲覧できます。Backups、Storage、Users、Logsは管理者専用です。memberは書き込み権限のあるGit、SVN、Bucketにも書き込めますが、エディター、cronジョブ、ビルドは使えません。どちらのロールもGitリポジトリや組織を作成できません。memberはdeveloper未満のアカウントが所有または管理するGitリポジトリにはプッシュできません。CIが有効な場合は、Actionsが有効なリポジトリにもプッシュできません |
| developer | さらにエディターを開き、アプリをビルドし、自分のcronジョブを実行し、NASのリポジトリにパッケージを公開できます(一覧への登録は管理者が行います) |
| admin | すべての操作:アカウント、設定、ストレージ、ネットワーク、モジュール、アプリの有効化、カーネルモジュールの読み込み |
developerロールはNAS上のroot権限を持ちます。エディターのターミナル、開発者のcronコマンド、プッシュ可能なリポジトリのCIワークフローはすべてrootとして実行されます。NASの管理者パスワードを渡してよい相手だけに付与してください。インターネットに何かを公開する前に、すべてのdeveloperとadminで二要素認証を有効にしてください。
02二要素認証を有効にする
各アカウントが自分で Your account (アクティビティバー下部のボタン)から有効にします。
- 次を押します: Set up two-factor authentication。

- スマートフォンの認証アプリでQRコードを読み取るか、キーを入力します。アプリに表示されている6桁のコードを入力し、次を押します: Turn on。コードを確認するまでは、従来どおりにログインできます。

- 以後はパスワードの後にコードの入力を求められます。


- コードは6桁で、30秒ごとに変わります。30秒前後にずれたコードも有効です。同じコードが2回受け付けられることはありません。
- 新しいコードでも失敗する場合は、スマートフォンの時計がずれている可能性があります。時刻の自動設定を有効にしてください。
- 二要素認証を無効にするにはパスワードが必要です。
03二要素認証を使うGit、SVN、Bucket
二要素認証が有効になると、git、SVN、WebDAVクライアントではアカウントのパスワードを使えません。代わりに以下を使います。
- HTTPまたはHTTPS経由のGit: Forgejoのアクセストークンを使います。Forgejoの次の場所で作成します: Settings → Applications。SSHキーは従来どおり使えます。
- SVNとWebDAVクライアント: Your accountで作成したアプリパスワードを使います。ランダムな25文字を5組に分けたもので、一度だけ表示されます。新しく作ると以前のものは置き換わり、アカウントのパスワード変更や二要素認証の無効化で削除されます。

04スクリプトとCI用のAPIトークン
スクリプトやCIジョブは、パスワードの代わりにAPIトークンを使います。Your accountで次を押します: New token。用途がわかる名前を付け、スコープを選んでください。

- スコープ
read、writeとadminは、それぞれviewer、developer、adminロールに対応します。トークンは最上位のスコープで動作しますが、所有者の現在のロールを超える権限は持ちません。 memberに対応するスコープはなく、memberが作成できるのはreadトークンです。 - トークンは一度だけ表示され、bvsdはハッシュだけを保存します。スクリプトは次の形式で送信します:
Authorization: Bearer bvs_…。 - パスワードを変更すると所有者の全トークンが失効し、アカウントを無効にするとトークンは使えなくなります。
- トークンではパスワードや二要素認証の変更、トークンの作成や削除はできません。そのため漏えいしても所有者を締め出すことはできません。不要なトークンは削除してください。削除後に送信すると401が返ります。
05パスワードの誤入力とロック
- 同じアドレスから15分以内に5回ログインに失敗すると、そのアドレスは15分間ロックされ、正しいパスワードでも入れません。IPv6クライアントは/64ネットワーク単位で数えます。
- 同じアドレスから同じアカウントへのログインに5回失敗すると、そのアドレスからそのアカウントへのアクセスが15分間ロックされます。
- 多数のアドレスから同じアカウントへのログインに失敗すると、以後のログインに125ミリ秒から最大2秒の遅延が加わります。ローカルネットワークからの失敗でアカウントがロックされることはありません。
- インターネットから同じアカウントへのログインが、最後の成功以降20回失敗すると、送信元アドレスに関係なくインターネットからのアクセスがロックされます。ローカルネットワークからは引き続きログインできます。回数は Users ページで設定します。0にするとこのロックは無効です。

リバースプロキシの背後では、そのプロキシが信頼済みの場合だけ、プロキシが報告したアドレスで数えます。それ以外では全クライアントがプロキシ自身のアドレスとして扱われ、誰かが5回パスワードを誤入力すると全員が締め出されます。
06管理者ができること
管理者は Users ページで対象の行からアカウントを開きます。
- スマートフォンを紛失した場合: Turn it off をTwo-factor authenticationで選びます。本人が再設定するまではパスワードだけでログインできます。

- インターネットからロックされたアカウント: Unlockを使うか、新しいパスワードを設定します。
- Set a new password はアカウントのセッションを終了し、APIトークンを失効させます。
- アカウントを無効にするとセッションが直ちに終了し、トークンも停止します。データは残ります。最後の有効なadminを降格、無効化、削除することはできません。
- 無効なアカウントやmemberまたはviewerに変更されたアカウントのcronジョブは残りますが、実行されません。アカウントを削除するとジョブも削除されます(バージョン1.0.0-52以降、 スケジュールされたジョブ)。
07管理者がロックアウトされた場合
NASの管理者は、NAS上のSSHセッションから任意のアカウントをリセットできます。これらのコマンドはrootだけが開けるソケットを介してbvsdと通信し、それぞれデータフォルダー内の log/audit.log に記録されます:
/usr/bin/bucketvs/bin/bvs user list /usr/bin/bucketvs/bin/bvs user password administrator /usr/bin/bucketvs/bin/bvs user totp-reset administrator /usr/bin/bucketvs/bin/bvs user unlock administrator
bvs user passwordはランダムな20文字のパスワードを設定して表示します。次のログイン時に本人がパスワードを選び直す必要があります。セッションは終了し、APIトークンは失効します。bvs user totp-resetはアカウントの二要素認証を無効にします。bvs user unlockはインターネットからのパスワード誤入力によるロックを解除します。