`

让Git使用Trac账户进行授权

阅读更多

Trac安装2 - 账户管理中我们可以看到,Trac中可以很方便的进行账户管理,包括用户建立(甚至可注册)、账户信息更改等。搭建Git Http服务器告诉我们如何搭建一个Git的http服务托管。现在,如果能把Trac中的账户信息用作Git Http服务的认证该多好啊:给新人开一个Trac账户,指定相应的授权,那么他就可以检出/更新Git库了!下面就来实现这个想法吧。

 

原理

Trac的账户信息是存储在DB中的(比如MySQL),实际上,我们需要Apache2利用DB中存储的信息来做授权。 Apache的MySQL认证 告诉我们,这很还是简单的(遗憾的是目前只能用MySQL)。

 

但是,我们的Case还要稍微麻烦一点:

问题1)Trac中账户密码的加密方式可以自由选择,超出了Apache MySQL认证的支持(参考Trac 账户管理插件加密方式);

问题2) Trac中账户信息不是简单的user专用表(选择SessionStore方式保存Auth信息时,账户信息在表session_attributes中),没有特定的username和password列。

 

对于问题1,我们需要做的是:指定Trac账户管理插件使用Apache MySQL认证支持的方式进行密码加密,比如MD5。而对于问题2,我想到的方案是:在MySQL中建立独立的用户信息表,利用MySQL触发器同步Trac账户的信息到此表中。

 

为了让Git使用到Trac中的用户权限设置,本例子中我们除了监控trac库中的session_attributes表外,也监控permissions表。下面我们就看一下配置过程:

 

配置Trac

1. 选择AuthStore为SesstionStore,具体参考Trac安装2 - 账户管理

 

2. 选择密码加密(hash)方式为“crypt”(注意MD5中明确告诉我们,Trac账户管理插件不是简单的md5密码,而是 用户名 + “::” + 密码

 

配置MySQL

1. 创建用户信息表:

 

/*简单起见,这里将Git用户表建在Trac的库中,实际操作请自建另外的库*/
CREATE TABLE gituser(
       username char(100),
       passwd char(100),
       primary key (username)
);

 

2.创建MySQL触发器,同步Trac账户信息到我们自己创建的Git用户表中:

 

use trac_database; /*切换到trac库中*/

/*初始化gituser数据*/
INSERT INTO gituser (SELECT username, SUBSTRING(password, 2) FROM session_attributes where name="password");

/*监听trac账户权限记录的新建,将满足权限的用户同步到git用户表中*/
delimiter //
CREATE TRIGGER sync_user_on_insert AFTER INSERT ON permissions
FOR EACH ROW 
BEGIN
  IF action='BROSWER_VIEW' THEN
    INSERT INTO gituser (SELECT  sid, SUBSTRING(value, 2) FROM session_attributes WHERE sid=NEW.username);
  END IF;
END;//
delimiter ;

/*监听trac账户记录的更改,将更改后的账户信息同步到git用户表中*/
CREATE TRIGGER sync_user_on_update AFTER UPDATE ON session_attributes
FOR EACH ROW
UPDATE gituser SET username=NEW.sid, password=SUBSTRING(NEW.password, 2) WHERE username=OLD.sid;

/*监听trac账户权限记录的删除,将满足权限的用户记录从git用户表中删除*/
delimiter //
CREATE TRIGGER sync_user_on_delete AFTER DELETE ON permissions
FOR EACH ROW 
BEGIN
  IF action='BROSWER_VIEW' THEN
    DELETE FROM gituser WHERE username=OLD.username;
  END IF;
END;//
delimiter ;
 

 

配置Apache2的MySQL认证

1. 安装并激活MySQL认证插件:

 

sudo apt-get install libapache2-mod-auth-mysql

cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/auth_mysql.load .

2. 配置Git Http及其认证:

 

SetEnv GIT_PROJECT_ROOT /my_repos_root_path  
SetEnv GIT_HTTP_EXPORT_ALL  
ScriptAlias /repos/ /usr/lib/git-core/git-http-backend/  

<Directory /repos>
    Options Indexes FollowSymLinks MultiViews

    AuthType Basic
    AuthName "restricted git zone by apache"
    AuthUserFile /dev/null

    AuthBasicAuthoritative Off
    AuthMYSQL on
    AuthMySQL_Authoritative on
    AuthMySQL_DB trac_db
    Auth_MySQL_Host localhost
    Auth_MySQL_User dbuser
    Auth_MySQL_Password dbuserpwd
    AuthMySQL_Password_Table gituser
    AuthMySQL_Username_Field username
    AuthMySQL_Password_Field password
    AuthMySQL_Empty_Passwords off
    #AuthMySQL_Encryption_Types SHA1Sum
    AuthMySQL_Encryption_Types PHP_MD5 #注意此处必须和Trac账户管理的加密方式吻合,事实上,只有这个可用
    #Auth_MySQL_Encrypted_Passwords on

    # Standard auth stuff
    Require valid-user
</Directory>
 

 

 

  • 大小: 16.3 KB
分享到:
评论

相关推荐

    Trac-Git安装及配置部署

    Trac支持多种安装方式,这里推荐使用pip进行安装,但需要先确保系统中已安装了Python 2.6或以上版本以及相关的依赖包,如`python-setuptools`、`genshi`等。例如,安装`genshi`可以通过以下命令实现: ```bash ...

    git变更账户:变更账户、修改全局git账户、查看账户

    当需要更换Git账户时,可以按照以下步骤进行操作。 ##### 1. 修改当前文件夹用户 在某些情况下,您可能只想更改某个特定项目的Git配置,而不想影响其他项目。这时,可以通过以下命令来更改当前工作目录下的用户名...

    git使用规范(绝密).pdf

    在进行详细的Git使用规范解读之前,需要明确一点:规范的制定是为了保障代码仓库的整洁、安全以及团队协作的顺畅。以下是根据提供的文件内容,详细解读Git使用规范中的各个知识点。 首先,规范的第一部分介绍了开发...

    Git使用手册.pdf

    Git的使用涉及多个步骤,从安装到日常操作,每个环节都有其特定的命令和流程。 首先,安装Git非常简单,可以从Git官方网站(https://git-scm.com/downloads)下载对应操作系统的版本,并按照默认设置进行安装。安装...

    Git使用教程(电子书)

    ### Git使用教程核心知识点 #### 一、Git简介与应用场景 **Git** 是一款开源的分布式版本控制系统,用于跟踪在软件开发过程中对文件所做的更改。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理Linux...

    Git使用简介.pptx

    本文档将对 Git 的基本概念和使用方法进行介绍,并对 Git 的分支模型进行详细的解释。 Git 的基本概念 Git 的基本概念包括快照、暂存区域和提交记录。快照是文件的当前状态,暂存区域是文件的暂存状态,提交记录是...

    git使用教程git使用教程

    git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程git使用教程...

    Git 使用教程详解.docx

    Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx Git 使用教程详解.docx ...

    git使用教程详细介绍

    Git 使用教程详细介绍 本资源是 Git 使用教程的详细介绍,涵盖了 Git 的基础知识、分支管理、服务器搭建、分布式 Git、Git 工具、自定义 Git 等多方面的内容。通过本教程,读者将了解 Git 的使用方法、版本控制的...

    git使用详细介绍

    git使用详细介绍

    git的使用步骤

    Git Bash是Windows环境下模拟Linux命令行的工具,让你可以在Windows上使用Git的各种命令。在安装完成后,你可以在开始菜单或桌面快捷方式找到Git Bash,双击启动它,这样你就有了一个类似于Linux终端的环境来执行...

    git 使用详细手册

    这份"git 使用详细手册"将深入探讨Git的基本概念、命令行操作、分支管理、远程仓库交互以及解决冲突等关键知识点。 首先,Git的核心概念包括仓库(Repository)、工作区(Working Directory)、暂存区(Index)和...

    gitblit及使用教程

    - **SSH认证**:使用SSH公钥私钥对进行安全的身份验证,提高安全性。 - **RSS订阅**:通过RSS订阅关注仓库的更新。 7. **Gitblit与Git客户端配合** Gitblit可以与各种Git客户端(如SourceTree、GitKraken、...

    git使用培训教程

    初始化Git仓库,通常使用`git init`命令,在本地创建一个新的.git目录,这个目录包含了所有的Git存储和对象数据库,即本地仓库的基础结构。 `git add`命令用于添加文件到暂存区,而`git commit`命令用于将暂存区的...

    git官方使用手册

    ### Git官方使用手册知识点概述 #### 一、前言与背景介绍 - **Git发展史:** Git由Linus Torvalds在2005年创建,初衷是为了更有效地管理Linux内核源代码。随着时间的发展,Git逐渐成为全球范围内开源项目和私有...

    Git简单使用.pdf

    通过这些基本命令,用户可以高效地使用Git进行版本控制和代码管理。然而,Git的学习曲线相对陡峭,尤其对于初学者来说,需要花时间理解各个命令的作用和使用场景。熟练使用Git不仅能够提高工作效率,还可以更好地...

    git使用教程,学会使用git以及github远程仓库操作

    使用sudo useradd -m git sudo passwd git命令创建Git账户。 Git全局参数配置 可以使用git config --add core.filemode false和git config --global core.whitespace cr-at-eol命令配置Git的全局参数。 创建本地...

    git使用详细步骤

    Git 使用详细步骤 Git 是目前世界上最先进的分布式版本控制系统。与集中式版本控制系统 SVN 相比,Git 的主要特点是分布式版本控制系统,每个人的电脑都是一个完整的版本库,这样,工作的时候就不需要联网了,因为...

Global site tag (gtag.js) - Google Analytics