一、 环境准备

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 方式更安全一点。

2.1 安装 APACHE、Subversion

1、安装网站代理服务 Apache

yum install httpd -y

2、安装 SVN server

yum imstall subversion -y

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

SVN安装版本及状态

3、安装其它相关插件

yum install mod_dav_svn -y

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

插件安装结果

三、 软件本地配置

3.1 创建版本库

1、创建版本库目录

此路径可随意设置,但必须和后面要配置文件/etc/httpd/conf.d/subversion.conf 配置一样。

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

2、创建版本库

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

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

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

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

版本库目录及文件权限

3、修改目录权限

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

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

修改后的文件属主

3.2 配置版本库

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 行设置子路径,权限设置规则同根路径。

权限配置文件(authz)修改

最后结果如下:

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

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

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

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

3.3 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

使用TortoiseSVN测试服务

四、 使用 iF.AVNAdmin 管理 SVN

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

4.1 安装 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

4.2 配置 iF.SVNAdmin

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

2、修改配置

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

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

iFSVNAdmin后台连接配置

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

iFSVNAdmin 管理员配置

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

iFSVNAdmin管理后台登录

4.3 内部配置简介

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

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

iFSVNAdmin管理后台配置页面功能

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

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

5.1 安装相关组件

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

yum install php-ldap
yum install mod_ldap

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

5.2 修改后台配置

访问网址: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 时提示没有此用户,或者密码错误(看日志),我们继续修改配置文件。

5.3 修改 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

设置示例图

安装

iFSVNAdmin 管理后台设置

5.4 LDAP 的相关配合设置

LDAP 管理端对用户的设置

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

LDAP 管理端设置

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

文章引用