アカウント
登録のルール、パスワードを忘れたとき
登録のルール
auth.registration は open、invite、closed のどれかで、管理画面で設定します。
invite では、管理者が発行したコードが必要です。登録リクエストの invite_code に入れます。
メールを設定していなければ、登録するとその場でアカウントができ、サインインした状態になります。メールを設定していると、アドレスを確認するまでアカウントはできません。メールを見てください。
最初にできたアカウントが管理者になります。初回起動時に自動で作られるアカウントのことです。
ロール
権限はロールから来ます。アカウントはロールをちょうど一つ持ち、組み込みのロールは四つです。
| ロール | できること |
|---|---|
owner | すべて |
admin | アカウント、招待、ここにあるものの閲覧。アカウントの削除、他人の共有の削除、ロールの編集はできない |
member | アップロードと、自分がアップロードしたものの管理 |
guest | サインインはできるが、何も許可されていない |
新しいアカウントは auth.default_role のロールになります。変えなければ member です。そのロールが存在しないとサーバーは起動しません。打ち間違いは、登録時に見知らぬ人への 500 として現れる前に、起動時にわかります。
member を編集せず、別のロールを割り当てる
組み込みのロールは変更できません。一般ユーザーの権限を減らしたいなら、自分で作ったロールを auth.default_role に指定します。
roles:write を持つ最後のアカウントは、削除も降格もできません。
アカウントの状態
| 状態 | 意味 |
|---|---|
active | 通常 |
disabled | 停止中。止まるのは本人で、中身は止まらない |
deleted | 削除済み。行の中身も消される。あなたのデータの置き場所を参照 |
無効にすると、その人はサインインできなくなります。共有は配信され続けます。リンクを持っている人は何も悪いことをしていないからです。中身も止めたいなら、管理者が共有そのものを無効にします。
自分のアカウントを変える
自分の名前やアドレスを変えたり、自分のアカウントを削除したりできます。どちらも先に現在のパスワードを求められます。
API トークンではどちらもできない
どちらも API トークンではできず、サインインしているときだけできます。
アカウントを削除すると、アップロードしたものもすべて終了します。渡したリンクを生かしておくことを選んだ場合は別です。
アドレスを変えると、そのアドレスの確認は外れます。メールを設定していれば、確認メールを送り直せます。メールのリンクが確認するのは送った先のアドレスだけなので、そのあいだにまたアドレスを変えると、リンクは使えなくなります。
パスワード
デフォルトでは 8 文字以上です(auth.password.min_length)。大文字小文字の混在、数字、記号を必須にすることもでき、三つともデフォルトはオフです。ルールが効くのはパスワードを設定するときで、使うときではありません。厳しくしても、既存のアカウントが締め出されることはありません。
漏洩リストと照合する
auth.pwned.enabled を有効にすると、新しいパスワードはすべて Have I Been Pwned と照合され、既知の漏洩に含まれていれば断られます。
インスタンスの外に出るもの
パスワードの SHA-1 ハッシュの先頭 5 文字だけです。照合はこちらで行います。3 秒以内にサービスに届かなければ、パスワードは許可され、ログに一行残ります。auth.pwned.url で、自分で動かすミラーを指定することもできます。
GitHub、Discord、自前の ID プロバイダーでのサインインは別のページにあります。別のアカウントでサインインするを見てください。
2 段階認証
パスワードでサインインする人は、アカウントページから認証アプリを追加できます。追加すると、パスワードでのサインイン時に、アプリの 6 桁のコードも求められます。入力はパスワードから 5 分以内です。
- アプリのコードを一度入力して初めて有効になります。設定に失敗しても締め出されることはありません。
- リカバリーコードが 10 個、一度だけ表示されます。それぞれ一回だけ、コードの代わりに使えます。新しく発行すると、古いものは使えなくなります。
- 無効にするとき、リカバリーコードを発行し直すときは、パスワードかコードが必要です。API トークンではどちらもできません。
- コードを求めるのはパスワードでのサインインだけです。GitHub、Discord、自前の ID プロバイダーでのサインインでは求めません。そちらのプロバイダーに独自の 2 段階目があるからです。
誤ったコードはアカウント単位で数える
多すぎると、どのアドレスからでもしばらく拒否されます。推測している人はもうパスワードを持っているので、パスワードを変えてください。
アプリもリカバリーコードもなくした人は、管理者が管理画面からリセットできます。ユーザー一覧で、誰が有効にしているかがわかります。管理者が一人しかいない場合は、マシン上で次を実行します。
tessera-server reset-mfa -u adminサービスを止めていても動きます。以後、そのアカウントはパスワードだけでサインインします。
パスキー
パスキーを使うと、パスワードの代わりに指紋、顔、端末の PIN でサインインできます。アカウントページから追加します。一つのアカウントに複数登録でき、それぞれの名前は変えられます。パスキーでのサインインは 2 段階分として扱うので、コードは求めません。
パスキーは一つのアドレスに属する
server.public_url のホスト名に結びつきます。未設定ならブラウザに入力したアドレスです。インスタンスを別のドメインに移すと、パスキーはすべて使えなくなり、ほかの方法でサインインして追加し直すことになります。誰かがパスキーを追加する前に server.public_url を設定してください。
アカウントは最後のサインイン方法を外せません。パスキーもその一つに数えます。
パスワードを忘れたとき
コマンドラインから
ネットワークは不要で、サービスを止めていても動きます。管理者が一人しかおらず、その人が締め出されたときはこれを使います。
tessera-server reset-password -u admin新しいパスワードを、表示せずに二回尋ねます。二回が一致しなければ何も変わりません。
ほかの方法もあります。
--password-stdinはパイプから読みます。自動化ではこれを使います。--generateは生成したパスワードを表示し、そのアカウントに変更が必要だと印を付けます。-p <値>は値を直接渡します。
-p は漏れる
コマンドの実行中、ps でマシンのすべてのユーザーにパスワードが見え、
シェルの履歴にも残ります。自動化では --password-stdin を使ってください。
端末もフラグもない場合(スクリプトや cron ジョブ)は、パスワードを生成して表示します。なので --password-stdin なしでパスワードをパイプで渡すと、代わりに生成されたパスワードが設定されます。
Password for `admin` set to:
0cae83d5ad2ca901d5163bf712eef39fb355d0fe1a9ebd2ff094c7b0b053816a
Sign in with it and choose a new one — this account is now marked as owing a change.
There was no terminal to ask at, so this one was chosen here.
If you meant to supply one, pass it with --password-stdin.データベースに対してこれを実行できる人は、どのアカウントでも乗っ取れます。 データベースファイルを持っている人なら、もともと同じことができます。
メールで
メールの設定が必要です。リンクの行き先として、フロントエンドに /reset-password のルートも必要です。