再谈git的http服务-权限控制hooks版
Posted Badwood-涂鸦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再谈git的http服务-权限控制hooks版相关的知识,希望对你有一定的参考价值。
通过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版的主要内容,如果未能解决你的问题,请参考以下文章