Git 权限控制原理

Git是一款可以替代SVN对代码版本进行管理的工具,近几年,这款由大神Linus开发,托管着linux核心代码的小软件大有在国内彻底取代SVN的架势。

Git虽说很强大,不论是多分支开发,分布式代码库都像重庆小火锅一样让人吃上一口就再也无法停下来,但是Git也有一个很“严重”的问题,那就是没有权限控制功能。Git的创建是作为开源社区的代码版本管理工具而存在的,但当我们把Git引入到团队内部的开发流程中后就会发现没有权限控制的GIT无法保护核心代码的安全,有时候一段错误的代码神不知鬼不觉的出现在底层类库中造成灾难性的后果。

幸好还有SSH。

由于Git的主流连接方式是SSH连接,因此当我们试图控制一个Git中心库权限的时候,可以通过控制SSH登录用户的权限来间接的达到目的。

那如何控制SSH的用户权限呢?既然我们SSH到中心库的时候用的可能都是GIT用户(Linux的用户),又如何区分到底真是用户是谁呢?这里就不得不说SSH的公私钥模式,当我们将某一个用户生成的公钥添加到GIT用户的  ~/.ssh/authorized_keys 文件后,以该用户身份SSH连接到GIT用户时可以免去输入密码的步骤。而Git权限控制的关键环节就在这个authorized_keys文件中。

一般典型的authorized_keys文件每一行都是一个公钥串,简单直接,但其实这个文件可以支持更丰富的SSH连接模式,请看下方的截图

Git 权限控制原理_第1张图片

很显然,这里面除了公钥之外还包括几个其他的配置:

command:以该公钥对应的私钥登陆后执行的厨师命令

no-xxxxx:表示不支持该模式的连接

最后才是对应的公钥。

如此配置的话,如果用户试图使用SSH默认连接方式会得到如下的返回结果


这样可以限制用户不可以毫无顾忌的连接到Git用户进而绕过SSH的权限控制系统。而每次Git的push/pull/clone等操作其实都是一次SSH连接从而激活command命令而执行脚本。

那么剩下的就好解释了,脚本接受参数,然后去做用户权限的判断,如果用户具有权限那么直接执行SSH连接附带的命令请求,如果没有权限直接exit 1就好啦。

你可能感兴趣的:(Git 权限控制原理)