tessera

アカウント

登録のルール、パスワードを忘れたとき

登録のルール

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削除済み。行の中身も消される。あなたのデータの置き場所を参照

無効にすると、その人はサインインできなくなります。共有は配信され続けます。リンクを持っている人は何も悪いことをしていないからです。中身も止めたいなら、管理者が共有そのものを無効にします。

停止 復帰 削除 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 のルートも必要です。

このページの内容