# 管理后台 (/zh/docs/guides/admin)

管理后台各页面的用途、管理员与普通用户的权限差别、配额与上传频控、上传 Token 的完整生命周期，以及登录、会话与界面偏好。

## 登录 [#登录]

管理后台就在站点根路径，例如 `https://img.example.com/`。

首次启动时内置管理员的登录名是 `admin`，密码是出厂默认值 `imgyoung123`。用它登录后，后台会直接进入「设置管理员密码」页。
这项限制在服务端执行：仍用出厂密码的会话只能改密、退出和查看当前账号，其余后台接口（包括后台上传、签发 Token、管理渠道）一律返回 403 `须先修改出厂默认密码`，不论请求来自后台页面还是脚本。
默认密码是公开的，实例暴露到公网之前务必先完成这一步。忘记密码见 [重置密码](../operations/password-reset.mdx)。

没有用来设置初始管理员密码的环境变量，也没有由环境变量提供的引导 Token：这类一次性种子设过一次就不再起作用，却会一直留在部署文件里，让人分不清值从哪来。没有界面的部署，首次登录改密后在后台签发 Token 即可。

## 页面导览 [#页面导览]

左侧栏分三组，普通用户只看得到其中一部分：

| 分组 | 页面 | 谁能看到 |
|---|---|---|
| 内容 | 总览、图片、上传 Token | 全部用户 |
| 站点 | 存储渠道、用户、疑似重复、待清理、审计日志 | 管理员 |
| 其他 | 使用指南 | 全部用户 |
| 其他 | 设置 | 管理员 |

顶栏有页面搜索（⌘K / Ctrl+K 打开命令面板）、语言切换与主题切换。侧栏底部的账号菜单里有「修改密码」与「退出登录」。

### 总览 [#总览]

管理员看到全站概况：

- 指标卡：图片、存储用量（原图字节合计，副本不重复计）、用户、访问次数（附估算流量）、待清理、疑似重复。
- 「存储渠道」：每个渠道的健康状态与已存字节。
- 「告警」：当前未恢复的告警，条件不再成立时自动恢复；「历史记录」跳到设置里的告警历史。告警类型有渠道不健康、副本补齐失败、渠道用量超阈值、渠道排空失败、备份失败。
- 「热门图片」：按访问次数排序的前 10 张。
- 本机磁盘以外没有健康的渠道时，顶部显示「数据只存在这台主机上」：图片副本和元数据库快照都只在这台主机上，主机损坏即全部丢失。判定条件是找不到一个健康、不在清理中、且驱动不是 local 的渠道，一个健康渠道都没有时同样显示。添加一个对象存储或网盘渠道即可解除；已经有了，就到「存储渠道」页查看它为什么不健康。

普通用户看到自己的图片数、已用空间与配额。站里还没有图片时，总览显示三步快速开始。

访问次数与估算流量的口径见 [访问图片](./access.mdx)。

### 图片 [#图片]

图片网格，管理员看全站（「全站图片」），普通用户只看自己的（「我的图片」）。

- 搜索：按短 ID 或文件名。
- 「筛选」：「上传来源 Token」、「上传时间」、「仅看已豁免」；管理员另有「归属用户」。
- 「选择」后可多选「批量删除」，一次最多 100 张。
- 「上传图片」：后台直接上传，见 [上传](./upload.mdx#在管理后台上传)。

点开一张图是详情抽屉：

- 「分享链接」：完整链接，「复制为」URL、Markdown、HTML、BBCode；下方列出可用的缩放宽度，点一下复制带 `?w=` 的链接。设置了对外站点地址时链接用它的域名。
- 元数据：格式、尺寸、大小、归属、来源 Token、引用数、上传时间、最近访问、访问次数、到期（含「修改有效期」）、清理豁免、SHA-256。
- 「副本分布」：这张图在每个渠道上的副本状态（待补齐 / 上传中 / 就绪 / 失败）、尝试次数与最近错误。
- 「删除」；管理员另有「审计记录」，跳到以这张图为目标的审计日志。

有效期与清理豁免的含义见 [生命周期与查重](./lifecycle.mdx)。

### 上传 Token [#上传-token]

签发与管理数据接口的凭证，见下文 [上传 Token](#upload-tokens)。

### 存储渠道 [#存储渠道]

新建、编辑、探测与删除渠道，设置优先级、加密与 302 直链，查看各渠道的副本水位。表单字段与各类渠道的配置细节见 [存储渠道](../channels/index.mdx)，这里只列使用后台时要知道的几点：

- 网盘模板在授权控件上方有「应用 Client ID」「应用 Client Secret」两个字段，随渠道配置加密保存。一键授权必须先填 Client ID；粘贴令牌时，如果授权用的是自建应用也要填，因为令牌续期要用签发它的同一个应用。
- 编辑渠道时，凭证类参数显示为掩码：除密码、密钥、令牌外，访问密钥 ID、WebDAV 用户名、Client ID 等也是。不改就保留原值。
- 渠道装载失败（配置解不开、驱动构造失败等）时，列表里显示为「异常」，原因以 `装载失败:` 开头。健康检查每轮自动重试装载，「重新探测」也会先重试装载；装上且探测通过后才恢复健康、重新参与读写。
- 设置里「新渠道默认加密」开启时，新建渠道的「服务端加密」保持「继承全局默认」就会加密，此时「允许 302 直链」不可用；要用直链，把服务端加密设为「强制关闭」。
- 「测试连接」时如果服务商刷新了授权令牌，测试结论下方提示「服务商在测试时刷新了授权令牌，表单已换用新令牌，保存时提交的就是它；原令牌可能已失效。」，授权字段显示「已授权」，接着保存即可。编辑时沿用的已存令牌被刷新，会直接写回该渠道。
- 渠道行菜单的「导出 rclone 配置」（清理中的渠道没有这一项）下载该渠道的 rclone 配置文件 `imgyoung-channel-<渠道 ID>.rclone.conf`，标准 rclone 凭它即可脱离 ImgYoung 读写这个渠道上的数据；加密渠道另有一个加密层远端，经它读出的就是明文。
  文件里含渠道凭证与授权令牌（加密渠道还有解密密码），要和主密钥一样离线妥善保存；每次下载都记入审计日志。文件内容与用法见 [渠道存储加密](../channels/encryption.mdx) 与 [存储渠道](../channels/index.mdx)。

删除渠道时，弹窗里的「同时删除本服务写在该渠道上的数据」默认勾选，确认按钮是「删除并清理」：图片副本与元数据库快照在后台逐个删除（深探测留下的残留文件一并删除），期间渠道显示为「清理中」，删完自动移除；不是本服务写的文件不动。
取消勾选，按钮变为「仅移除」：渠道立即移除，远端的图片副本与元数据库快照原样保留，需要时自行到存储商处理。

「删除并清理」删对象失败时：

- 第一次失败就把原因写进渠道的探测结果，在渠道列表里可见，同时开启「渠道排空失败」告警。单次清理任务超时、服务停机打断的不算失败。
- 之后按退避间隔一直自动重试，不会停止；渠道临时不可用，恢复后会自己清完。
- 凭证已失效或存储桶已不存在、再重试也删不掉时，对该渠道点「直接移除」：立即移除渠道，尚未删除的远端对象原样保留。确定删不掉的渠道，删除时也可以一开始就选「仅移除」。

### 用户 [#用户]

列出全部账号及其图片数、用量 / 配额、默认有效期。可以「建号」、「编辑」、「重置密码」、「删除」，见下文 [角色与权限](#角色与权限) 与 [配额与上传频控](#配额与上传频控)。

### 疑似重复与待清理 [#疑似重复与待清理]

两个裁决队列：「疑似重复」并排比较感知哈希相近的图片对，决定合并或忽略；「待清理」列出长期无人访问的冷图，决定保留或删除。见 [生命周期与查重](./lifecycle.mdx)。

### 审计日志 [#审计日志]

管理操作的只追加记录，可按「动作」、「操作者」（用户 ID）、「目标」（图片短 ID、渠道 ID、Token ID 等，精确匹配）与「时间范围」筛选。记录的动作：

| 对象 | 动作 |
|---|---|
| 渠道 | 新建渠道、编辑渠道、删除渠道、导出渠道 rclone 配置 |
| Token | 签发 Token、吊销 Token、轮换 Token、删除 Token |
| 用户 | 新建用户、更新用户（含改密与重置密码）、删除用户 |
| 图片 | 修改图片（有效期、清理豁免）、删除图片（含 S3 DeleteObject）|
| 裁决 | 合并重复图、忽略重复图 |
| 设置 | 修改配置、添加防盗链白名单、移除防盗链白名单 |
| 数据 | 导出数据、立即备份、恢复备份 |

上传本身与到期自动删除不记审计。保留期由「审计日志保留天数」`audit_retention_days` 决定，出厂 0 表示永久保留。

### 使用指南 [#使用指南]

后台内置的速查页，curl、PicGo、S3 客户端的配置示例里直接填好了当前站点的地址，所有用户可见。

### 设置 [#设置]

仅管理员可见，分四个标签：

- 「运行配置」：全部运营配置，按访问与链接、上传限制、生命周期、按需处理、查重、可靠性与渠道、CDN 缓存清理、告警与审计分组；改完点「保存修改」即时生效，不需要重启。
  页面下方的「引导配置」卡片只读展示环境变量（监听地址、数据目录、信任的反代网段、`/metrics` 放行网段）、服务端版本与内置的登录限速参数。见 [配置](../configuration.mdx)。
  网段类变量未设置时显示出厂默认网段；显式设为空串时，「信任的反代网段」显示「空：不采信任何转发头」，「/metrics 放行网段」显示「空：不对任何地址开放」。
- 「防盗链」：Referer 白名单与「空 Referer 放行」开关，见 [访问图片](./access.mdx#hotlink-protection)。
- 「备份与导出」：元数据库快照按「备份间隔」自动写到每个健康渠道，各渠道各自保留最近几份。快照表列出快照、大小、时刻与「所在渠道」（持有它的渠道，按优先级排列），可「立即备份」、「下载」、「恢复」；另有「导出 JSON」导出全量元数据。
  「立即备份」时有渠道没写成会报错，错误形如 `备份失败:快照 imgyoung-….db 有 k/n 个渠道未写成: …`，写成的渠道仍保留这份快照；没有健康渠道时报 `没有健康渠道可存放快照`。「下载」与「恢复」按优先级从持有该快照的健康渠道读取，读不到就换下一个。见 [备份与恢复](../operations/backup.mdx)。
- 「告警历史」：全部告警的开启与恢复记录。告警 Webhook 见 [监控](../operations/monitoring.mdx)。

## 角色与权限 [#角色与权限]

账号只能由管理员在「用户」页创建，不开放注册。角色有两种：

| 能力 | 管理员 | 普通用户 |
|---|---|---|
| 上传（Token、后台、S3）| 可以 | 可以 |
| 查看、删除图片 | 全站 | 只限自己的 |
| 修改图片有效期 | 全站 | 只限自己的 |
| 设置清理豁免 | 可以 | 不可以 |
| 签发、轮转自己的 Token，查看自己 Token 的 S3 配置 | 可以 | 可以 |
| 查看、吊销、删除别人的 Token | 可以 | 不可以 |
| 存储渠道、用户、疑似重复、待清理、审计日志、设置 | 可以 | 不可以 |

普通用户之间互相看不到对方的图片与 Token；访问别人的图片详情得到 404 `图片不存在`。图片链接本身是公开的，知道链接的人都能访问。

可以有多个管理员。内置管理员（用户 ID 为 `default`）受保护：不能被禁用、降级或删除，可以改名。任何管理员都不能删除自己。

在「用户」页：

- 「建号」：登录名、初始密码（至少 8 位，建好即可登录）、角色、配额、默认有效期。
- 「编辑」：改登录名、角色、配额、默认有效期，或勾选「禁用」。禁用立即结束该用户的全部会话，其 Token 也无法再上传。
- 「重置密码」：设新密码，该用户的全部会话立即失效。
- 「删除」：名下还有图片时拒绝，需先删掉图片；删除时其 Token 与会话一并删除，审计记录保留。

## 配额与上传频控 [#配额与上传频控]

- **配额**：在建号或编辑时为每个用户设置，单位 MB 或 GB，留空或填 0 表示不限。按引用计全额：每张图都按其物理文件的完整大小计入，后台查重合并不减少已用量。口径只有这一种，也无法靠上传与别人相同的图来少计用量。上传后会超出配额时返回 403。
  用户可在总览看到已用空间与配额，管理员在「用户」页的「用量 / 配额」列查看。
- **上传频率上限**：「设置 → 运行配置」的 `upload_rate_per_min`，对每个用户统一生效，出厂 0 表示不启用；同一用户经 Token、后台、S3 的上传共享额度。
- **上传并发上限**：`max_concurrent_uploads`，全站共享，出厂 8。

超限时的行为与状态码见 [上传](./upload.mdx#格式与上限)。

## 上传 Token [#upload-tokens]

上传 Token 是数据接口（`/api/upload`、`/api/upload/url`）与 S3 协议的凭证，只能用于上传，不能登录后台、也不能调用后台接口。

凭证只有两种：后台用密码加会话，数据接口与 S3 用上传 Token（S3 的签名用的也是同一批 Token）。Token 不能调用后台接口，是为了把它泄露时的影响限制在「以这个用户的身份上传」，后台接口另有 CSRF 防护。Token 的权限也只有上传一种：每个客户端签发一枚、可以单独吊销，已经足以止损。

### 签发 [#签发]

在「上传 Token」页点「签发 Token」：

- 「用途名称」：如 `picgo`、`blog-script`，最长 64 字节。同一用户的有效 Token 不能重名；同名的旧 Token 已过期时，签发新 Token 会自动吊销那条过期记录。
- 「有效期」：永久、7 天、30 天、90 天或 365 天。到期后与吊销同样失效。

签发成功后弹窗显示 Token 明文（形如 `imgy_` 加 43 个字符），**只显示这一次**，关掉就再也看不到。数据库只存它的 SHA-256 与前 12 个字符的识别前缀；Token 是高熵随机串，普通哈希即可，不需要密码那样的慢哈希。
用法是请求头 `Authorization: Bearer <token>`。

### 列表与状态 [#列表与状态]

列表显示名称、识别前缀、状态（有效 / 已过期 / 已吊销）、到期、最近使用与签发时间。「最近使用」大约每分钟批量更新一次。
每张图记着经由哪个 Token 上传，「图片」页可以按「上传来源 Token」筛选。

### 行操作 [#行操作]

点行末的「更多操作」：

| 操作 | 适用 | 作用 |
|---|---|---|
| 「S3 客户端配置」 | 自己的有效 Token | 查看这枚 Token 对应的 S3 access key、secret 与端点，可以反复查看，见 [上传客户端](./clients.mdx) |
| 「轮转」 | 自己的有效 Token | 原子地签发一枚同名新 Token 并吊销旧的。新明文同样只显示一次；旧 Token 与它的 S3 凭证立即失效。原来是永久的仍为永久，原来有有效期的从现在起按同样时长重新计算 |
| 「吊销」 | 有效 Token | 立即失效，使用它的客户端无法再上传，S3 凭证同步失效。记录保留 |
| 「删除记录」 | 已吊销或已过期的 Token | 从列表移除，审计记录保留。有效的 Token 不能删除，需先吊销 |

### 管理员查看别人的 Token [#管理员查看别人的-token]

管理员可以用「按用户查看」切换到任意用户的 Token 列表，对其中的 Token「吊销」或「删除记录」。
「轮转」与「S3 客户端配置」只对本人开放：它们会交出可用的凭证，对别人的 Token 执行等于接管对方的上传权限。

## 会话与安全 [#会话与安全]

| 机制 | 做法 |
|---|---|
| 密码存储 | argon2id（64 MiB 内存、3 轮、单线程），每个密码独立随机盐。密码至少 8 位 |
| 登录限速 | 按客户端 IP 与登录名分别计：各允许连续 5 次尝试，之后每 12 秒恢复 1 次，超出返回 429。登录成功清零。经信任的反向代理时，客户端 IP 取自 `X-Forwarded-For` |
| 防用户名枚举 | 用户名不存在与密码错误返回同样的错误，校验耗时相近 |
| 会话 | 登录后下发 256 位随机会话 ID，放在 `HttpOnly`、`SameSite=Lax` 的 cookie `imgyoung_session` 里，客户端到站点是 HTTPS 时加 `Secure`。服务端只存哈希，数据库泄露也不能据此冒用会话。有效期固定 30 天，不随使用延长 |
| CSRF | 会话绑定一个 CSRF 令牌，所有改动状态的请求必须在 `X-CSRF-Token` 头里带上它，后台页面自动处理 |
| 出厂密码 | 内置管理员仍用出厂默认密码时，服务端只放行改密、退出与查看当前账号，其余后台接口返回 403 |
| 改密 | 「修改密码」需要旧密码；改完该用户全部设备下线，需要重新登录 |
| 禁用与重置 | 禁用或重置密码立即结束该用户的全部会话；被禁用的用户无法登录，其 Token 全部失效 |
| 页面防护 | 全站响应带 `X-Frame-Options: DENY` 与 `X-Content-Type-Options: nosniff`；后台页面另带内容安全策略（CSP）：脚本与接口请求只允许来自本站，不允许被其他页面嵌入 |

HTTPS 判定与客户端 IP 都依赖反向代理的转发头，只有来自 `IMGYOUNG_TRUSTED_PROXIES` 网段的转发头才被采信。见 [反向代理](../operations/reverse-proxy.mdx)。

## 界面语言与主题 [#界面语言与主题]

- 语言：顶栏的语言按钮在简体中文与 English 之间切换。首次访问时按浏览器语言选择（中文环境用简体中文，其余用英文），之后记住你的选择一年。
- 主题：顶栏的主题按钮可选浅色、深色、跟随系统，默认深色，选择同样会记住。

两项偏好都只保存在当前浏览器里，不随账号同步。
