设为首页 收藏本站
查看: 1699|回复: 0

[经验分享] 使用Gitolite来对Git的repository实现权限控制

[复制链接]

尚未签到

发表于 2018-1-15 21:41:54 | 显示全部楼层 |阅读模式
  我们项目组打算从svn向git迁移,前几天我搭建了git环境,把代码从svn转移过来,然后所有成员都通过server上的git账号来做pull和push,一切都安置妥当,没有问题。但是后来其它项目组也打算使用这个git server,那么问题来了,之前那种授权的方式肯定是不够的,因为只要能连上server,那么他对这个server上所有的repository都有完全的读写权限,这显然是不可接受的。 所以打算使用Gitolite这个组件来做权限控制,搜索了下,找到的文章貌似都是老版本的,所以有了写这篇文章的想法。 Gitolite其实也是一个git repository,首先在server上安装好后,在client上把server上的repository clone下来,在本地做一些更改,再push回server,server端的hooks会根据push上来的配置来更新权限。 接下来,介绍下安装和配置步骤

准备工作
  如果你之前是用git账号来做权限控制的话,记得把/etc/passwd里git用户的shell换回/bin/bash,然后把~git/.ssh/authorized_key里不再需要的key移除。 用ssh-kengen生成一对key,比如your-name和your-name.pub(下文均以此为例) 拷贝私钥到本用户的.ssh文件夹中
  

mv your-name ~/.ssh/  

  拷贝公钥到git server上
  

scp you-name.pub git@your.server.name.or.ip.address:~  

  为了以后方便,这里可以做一个server别名,指定连接所需的用户名,server的地址、端口以及私钥
  

vim ~/.ssh/config  

  输入以下内容
  

host githost  
user git
  
hostname your.server.name.or.ip.address
  
port 22
  
identityfile ~/.ssh/your-name
  

安装Gitolite
  登录git server
  

ssh git@your.server.name.or.ip.address  

  下载最新的Gitolite
  

git clone git://github.com/sitaramc/gitolite  

  安装,这里说明下,安装方式有3种,区别在与指定生成gitolite可执行文件的路径,这里采用Gitolite作者推荐的第二种,也就是把文件生成到$HOME/bin中,这样可以在接下来的bash中直接执行gitolite命令而不用指定路径(如果你的~/bin目录不存在记得先mkdir ~/bin)
  

gitolite/install -ln  

  设置,由于是第一次运行这个命令,所以这里指定的key是拥有Gitolite管理员权限的
  

gitolite setup -pk your-name.pub  

  此命令会在你的~/repositories/目录生成两个repository:gitolite-admin.git和testing.git

配置权限
  退到你的workstation上
  

exit  

  clone刚才生成的gitolite-admin.git
  

git clone githost:gitolite-admin  

  注意这里用的是刚才准备好的server别名来连接的,其中最重要的区别是使用your-name.pub这个key,并且没有采用绝对路径来指定想要clone的repository,而是直接使用名称,并且这个名称也没有包括.git这个后缀。这一点很重要,因为这是用Gitolite的机制来clone,如果你跳过它直接使用git来,那么它的一些功能就无法实现了。以后clone, push其它需要受Gitolite权限控制的repository都必须这样做。 clone完后会有个新的目录gitolite-admin,里面有两个文件夹conf和keydir,第一个目录中包含的是配置文件,里面就是记录权限配置的地方,第二个目录中则包含所有用户的pub key。 现在我们打开配置文件,按照我们的权限配置需要进行设置
  

vim gitolite-admin/conf/gitolite.conf  

  我期望的配置如下,你也可以根据你的需要做更改
  

@repos_a @proj1 @proj2  
@repos_b @proj3 @proj4 @proj5
  

  
@team_a @user1 @user2
  
@team_b @user3 @user4
  

  
repo gitolite-admin
  
RW+ = your-name
  

  
repo @repos_a
  
RW+ = @team_a
  
R = @all
  

  
repo @repos_b
  
RW+ = @team_b
  

  这个配置很简单,首先定义了两个repository group,再又定义了两个user group,group的好处就是以后添加repository和user的时候,不需要再单独配置,只需加入到对应的group中即可。


  • 添加全新的repository,在上面提到的gitolite.conf文件中配置好对应的名称和权限,再push到server即可,server会自动帮你创建一个empty的bare repository。
  • 如果你已经有一个repository,想把它加进来的话,那就把它拷贝到git server上的~/repositories文件夹里,记得文件夹名要以.git结尾,并且这个repository一定要是bare的,(你可以通过拷贝repository里的.git文件夹,然后运行git config --bool core.bare true,也可以运行git clone --bare your-repository来得到bare repository)。这种方式还有一个额外的操作就是在server上运行一次gitolite setup。
  • 移除repository,在配置文件中移除对应的repo,然后push,接着再删除server上对应的文件夹即可。


  • 添加user,把pub key拷贝到keydir文件夹里
  • 删除user,一样,移除keydir里对应的pub key
  注意,上面说的操作,都必须在clone的gitolite-admin里做更改,然后push,千万别在server上自己来,那样是没用的,因为这些权限配置、repository管理都有一些额外的操作,gitolite-admin会帮你搞定一切。 把你的更改push回server上,试试clone,pull,push,看看权限是否正确。比如
  

git clone githost:proj3  

  更多的内容,可以参考官方文档 本文由Roy最初发表于:http://blog.chengbo.net/2012/04/20/use-gitolite-to-manage-git-repositories.html,你可以在保持文章完整和保留本声明的情况下转帖、分发和印刷等。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435483-1-1.html 上篇帖子: centos+git+gitolite 安装和部署 下篇帖子: Git 客户端在 WebIDE 中的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表