首页 > 代码库 > 再谈git的http服务-权限控制hooks版
再谈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/shread old new refnameecho "pre-receive called"#git logecho "REMOTE_USER: " $REMOTE_USERecho "REQUEST_METHOD: " $REQUEST_METHODecho "PATH_INFO:" $PATH_INFOecho "CONTENT_TYPE: " $CONTENT_TYPEecho "QUERY_STRING: "$QUERY_STRING#return 1 to deny push,0 to accept pushexit 1
以及apache的git.conf相应内容:
#config for git-http-backendSetEnv GIT_PROJECT_ROOT /git/repositoriesSetEnv GIT_HTTP_EXPORT_ALLScriptAlias /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 jobstest-write:jobs
再谈git的http服务-权限控制hooks版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。