SVN联合LDAP的安装调试(原创)

环境准备

1、Centos系统:CentOS7系统安装
2、Nginx软件: Nginx基本配置(后期如有可能更改为Nginx提供代理服务)

SVN,即Subversion,主要用户版本管理,在不使用的其它组件的情况下,它使用

  1. /svn安装路径/版本库/conf/ 下的svnserve.conf 管理系统配置,
  2. passwd管理用户密码,
  3. authz 管理用户组及SVN路径、权限。

每次新增版本库,就要配置这些文件。每次增加用户、用户组、路径、访问权限,都要手动修改这些文件,极易出现问题。所以我们这里使用

  1. iF.SVNAdmin采用Web页面来配置系统(主要用来配置用户访问路径及权限),
  2. 使用LDAP来做用户认证。

这样在LDAP配置完成后就不用手动配置svnserve.confpasswdauthz这几个配置文件了。

我们先以本地配置为主,然后再通过修改配置来配置成 SVN+iF.SVNAdmin+LDAP 访问。

软件安装

svn服务器有2种运行方式:独立服务器和借助apache运行,我们使用Apache代理运行。svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

安装APACHE、Subversion

1、安装网站代理服务Apache

yum install httpd        

2、安装SVN server

yum imstall subversion

# 查看软件版本及安装状态
svnserve -version

3、安装其它相关插件

yum install mod_dav_svn

查看安装结果。安装完成后会生成mod_dav_svn.somod_authz_svn.so两个文件。

软件本地配置

创建版本库

1、创建版本库目录
此路径可随意设置,但必须和后面要配置文件/etc/httpd/conf.d/subversion.conf 配置一样。

mkdir /var/www/svn    #为了方便Apache管理,我把目录放置到WEB目录下。

2、创建版本库
可以创建多个,这里创建两个,通过设置,两个版本库共用一套本地认证系统。

svnadmin create /var/www/svn/documents    # 创建名称为 documents 的版本库
svnadmin create /var/www/svn/product    # 创建名称为 product 的版本库

查看版本库目录及内容、权限,可以看到现在文件所有者是当前系统用户,而不是WEB需要用的apache用户

3、修改目录权限

chown -R apache:apache /var/www/svn/documents/
chown -R apache:apache /var/www/svn/product/

查看权限,已经将用户和组更改为apache用户及用户组。

配置版本库

1、将配置文件复制到版本库父目录

cp -a product/conf/* ./    #将任意一个版本库复制到版本库的父目录,当然你也可以每个版本库都有一套独立的认证系统

此目录下的passwd文件可能在添加用户时失效,不能添加,可自己创建一个同名文件。
使用命令创建用户 admin (用户名后面不要输入空格)

htpasswd /var/www/svn/passwd admin

2、修改权限配置文件设置用户组、路径、权限

vi /var/www/svn/authz
  • 原始文件的21行用于设置用户组,要求在/var/www/svn/passswd文件内必须有此用户,每两个用户之间用英文逗号隔开。可以设置多个用户组,同一用户尽量不要在多个组中。
  • 原始文件25行用户设置根路径权限:
    • “=”号前
    • *所有用户
    • @XXX用户组
    • XXX单个用户
    • “=”后
    • 代表不可读写
    • r 代表只读
    • rw 代表读写
    • rw 优先级最高,其次是r,然后是,用户和所在用户组可以在同一路径下,权限以r,rw 为准。
  • 原始文件30行设置子路径,权限设置规则同根路径。

最后结果如下:

[groups]                 # 用户组
admin=admin,yunlong.liu    # 用户组及其成员

[/]                        # 根路径
@admin = rw                # 管理员组可读写

[documents:/]            # documents 路径
@admin = rw                # 管理员组可读写
* = r                    # 所有用户只读
[docunemts:/01_test]    # docunemts:/01_test 二级目录路径
@admin = rw                # 管理员可读写
yunlong.liu = r            # 单个用户只读
test =                     # 单个用户不可读写,具体为,在用户不可见该目录

[product:/]                # product路径
@admin = rw                # 管理员可读写
test = r                # 单个用户只读

Apache配置代理服务

cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf
vi /etc/httpd/conf.d/subversion.conf

添加以下语句

<Location /svn>
    DAV svn
    SVNParentPath /var/www/svn
    SVNListParentPath on

    AuthType Basic
    AuthName "Subversion repository"
    AuthzSVNAccessFile /var/www/svn/authz
    AuthUserFile /var/www/svn/passwd
    Require valid-user
</Location>

重启apache

systemctl restart httpd

使用iF.AVNAdmin管理SVN

在svn管理中,每次变动,都得手动修改配置文件,极易出错,所以我们选择使用iF.SVNAdmin程序来管理SVN,通过网页配置自动修改/etc/openvpn/下的passwd和authz 文件。

安装iF.SVNAdmin

这个软件只是一个php网页程序,挂载在Apache下运行。前面已经安装过Apache和PHP,这里不再重复。

1、下载并解压软件

wget http://sourceforge.net/projects/ifsvnadmin/files/svnadmin-1.6.2.zip/download
unzip download

2、修改程序文件
复制程序文件到网页目录下

cp -r iF.SVNAdmin-stable-1.6.2/ /var/www/html/svnadmin

3、修改用户属主

#修改数据目录为所有用户可写(777)
chmod -R 777 /var/www/html/svnadmin/data/
#网页文件属主改变为apache.
chown -R apache:apache /var/www/html/svnadmin/
修改passwd用户文件,authz 权限文件属主为apache:apache
chown -R apache:apache /var/www/svn/ 

5、重新启动httpd服务

systemctl restart httpd

配置iF.SVNAdmin

1、登录网址 http://SVNAdminHost/svnadmin/settings.php

2、修改配置

  • Subversion 授权文件 :为你在服务器上SVN授权文件(authz)的绝对路径。
  • 用户身份验证文件:为你在服务器上SVN用户密码(passwd)的绝对路径
  • 代码仓库的父目录 (SVNParentPath) 为服务器上SVN代码库的上级目录
  • 其它默认
  • 点击Test按纽,测试一下,如果显示Test passed,则成功了,保存一下。

这个页面在配置时,直接单击目标单元格,会自动出现相应选项,直接选择默认就行了。

3、选择一个用户做为管理员,保存退出

4、输入用户名、密码登录管理系统

内部配置简介

图例中以编号对应功能如下所示

  1. 代码仓库:可以查看、添加、删除版本库
  2. 用户:可以查看、添加、修改、删除用户(使用LDAP后仅能查看)及用户的访问路径权限
  3. 组:可以查看、添加、修改、删除用户组,管理用户组下的用户和路径权限
  4. 访问路径:可查看、添加、删除访问路径,修改访问用户、用户组的访问权限。
  5. 设置:可以修改SVN的访问设置,本节配置和下节配置均在此配置。
  6. Session:可以修改当前用户密码,退出系统登录。
  7. 点击五星可以增加所在行为访问路径。
  8. 这这里可以查看路径。

使用iF.SVNAdmin管理+LDAP认证管理SVN

因为前面已经将各类软件基本安装、调试完毕,这里仅做小的修改。安装部分插件。
其中需要php-ldap,mod_ldap两个模块。

安装相关组件

1、SVN服务器上安装 php-ldap mod_ldap 模块

yum install php-ldap
yum install mod_ldap

#重启httpd 加载上面两个模块
systemctl restart httpd

修改后台配置

访问网址:http://172.17.1.12/svnadmin/settings.php

修改如下
Subversion 授权相关

Subversion 授权文件:   /var/www/svn/authz

数据提供方相关

User view provider type:    ldap
User edit provider type:    off
Group view provider type:    ldap
Group edit provider type:    off
Repository view provider type:    svnclient
Repository edit provider type:    svnclient

Subversion 设置相关

代码仓库的父目录 (SVNParentPath):                /var/www/svn
'svn.exe' 或 'svn'可执行文件:                /usr/bin/svn
'svnadmin.exe' 或 'svnadmin' 可执行文件:        /usr/bin/svnadmin

LDAP 连接信息相关

LDAP主机地址:    ldap://172.17.1.12:389/
Bind DN:        cn=root,dc=cafintech,dc=com        # 这里设置你的LDAP管理账号,或者仅有查询权限的账号
Bind password:                                   # 上面用户的密码

LDAP 用户信息相关

Base DN: ou=People,DC=cafintech,DC=com            # 搜索用户路径
Search filter: (&(objectClass=person) (ou=svn))    # 用户限定表达式
Attributes:  cn                                    # LDAP传输到SVN的用户名属性

LDAP 用户组信息相关

Base DN:                        ou=Groups,DC=cafintech,DC=com
Search filter:                    (&(objectClass=groupOfUniqueNames)(ou=svn))
Attributes:                        cn
Groups to user attribute:        uniqueMember
Groups to user attribute value:    dn

保存

同步一下数据,做好备份,把/var/www/svn/authz文件保存好,因为同步时会修改这个文件,如果出错就得恢复这个文件。

  • 如果是新回调服务器无需做此步
  • 如果已经用了用户,数据,并配置了相关路径权限,一定要保证你LDAP中的用户名与你原系统中用户名一致,否则就不能使用原用户名登录,所有权限得重新配置。
  • 在用户列表中选择一个用户,添加超级管理员权限

至此,你的LDAP用户可以登录 iF.SVNAdmin后台进行查看了,但是访问SVN时提示没有此用户,或者密码错误(看日志),我们继续修改配置文件。

修改SVN配置文件

1、修改配置文件

vi /etc/httpd/conf.d/subversion.conf

#下面前三行来自文件/etc/httpd/conf.modules.d/10-subversion.conf 用于配置库文件
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so
<Location /svn>
    DAV svn
    SVNParentPath /var/www/svn            #SVN父路径
    #SVNPath /var/www/svn 
    SVNListParentPath on                #是否可以列出父路径    
    AuthBasicProvider ldap                #认证方式主ldap
    AuthType Basic                        #认证类型为基本
    AuthName "Subversion repository"    #版本名称

AuthLDAPURL "ldap://172.17.1.16:389/dc=cafintech,dc=com"    #LDAP路径

#绑定的管理员用户  不使用iF.SVNAdmin配置时,一定要加上这两项
#AuthLDAPBindDN "cn=Manager,dc=cafintech,dc=com"
#AuthLDAPBindPassword ****************                #绑定的管理员密码
    AuthzSVNAccessFile /var/www/svn/authz            #权限认证文件
    #AuthUserFile /var/www/svn/passwd                #不使用LDAP认证的本地认证用户名密码
    Require valid-user                                #验证用户
</Location>

7、重启httpd

systemctl restart httpd

设置示例图

LDAP的相关配合设置

LDAP管理端对用户的设置

  1. Groups下新增ou 用于分类,
  2. 然后新增groupOfUniqueNames,RDNcn,
  3. 增加uniqueMember并赋值为一个用户的完整DN.
  4. 增加ou属性值为svn(也可以是其它,但是要和前面配置的Search filter配置相结合)

到此,SVN已经和LDAP集成进行统一认证了。

文章引用


本文结束
生产不易,搬运不易,如果对您有帮助,请打赏一下下。