Basic Github Information
基本结构
一个大型公司的基本 github 环境结构是拥有一个企业,该企业拥有几个组织,每个组织可能包含几个仓库和几个团队。较小的公司可能只拥有一个组织而没有企业。
从用户的角度看,一个用户可以是不同企业和组织的成员。在这些组织中,用户可能有不同的企业、组织和仓库角色。
此外,用户可能是不同团队的一部分,拥有不同的企业、组织或仓库角色。
最后,仓库可能有特殊的保护机制。
权限
企业角色
企业拥有者:拥有此角色的人可以管理管理员,管理企业内的组织,管理企业设置,跨组织执行政策。然而,他们无法访问组织设置或内容,除非他们被任命为组织拥有者或直接访问组织拥有的仓库
企业成员:您企业拥有的组织的成员也自动成为企业的成员。
组织角色
在一个组织中,用户可以有不同的角色:
组织拥有者:组织拥有者对您的组织拥有完全的管理访问权限。这个角色应该是有限的,但在您的组织中不应少于两个人。
组织成员:组织中人员的默认,非管理角色是组织成员。默认情况下,组织成员拥有许多权限。
账单管理员:账单管理员是可以管理您组织的账单设置的用户,例如支付信息。
安全经理:它是组织拥有者可以分配给组织中任何团队的角色。应用后,它赋予团队中每个成员权限来管理您组织的安全警报和设置,以及对组织中所有仓库的读取权限。
如果您的组织有一个安全团队,您可以使用安全经理角色给予团队成员他们需要的最少访问权限。
Github 应用管理员:为了允许额外的用户管理组织拥有的 Github 应用,拥有者可以授予他们 Github 应用管理员权限。
外部合作者:外部合作者是一个拥有对一个或多个组织仓库的访问权限但不是组织明确成员的人。
成员权限
在 https://github.com/organizations/<org_name>/settings/member_privileges 您可以看到仅仅因为是组织的一部分而拥有的权限。
这里配置的设置将指示组织成员的以下权限:
成为所有组织仓库的管理员、编写者、读者或没有权限。
成员是否可以创建私有、内部或公共仓库。
是否可以复制仓库。
是否可以邀请外部合作者。
是否可以发布公共或私有站点。
管理员对仓库的权限。
成员是否可以创建新团队。
仓库角色
默认情况下创建仓库角色:
读取:推荐给想要查看或讨论您的项目的非代码贡献者
整理:推荐给需要积极管理问题和拉取请求但没有写入权限的贡献者
写入:推荐给积极推送到您项目的贡献者
维护:推荐给需要管理仓库但没有访问敏感或破坏性操作权限的项目经理
管理员:推荐给需要完全访问项目的人,包括敏感和破坏性操作,如管理安全或删除仓库
您也可以在 https://github.com/organizations/<org_name>/settings/roles 创建您自己的角色
团队
您可以在 https://github.com/orgs/<org_name>/teams 列出组织中创建的团队。请注意,要查看其他团队的子团队,您需要访问每个父团队。
用户
可以在 https://github.com/orgs/<org_name>/people 列出组织的用户。
在每个用户的信息中,您可以看到用户是哪些团队的成员,以及用户可以访问哪些仓库。
Github 认证
Github 提供了不同的方式来认证您的账户并代表您执行操作。
网页访问
访问 github.com,您可以使用您的用户名和密码(可能还有两因素认证)登录。
SSH 密钥
您可以为您的账户配置一个或多个公钥,允许关联的私钥代表您执行操作。 https://github.com/settings/keys
GPG 密钥
您不能用这些密钥冒充用户,但如果您不使用它,可能会因为发送未签名的提交而被发现。了解更多关于警戒模式的信息。
个人访问令牌
您可以生成个人访问令牌来授权应用程序访问您的账户。创建个人访问令牌时,用户需要指定令牌将拥有的权限。https://github.com/settings/tokens
Oauth 应用程序
Oauth 应用程序可能会请求权限访问您的 GitHub 信息或冒充您执行某些操作。一个常见的例子是您可能在一些平台上找到的使用 GitHub 登录按钮。
您可以在 https://github.com/settings/developers 创建您自己的Oauth 应用程序
您可以在 https://github.com/settings/applications 查看所有有权访问您账户的 Oauth 应用程序
您可以在 https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps 查看Oauth 应用程序可以请求的范围
您可以在 https://github.com/organizations/<org_name>/settings/oauth_application_policy 查看组织中应用程序的第三方访问权限
一些安全建议:
OAuth 应用程序应始终作为经过身份验证的 GitHub 用户在 GitHub 的所有地方行动(例如,提供用户通知),并且只能访问指定的范围。
OAuth 应用程序可以通过启用“使用 GitHub 登录”作为身份提供者。
不要构建OAuth 应用程序,如果您希望您的应用程序仅在单个仓库上行动。使用
repo
OAuth 范围,OAuth 应用程序可以对所有经过身份验证用户的仓库行动。不要构建 OAuth 应用程序作为您的团队或公司的应用程序。OAuth 应用程序作为单个用户进行身份验证,因此如果一个人为公司创建了一个 OAuth 应用程序,然后他们离开了公司,其他人将无法访问它。
更多信息在这里。
Github 应用程序
Github 应用程序可以请求权限访问您的 Github 信息或冒充您,以对特定资源执行特定操作。在 Github 应用程序中,您需要指定应用程序将有权访问的仓库。
要安装 GitHub 应用程序,您必须是组织所有者或在仓库中拥有管理员权限。
GitHub 应用程序应该连接到个人账户或组织。
您可以在 https://github.com/settings/apps 创建您自己的 Github 应用程序
您可以在 https://github.com/settings/apps/authorizations 查看所有有权访问您账户的 Github 应用程序
这些是Github 应用程序的 API 端点 https://docs.github.com/en/rest/overview/endpoints-available-for-github-app。根据应用程序的权限,它将能够访问其中的一些
您可以在 https://github.com/organizations/<org_name>/settings/installations 查看组织中安装的应用程序
一些安全建议:
GitHub 应用程序应该独立于用户采取行动(除非应用程序使用用户到服务器令牌)。为了使用户到服务器访问令牌更安全,您可以使用将在 8 小时后过期的访问令牌,以及可以交换新访问令牌的刷新令牌。更多信息,请参阅“刷新用户到服务器访问令牌。”
确保 GitHub 应用程序与特定仓库集成。
GitHub 应用程序应该连接到个人账户或组织。
不要期望 GitHub 应用程序知道并做用户可以做的一切。
如果您只需要“使用 GitHub 登录”服务,不要使用 GitHub 应用程序。但是,GitHub 应用程序可以使用用户识别流程来登录用户_并_做其他事情。
如果您_只是_想作为 GitHub 用户行动并做用户可以做的一切,不要构建 GitHub 应用程序。
如果您要将应用程序与 GitHub Actions 一起使用,并希望修改工作流文件,则必须代表用户使用包含
workflow
范围的 OAuth 令牌进行身份验证。用户必须对包含工作流文件的仓库拥有管理员或写权限。更多信息,请参阅“了解 OAuth 应用程序的范围。”更多信息在这里。
Github Actions
这不是一种在 github 上进行身份验证的方式,但是恶意的 Github Action 可能会获得未经授权的访问 github,并且根据赋予 Action 的权限,可能会进行多种不同的攻击。更多信息请见下文。
Git Actions
Git actions 允许在发生事件时自动化执行代码。通常执行的代码与仓库的代码有关(可能是构建一个 docker 容器或检查 PR 是否包含秘密)。
配置
在 https://github.com/organizations/<org_name>/settings/actions 可以检查组织的GitHub Actions 配置。
可以完全禁止使用 GitHub Actions,允许所有 GitHub Actions,或者只允许某些 Actions。
还可以配置谁需要批准才能运行 GitHub Action以及运行时 GitHub Action 的 GITHUB_TOKEN 的权限。
Git Secrets
GitHub Action 通常需要一些秘密来与 GitHub 或第三方应用程序交互。为了避免在仓库中明文放置,GitHub 允许将它们设置为Secrets。
这些秘密可以为仓库或整个组织配置。然后,为了让 Action 能够访问秘密,你需要声明它,像这样:
使用 Bash 示例
密钥只能从声明了它们的 Github Actions 中访问。
一旦在仓库或组织中配置,github 的用户将无法再次访问它们,他们只能更改它们。
因此,窃取 github 密钥的唯一方法是能够访问执行 Github Action 的机器(在该场景中,您将只能访问为 Action 声明的密钥)。
Git 环境
Github 允许创建环境,您可以在其中保存密钥。然后,您可以使用类似以下方式授予 github action 访问环境中的密钥:
Last updated