blog mail me! feed

实现Github的代码仓库权限控制.

Github这个social coding的代码托管网站风骚得总有让人push, 攒蓝条的冲动.
以上是题外话.

最近回头去, 把以前断断续续没写完的Project gitar(web端的多用户仓库管理界面)继续拾起来开发,
也遇到了些问题: 比如, 如何实现github那样的, 对用户的公共仓库进行权限控制,
今天仔细翻了翻sshd和git的文档, 终于找到了一个解决方法.

[1] 修改sshd_config, 将PermitUserEnvironment设置为yes, 以保证能够在authorized_keys文件中, 对环境变量进行设置.

[2] 对于每个用户提交的RSA公钥, 在其

ssh-rsa AA….== foo@bar

的前面, 加上

environment=”GITAR_USER=username”

这样用户通过了公钥认证后, 当前的session的环境变量中, 即保存了用户的gitar用户名.

[3] 使用git hooks, 匹配环境变量 $GIT_DIR 路径中所包含的用户名信息, 和$GITAR_USER 中的当前用户名,
用户名不匹配时, 即通过产生不为0的exit code, 终止远端的push操作.

[4] 当然Github中还可以添加collaborators, 也可以对特定仓库添加public keys, 可以通过扩充用户session的环境变量来实现目的.
或者, 也可以使用shell脚本调用一个python脚本, 将 $GITAR_USER 的值与数据库中的collaborators进行比对.

米杨 said,

August 16, 2010 @ 10:39 am

你好,我现在也在研究git的public repository的权限问题,github应该用的是gitosis,我的问题是,能不能不用gitosis就能实现像github那样的push的时候都是通过git这一个用户,而不用为每个accout新建一个user,你是怎么做的呢?谢谢

RSS feed for comments on this post · TrackBack URI

Leave a Comment