secrets

package
v1.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2026 License: MIT Imports: 6 Imported by: 0

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

View Source
const LegacyRunnerTokenFile = ".github_check_token"

LegacyRunnerTokenFile 是 PAT 的旧位置:各 Runner 安装目录下的这个文件。

只保留给迁移用。本包之外不应再出现它——读 PAT 一律走 Store, 由 TestNoManagerSecretsUnderRunnerDirs 守着。

View Source
const PathDescription = "config/tokens/<runner name>"

PathDescription 新位置的通用写法,用在拿不到具体路径的消息里。 实际位置随 -config 而变,按 compose 的默认挂载就是这个。

Variables

This section is empty.

Functions

func MigrateAll

func MigrateAll(cfg *config.Config, store *Store) int

MigrateAll 对配置里的每个 Runner 迁移一次,返回搬动的数量。 启动时调用,让已部署的旧路径 PAT 不必等到第一个检查周期。

Types

type Store

type Store struct{ Dir string }

Store 按 Runner 名寻址 Manager 侧的凭据。 Dir 为 <配置文件所在目录>/tokens,按 compose 的默认挂载即 /app/config/tokens。

func NewStore

func NewStore(configPath string) *Store

NewStore 由 -config 的路径推出凭据目录。 传 config/config.yaml 得到 config/tokens。

func (*Store) GitHubToken

func (s *Store) GitHubToken(runnerName string) string

GitHubToken 读取该 Runner 的 PAT。空串表示没有—— 与旧的 TokenForRunner 一致:没有凭据不是错误,本工具不要求这个凭据。

func (*Store) Migrate

func (s *Store) Migrate(runnerName, installDir string) (migrated bool, err error)

Migrate 把旧位置(Runner 目录下)的 PAT 搬到新位置,并删除旧文件。

migrated 为 true 表示这次确实把一个 PAT 写进了新位置。删除旧文件而不只是复制, 是这件事的全部意义所在:旧文件还在挂载目录里,漏洞就没有关闭。

每个检查周期都会调用,所以它必须在「没什么可做」时足够便宜,并且幂等。 也正因为每个周期都跑,用户照旧文档把 PAT 放进 Runner 目录的,最迟一个周期后 也会被移走。

写入新位置失败时不删除旧文件,并把错误返回给调用方:先删后写会丢掉用户的 PAT。

func (*Store) Path

func (s *Store) Path(runnerName string) (string, error)

Path 返回某个 Runner 的凭据文件路径,名字不合法时返回错误。

这里重新校验一次,而不是信赖调用方:名字要拼进路径,而 config.IsSafeRunnerNameOrPath 挡的正是 / \ 与 ..。配置加载时已经校验过, 但一个拼路径的地方自己不校验,就得指望每一条调用链上都没人漏掉。

func (*Store) Remove

func (s *Store) Remove(runnerName string) error

Remove 删除该 Runner 的凭据,删除 Runner 时调用。不存在不算错误。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL