📦 第06章 · 用户/组/权限
users/groups/projects 权限
用户/组/权限¶
这一章讲 GitLab 的权限体系:用户(User)、组(Group)、项目(Project)三层,以及"谁能做什么"的各种角色(Role/Member 权限)。理解这套,才能安全地多人协作,既放开访问又守住仓库。
三层结构¶
用户(User) ── 加入 ──> 组(Group) ── 包含 ──> 项目(Project)
│ │
组级权限(对人) 项目级权限(对人/组)
- 用户:一个人一个账号,可发 SSH key / 2FA。
- 组:把多个用户聚起来,统一给组赋权,成员自动继承。
- 项目:实际存放代码的地方,可设公开/私有,单独控制权限。
原则:能组级授权就别逐项授权,方便管理和回收。
角色(Member 权限)一览¶
| 角色 | 权限层级(从低到高) |
|---|---|
| Guest | 只读、只能看 public 项目 |
| Reporter | Guest + 可以看代码、拉 issue、看 CI/CD 状态 |
| Developer | Reporter + 可以提交代码( push )、建分支、打 tag、运行 CI |
| Maintainer | Developer + 可以建项目、保护分支、管理 MR、管理仓库设置 |
| Owner | 全部权限,可删除项目/组、改成员、转移 |
用命令行(cli)管理成员(也可网页操作)¶
GitLab 一般用 Web 界面,但 CLI/脚本也能管理:
# 添加成员到项目(developer 角色)
gitlab-rails runner "p = Project.find_by(path: 'myrepo'); p.add_member(User.find_by(username:'alice'), Gitlab::Access::DEVELOPER)"
# 或用 gitlab api(personal_access_token)
curl --header "PRIVATE-TOKEN: <token>" \
"https://gitlab.bangdream.xyz/api/v4/projects/<pid>/members" \
-d "user_id=<uid>&access_level=30" # 30=Developer
提示 |
access_level数值:10 Guest、20 Reporter、30 Developer、40 Maintainer、50 Owner。网页操作时选择角色即可,无需记数字。
项目可见性与权限¶
| 可见性 | 谁能看 |
|---|---|
| Private | 仅明确加入的成员 |
| Internal | 已登录的该 GitLab 用户可见 |
| Public | 任何人可见,但写还需要权限 |
保护分支(Protected Branches)¶
线上主分支(如 main)建议"保护",避免直接 push,必须走 Merge Request 且可能要求 Code Review:
- 网页:项目 → Settings → Repository → Protected branches。
- 常见设置:
main只允许 Maintainer 推送;对 Developer 关闭直接 push。 - 效果:开发要改主分支,先建分支 → push → 提 MR → 被审 → 合并。
实战经验 | 生产分支一律保护;持续集成在 protected 分支上触发。这能有效防止"随手覆盖 main"。
用户来源:本地 / LDAP / OAuth¶
- 本地注册:默认网页可注册(生产可关掉,设
signup_enabled=false,避免陌生人注册)。 - LDAP/AD:企业内用统一账号。
- OAuth:
dsh.bangdream.xyz用的 GitHub OAuth 认证就是这种思路。
管理用户与操作的常见坑¶
| 坑 | 说明 | 解决 |
|---|---|---|
| 陌生账号能注册进来 | 默认 signup 开了 | 关掉或加邮箱验证、域名白名单 |
| 权限给太大 | 给了 Maintainer 却只想让别人只读 | 用最小权限;能 Guest 就别 Reporter |
| 有人能删仓库 | Owner 才有删除权限 | 别给普通成员 Owner |
| SSH key 不生效 | 用户未添加 key | 用户在设置里加 key;服务端确认 ~/.ssh/authorized_keys |
| 忘了某个人的权限 | 成员散落 | 用"组"统一管理,定期看 Members 列表 |
安全建议¶
- 最小权限:给到刚好够用的角色即可,别养成"都是 Maintainer"。
- 强制 2FA(可选):
gitlab_rails['two_factor_grace_period']等,生产建议开。 - 保护生产分支 + 要求 Code Review。
- 定时清理离职/陌生成员与无用的个人访问令牌。
相关命令¶
- API 查权限:
curl ... /projects/<pid>/members - 看用户:
gitlab-rails runner "User.all.each { |u| puts u.username }" - 网页:项目/组 → Members 管理角色;Settings → Repository 管分支保护。