最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
配置企业内部Git服务器搭建与权限分配的完整教程
时间:2026-06-22 11:44:48 编辑:袖梨 来源:一聚教程网
裸仓库必须用 git init --bare 初始化,否则客户端 push 会失败;它不含 worktree,只存 Git 元数据,是唯一被 SSH/HTTP 协议认可的远程仓库形态,路径建议以 .git 结尾,且需严格配置目录归属、SSH 公钥权限及 git 用户 shell 限制。
裸仓库必须用 --bare 初始化,否则客户端 push 会失败
Git 服务器不能直接用普通仓库(含工作目录)对外提供服务。裸仓库不含 worktree,只存 Git 元数据,是唯一被 SSH/HTTP 协议认可的远程仓库形态。
常见错误是执行 git init 后直接放上去,结果客户端 git push 报错:remote: error: refusing to update checked out branch。
正确做法始终是:git init --bare myproject.git,路径名建议以 .git 结尾,且目录归属必须为 git 用户:chown -R git:git /opt/git/myproject.git。
SSH 公钥必须写入 /home/git/.ssh/authorized_keys,且权限必须严格
只要权限不对,SSH 就拒绝读取公钥——这是最常卡住的环节。
必须确保以下三点同时成立:
• /home/git/.ssh 目录权限为 700(仅 owner 可读写执行)
• /home/git/.ssh/authorized_keys 文件权限为 600(仅 owner 可读写)
• 文件所有者是 git 用户:chown git:git /home/git/.ssh /home/git/.ssh/authorized_keys
漏掉任意一项,git clone git@server:/path.git 都会提示 Permission denied (publickey),且不会告诉你具体哪一步错了。
多用户场景下,禁止 git 用户交互式登录是硬性安全要求
让 git 用户能执行 shell 命令等于开放服务器 root 权限入口——哪怕只配了公钥。
必须锁定其 shell:
• 修改 /etc/passwd 中 git 行,把 /bin/bash 替换为 /usr/bin/git-shell(Git 自带受限 shell)
• 或更彻底:sudo usermod -s /bin/false git
验证方式:手动 ssh git@server 应立即退出,不进入交互;但 git push 等 Git 协议操作不受影响。
忽略这步,审计时基本过不了合规检查。
权限隔离靠文件系统组+--shared,别指望 Git 自己管细粒度权限
Git 本身没有用户/仓库级权限控制。所谓“权限分配”,本质是 Linux 文件权限 + 组管理。
典型做法:
• 创建业务组:sudo groupadd devteam
• 把开发者加进组:sudo usermod -aG devteam alice
• 初始化仓库时启用共享模式:sudo -u git git init --bare --shared=group /opt/git/proj.git
• 再设组所有权:sudo chgrp -R devteam /opt/git/proj.git && sudo chmod -R g+swX /opt/git/proj.git
这样所有 devteam 成员对仓库有读写权,但无法修改其他组的仓库。真要按人/分支精细控制,得上 gitolite 或 Gitolite3,不是纯 SSH 能解决的。
相关文章
- 《明日方舟终末地》陈千语怎么样-陈千语值得培养吗 07-04
- 《明日方舟终末地》余烬怎样配队-余烬阵容搭配推荐 07-04
- 《明日方舟终末地》骏卫怎么样-骏卫值得培养吗 07-04
- 《明日方舟终末地》莱万汀怎样配队-莱万汀强力配队推荐 07-04
- 《明日方舟终末地》原木怎样获得-原木获得方法 07-04
- 《长生天机降世》太虚境十天智遗迹幻境通关攻略-详细打法解析 07-04