管理
邀请码、角色、停权,以及实例统计怎么读
后台在同一个网址的 /admin/,跟主程序编在同一个可执行文件里。管一台机器是四件事:决定谁进得来、决定他们能做什么、看着存了些什么,以及出事的时候介入。每一件都是一个权限。
features.admin 关掉的话,这里每一条都回 404
不是 403。关掉的功能是这台机器没有的东西,所以回的跟一个不存在的路径一样。

权限与角色
权限是一个 resource:verb 字符串。会伸到持有者自己东西以外的,会被标成 privileged。
| 权限 | 管到 |
|---|---|
shares:create、shares:read、shares:delete | 自己的分享 |
tokens:manage | 自己的 API 令牌 |
shares:read:any、shares:delete:any | 这台机器上的每一份分享 |
users:read、users:write、users:delete | 账号 |
invites:read、invites:create、invites:delete | 邀请码 |
roles:read、roles:write | 角色和谁持有 |
stats:read | 实例统计 |
内置四个角色:owner 全部都有,admin 除了 users:delete、shares:delete:any、roles:write 以外都有,member 有那四个管自己东西的,guest 一个都没有。
guest 是给「要人先注册,再由人工放行」的机器用的。把 auth.default_role 指到它,新账号在被指派角色之前什么都做不了。
自己开一个
一个角色是一个名字、一段说明、一份权限列表,加上两个上限:属于它的人总共能存多少、单一文件最大多大。你可以自己建、改它能做什么,也可以删掉。
内置角色不能改也不能删
改它们的权限会回 409,消息让你去看 auth.default_role。自己开一个角色,让新账号进那个。
一个账号刚好在一个角色里。指派一个新的就是换掉原本那个。
内置四个是层层包含的:guest 什么都不能做,member 能做的是 admin 扣掉管理的部分,owner 能做 admin 的全部再加上更多。所以一个就够了。
邀请码
只有 auth.registration 是 invite 的时候才会看。open 不理它,closed 则是谁都注册不了。
一组码有可用次数、选填的期限,和一段备注,让一整串码看得出谁是谁。没设期限的话,它会活到用完或被撤销为止。在只收邀请的机器上不带码注册,会被拒绝并告诉对方需要邀请码。
码只回来一次
码本身不会被存下来,只留一段拿来核对的指纹。没抄下来的只能撤销掉再开一个。
列表会显示每一组码用掉几次、还能不能用。撤销一组不会影响已经用它建好的账号。
命令行也能开:tessera-server invite。-n 是能用几次,默认 1;-d 是几天后过期,不填就不过期;--note 是备注。码只会打印一次。
tessera-server invite -n 5 -d 7 --note "book club"账号
账号可以停权,也可以放回来。
- 停权是让那个人登不进来。他的分享会继续送,因为拿着那些链接的人没有做错什么。
- 要连内容一起停,就去停那些分享本身。
弄丢验证器的人,可以在这里帮他关掉两步验证。用户列表会显示谁开了。
删掉账号会洗干净它的记录,但不会动他上传的东西。结束某个人的分享是另一个动作,而且会报告结束了几份。两种情况各留下什么,见你的数据在哪里。
最后一个管理员拿不掉
删掉、降权,或是把改角色的权限从唯一持有它的账号上拿走,都会被挡。对自己做也一样。
分享
这台机器上的每一份分享都列得出来,新的在前,附上是谁上传的、发出去多少,以及被停用的话原因是什么:管理员停的,或是扫毒找到了什么。任何一份都删得掉。
shares:delete:any 是唯一碰得到「上传者已经不在」那些分享的方法,因为一般的删除看的是所有权,而被删掉的账号什么都不拥有。
配置
每一个配置都列得出现在生效的值,以及那个值是哪一层给的。只能走环境变量的那些会明说,不会在你试着改的时候默默失败。
会丢掉东西的改动要确认过才做得下去,而且可以先问它会毁掉什么再决定。
哪些配置只能走环境变量,见配置。
访问记录
share.access_log.enabled 默认关。打开之后每一次把内容交出去都会被记下来,持有 shares:read:any 的人可以按分享去读。
上传者读不到。
一行里有什么、留多久,见你的数据在哪里。
存储 backend
放文件的地方在这里管:加一个、删一个、选哪一个收新的上传。每一个有名字、地址、选填的容量上限、一个只读开关,以及能不能让浏览器直接连过去。
每一个也会显示上一次调用有没有响应,没有的话原因是什么。上传和下载会一直更新这个状态,闲着的每 15 分钟检查一次,失败中的每 5 分钟一次。不响应的 backend 其他地方看起来都正常,只有存在上面的分享会失败。
地址存之前会先封起来而且读不回来,因为它带着凭证,而 backend 列表正是那种会被贴进求助讨论串的东西。
文件怎么挑一个,见文件放在哪里。
站名和外观
首页和链接预览上显示的标题、描述,以及这台机器的默认语言,都在这里设。
链接预览用这个语言写,因为聊天软件抓链接时,不会说是谁要看。浏览器要的语言不是英文、日文、繁体中文或简体中文的访客,网站也会用这个语言打开。没改之前是英文。
之后再改,只会影响新的访客。第一次来的时候,语言就存进 cookie 了,之后一律以 cookie 为准。
默认的外观也是:浅色、深色或跟随系统,一个主题,一个强调色。每个人可以在自己的设置里选自己的;默认的就是其他人看到的。
测速
默认关。speed.enabled 会加一个页面,用不落地的一次性数据来回传送,量访客跟这台机器之间的线路。
| 配置 | 默认 | |
|---|---|---|
speed.enabled | 关 | |
speed.anonymous | 关 | 只有登录的人能测 |
speed.max_bytes | 25 MiB | 一次最多发或收多少 |
每个来源一小时可以测五次,上传和下载算在一起。关掉的时候,或是不开放给匿名访客的时候,对他们来说这个功能就像不存在。
实例统计
这台机器会报告:
| 字段 | 是什么 |
|---|---|
accounts、administrators | 有几个账号,其中几个在管理 |
shares 对 live_shares | 总共握有几份,对上访客现在还打得开几份 |
stored_bytes | 还在存储上的上传内容 |
quota_bytes | storage.max_total_bytes 的上限,没设就是 null |
live_invites | 还能让人进来的码 |
bytes_served | 这台服务器发出去多少 |
bytes_redirected | 有多少是让浏览器直接去 bucket 拿的 |
stored_bytes、shares、live_shares、bytes_served 每天会存一份快照,留一年,让后台画得出存储空间的变化。服务器整天没开的日子没有快照,不会补成 0;历史从有这个功能的那一版开始。
shares 和 live_shares 差很多,代表扫描没跟上,或是保存期比你以为的长。
quota_bytes 是 null 代表没有人设过
在一台收匿名上传的机器上,这个组合就是启动时那句警告在讲的事。见配置。