码迷,mamicode.com
首页 > Web开发 > 详细

再谈git的http服务-权限控制hooks版

时间:2017-03-30 10:57:38      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:return   使用   pre   content   全局变量   ppa   blog   rem   无法   

  通过git-http-backend方法提供的http服务基本上可以做到认证用户才能使用,但只能控制到服务器路径访问,而且无法区分读写。经过不懈努力,找到了方法,但涉及到脚本编写,暂时未有成熟版本提供

  基本思路就是利用apache的路径权限设置控制版本库的读权限;通过hooks/pre-receive钩子来控制版本库的写权限,具体钩子的原理和用户这里不写了。git提供了几个全局变量可以在pre-receive钩子里面使用,详情可以参看git-http-backend manual page

  通过REMOTE_USER获取执行push的用户名,通过PATH_INFO获取项目名称。

  附上我的未完成pre-receive:

#!/bin/sh
read old new refname
echo "pre-receive called"
#git log
echo "REMOTE_USER: " $REMOTE_USER
echo "REQUEST_METHOD: " $REQUEST_METHOD
echo "PATH_INFO:" $PATH_INFO
echo "CONTENT_TYPE: " $CONTENT_TYPE
echo "QUERY_STRING: "$QUERY_STRING
#return 1 to deny push,0 to accept push
exit 1

  以及apache的git.conf相应内容:

#config for git-http-backend
SetEnv GIT_PROJECT_ROOT /git/repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /mygit/ /usr/libexec/git-core/git-http-backend/

#privilege config
<Location /mygit/test>
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /git/repositories/git.passwd
    AuthGroupFile /git/repositories/git.group
    <Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        Require group test-write
    </Limit>
</Location>

   /git/repositories/git.group如下:

test-read:bill jobs
test-write:jobs

 

再谈git的http服务-权限控制hooks版

标签:return   使用   pre   content   全局变量   ppa   blog   rem   无法   

原文地址:http://www.cnblogs.com/badwood316/p/6644339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!