Documentation
¶
Overview ¶
Package secrets 管理只属于 Manager 的凭据(目前只有可选的 GitHub PAT)。
它们不能放在 runners/<name>/ 下:容器模式会把那个目录整个挂进 Runner 容器的 /runner,Job 以同一个 UID(1001)运行,文件权限挡不住——`chmod 600` 的属主 正是 Job 自己。于是任何能往这个仓库推 workflow 的人,一个 `cat /runner/.github_check_token` 就能拿到这个 PAT,而组织目标的 PAT 带 admin:org,等于组织管理员权限。
新位置取配置文件所在目录下的 tokens/。选它的理由是它只会挂进 Manager, 从来不会挂进 Runner 容器,而且本来就在文档的备份清单里。
没有选 base_path/.something/:Runner 名允许以 . 开头,一个恰好叫这个名字的 Runner 会让它的安装目录就是密钥目录,而那个目录是会被挂进容器的。
Index ¶
Constants ¶
const LegacyRunnerTokenFile = ".github_check_token"
LegacyRunnerTokenFile 是 PAT 的旧位置:各 Runner 安装目录下的这个文件。
只保留给迁移用。本包之外不应再出现它——读 PAT 一律走 Store, 由 TestNoManagerSecretsUnderRunnerDirs 守着。
const PathDescription = "config/tokens/<runner name>"
PathDescription 新位置的通用写法,用在拿不到具体路径的消息里。 实际位置随 -config 而变,按 compose 的默认挂载就是这个。
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Store ¶
type Store struct{ Dir string }
Store 按 Runner 名寻址 Manager 侧的凭据。 Dir 为 <配置文件所在目录>/tokens,按 compose 的默认挂载即 /app/config/tokens。
func (*Store) GitHubToken ¶
GitHubToken 读取该 Runner 的 PAT。空串表示没有—— 与旧的 TokenForRunner 一致:没有凭据不是错误,本工具不要求这个凭据。
func (*Store) Migrate ¶
Migrate 把旧位置(Runner 目录下)的 PAT 搬到新位置,并删除旧文件。
migrated 为 true 表示这次确实把一个 PAT 写进了新位置。删除旧文件而不只是复制, 是这件事的全部意义所在:旧文件还在挂载目录里,漏洞就没有关闭。
每个检查周期都会调用,所以它必须在「没什么可做」时足够便宜,并且幂等。 也正因为每个周期都跑,用户照旧文档把 PAT 放进 Runner 目录的,最迟一个周期后 也会被移走。
写入新位置失败时不删除旧文件,并把错误返回给调用方:先删后写会丢掉用户的 PAT。