凌峰创科服务平台

Linux Git服务器搭建如何配置?

Linux Git服务器搭建是企业级代码管理的核心环节,通过自建Git服务器可以实现代码的集中管控、权限精细化分配以及数据安全可控,本文将详细讲解在Linux环境下搭建Git服务器的完整流程,包括服务初始化、仓库创建、用户管理、权限控制及安全配置等关键步骤,帮助开发者构建稳定高效的代码托管平台。

环境准备与基础安装

在开始搭建前,需确保Linux系统满足基本要求:推荐使用Ubuntu 20.04+或CentOS 7+系统,内存至少2GB,硬盘空间根据项目规模预留(建议至少50GB),首先更新系统并安装Git及相关依赖工具:

# Ubuntu/Debian系统
sudo apt update && sudo apt install -y git openssh-server
# CentOS/RHEL系统
sudo yum update -y && sudo yum install -y git openssh-server

安装完成后验证Git版本:

git --version

建议使用Git 2.0以上版本以获得更好的性能和功能支持,同时确保SSH服务已启动并开机自启:

sudo systemctl start sshd
sudo systemctl enable sshd

创建Git专用用户与仓库目录

为安全起见,建议创建独立的Git系统用户,避免使用root用户操作:

sudo useradd -m -s /bin/bash git
sudo passwd git  # 设置密码(可选,后续主要通过SSH密钥认证)

创建Git仓库的根目录,并设置正确的权限:

sudo mkdir -p /srv/git
sudo chown git:git /srv/git
sudo chmod 755 /srv/git

初始化 bare 仓库

Git服务器通常使用"bare仓库"(无工作目录)模式,这种仓库仅包含版本历史信息,适合作为中央仓库,创建第一个示例仓库:

sudo -u git git init --bare /srv/git/project.git

参数说明:

  • --bare:创建裸仓库,不包含工作区
  • -u git:以git用户身份执行,确保权限正确

仓库创建后,目录结构如下:

/srv/git/project.git/
├── branches/    # 分支目录
├── config       # 仓库配置文件
├── description  # 仓库描述
├── HEAD         # 当前分支指针
├── hooks/       # Git钩子脚本目录
├── info/        # 仓库信息目录
├── objects/     # 对象数据库(核心数据)
└── refs/        # 引用目录(标签、分支等)

用户SSH密钥配置

用户通过SSH协议访问Git服务器时,需提前将公钥添加到服务器的authorized_keys文件中,以用户"developer"为例:

  1. 用户端生成SSH密钥对(若无):
    ssh-keygen -t rsa -b 4096 -C "developer@example.com"
  2. 将公钥(~/.ssh/id_rsa.pub)通过安全通道发送至服务器
  3. 在服务器端添加公钥:
    sudo mkdir -p /home/git/.ssh
    sudo chmod 700 /home/git/.ssh
    sudo touch /home/git/.ssh/authorized_keys
    sudo chmod 600 /home/git/.ssh/authorized_keys
    # 将用户公钥追加到authorized_keys文件
    sudo sh -c "echo 'ssh-rsa AAAAB3NzaC1yc2E...' >> /home/git/.ssh/authorized_keys"
    sudo chown -R git:git /home/git/.ssh

权限管理与访问控制

基于文件系统的权限

通过操作系统文件权限控制用户访问:

# 允许特定用户读写
sudo chmod -R 770 /srv/git/project.git
sudo chown -R git:devgroup /srv/git/project.git  # 假设devgroup是开发组

使用Gitolite进行高级权限管理

对于需要精细权限控制的场景,推荐使用Gitolite:

# 安装Gitolite
sudo apt install -y gitolite3
# 初始化Gitolite(使用管理员的公钥)
sudo -u git gl-setup admin.pub

Gitolite通过~/.gitolite/conf/gitolite.conf配置文件管理仓库和权限:

repo project
    RW+ = developer1
    RW = developer2
    R = guest

Git服务器权限配置对比表

配置方式 优点 缺点 适用场景
文件系统权限 简单易用,无需额外工具 权粒度粗,难以批量管理 小型团队,简单权限需求
Gitolite 细粒度权限,支持分支/标签控制 配置较复杂,需学习语法 中大型团队,复杂权限模型
GitLab/Gitea 提供Web界面,支持CI/CD 资源消耗大,需额外维护 需要完整DevOps平台的企业

安全加固措施

  1. 禁用密码登录:编辑SSH配置文件/etc/ssh/sshd_config,设置:

    PasswordAuthentication no
    PubkeyAuthentication yes

    重启SSH服务:sudo systemctl restart sshd

  2. 防火墙配置:仅开放必要端口(默认SSH端口22)

    sudo ufw allow 22/tcp
    sudo ufw enable
  3. 定期备份:创建备份脚本,定期备份仓库目录:

    #!/bin/bash
    DATE=$(date +%Y%m%d)
    tar -czf /backup/git-backup-$DATE.tar.gz /srv/git
  4. 日志审计:监控Git操作日志:

    tail -f /var/log/auth.log  # SSH登录日志
    git log --pretty=format:"%h %an %ad %s" --date=short  # 仓库操作历史

客户端使用示例

用户克隆仓库:

git clone git@server:/srv/git/project.git

提交代码:

cd project
echo "echo 'Hello Git'" > test.sh
git add test.sh
git commit -m "Add test script"
git push origin main

相关问答FAQs

问题1:如何为Git仓库设置只读权限?
解答:可以通过文件系统权限或Gitolite实现,文件系统方式:sudo chmod -R 755 /srv/git/repo.git(755表示所有者读写,其他用户只读);Gitolite方式在配置文件中使用R权限,如repo test R = user1,对于需要临时只读的情况,也可通过Git钩子(如pre-receive)实现提交拦截。

问题2:Git服务器出现"Permission denied (publickey)"错误如何排查?
解答:按以下步骤排查:1)检查客户端公钥是否正确添加到服务器/home/git/.ssh/authorized_keys;2)确认文件权限:authorized_keys应为600,.ssh目录应为700;3)检查Git用户shell配置:/etc/passwd中Git用户的shell应为/bin/bash而非/usr/sbin/nologin;4)服务器端查看SSH日志:/var/log/auth.log定位具体错误原因;5)客户端使用ssh -vT git@server调试连接过程。

分享:
扫描分享到社交APP
上一篇
下一篇