This commit is contained in:
卢克
2012-10-09 17:05:32 +08:00
parent 9127583a09
commit 5ab0cef790
+2 -2
View File
@@ -15,7 +15,7 @@ git作为一个分布式的版本控制系统,其实client端和server的差别
<br>
使用git的时候,一般和服务器通讯使用的是ssh协议,用ssh的主要优点是速度快(传输前数据会先压缩,比HTTP快 :]),安全,方便读写。
客户端通过ssh访问服务器端的验证方式一般有两种,一种是用户名密码的方式,一种是使用公私钥认证的方式.
使用公私钥的方式比较方便,无需每次登录输入用密码。
使用公私钥的方式比较方便,无需每次登录输入密码。
某个受信任的客户端的公钥会被设置在服务器端的 ~/.ssh/authorized_keys文件中,有关此文件的格式可以参见 sshd的用户手册 `man sshd` . authorized_keys有个比较厉害的功能是 支持 command参数,使得每次用户使用此公钥进行验证的时候执行此后面的命令.这样就可以做一些逻辑处理了.
<br>
一般git库的管理需要权限控制,如果方便简单的进行库的权限管理呢? authorized_keys是一个思路,指定特定command参数,每次验证好用户后首先执行相关逻辑,检测当前用户是否具有某个权限。
@@ -26,7 +26,7 @@ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
{% endhighlight %}
执行之后,home目录下出现一个repositories的目录,目录下存在一个gitosis-admin.git的git库. 其实gitosis就是通过这个git库来管理所有git库的访问权限的。
在刚才你的客户端机器上clone出这个库,因为你刚刚用你的公钥初始化了gitosis,所以你有权限访问服务器端的库。
在刚才你的客户端机器上clone出这个库,因为你刚刚用你的公钥初始化了gitosis,所以你有权限访问服务器端的库(其实你可以在服务器端看看authorized_keys文件便知道原因了)。
这个gitosis-admin的库中存在一个gitosis.conf和一个keydir的目录,gitosis.conf文件就是权限配置的地方,keydir目录下存放的是所有客户端的公钥,公钥名字必须和配置文件中的member名字对应.至于gitosis.conf的语法及用法可以去查看帮助。
当修改完配置和添加好需要添加的公钥之后,提交并push到git服务器,这个库的存在hook,当提交后,会根据新的配置和公钥去更新服务器端git用户的authorized_keys,以便加入新用户的公钥,用于权限控制命令,以及在裸库的目录下提取出新的gitosis.conf文件。
<br>